void moverr(int i) { int j; mvprintw(20, 0, "Error: "); for (j = 0; j <= i; j++) { printw("%d-%d", p[j], g[j]); if (j < i) addch(','); } addstr("... "); movback(i); }
void moverr(int i) { int j; if (tflag) curmove(20, 0); else writec('\n'); writel("Error: "); for (j = 0; j <= i; j++) { wrint(p[j]); writec('-'); wrint(g[j]); if (j < i) writec(','); } writel("... "); movback(i); }
tutor () { register int i, j; i = 0; begscr = 18; cturn = -1; home = 0; bar = 25; inptr = &in[0]; inopp = &in[1]; offptr = &off[0]; offopp = &off[1]; Colorptr = &color[0]; colorptr = &color[2]; colen = 5; wrboard(); while (1) { if (! brdeq(test[i].brd,board)) { if (tflag && curr == 23) curmove (18,0); writel (better); nexturn(); movback (mvlim); if (tflag) { refresh(); clrest (); } if ((! tflag) || curr == 19) { proll(); writec ('\t'); } else curmove (curr > 19? curr-2: curr+4,25); getmove(); if (cturn == 0) leave(); continue; } if (tflag) curmove (18,0); text (*test[i].com); if (! tflag) writec ('\n'); if (i == maxmoves) break; D0 = test[i].roll1; D1 = test[i].roll2; d0 = 0; mvlim = 0; for (j = 0; j < 4; j++) { if (test[i].mp[j] == test[i].mg[j]) break; p[j] = test[i].mp[j]; g[j] = test[i].mg[j]; mvlim++; } if (mvlim) for (j = 0; j < mvlim; j++) if (makmove(j)) writel ("AARGH!!!\n"); if (tflag) refresh(); nexturn(); D0 = test[i].new1; D1 = test[i].new2; d0 = 0; i++; mvlim = movallow(); if (mvlim) { if (tflag) clrest(); proll(); writec('\t'); getmove(); if (tflag) refresh(); if (cturn == 0) leave(); } } leave(); }
int movallow() { int i, m, iold, r; if (d0) swap; m = (D0 == D1 ? 4 : 2); for (i = 0; i < 4; i++) p[i] = bar; i = iold = 0; while (i < m) { if (*offptr == 15) break; h[i] = 0; if (board[bar]) { if (i == 1 || m == 4) g[i] = bar + cturn * D1; else g[i] = bar + cturn * D0; if ((r = makmove(i))) { if (d0 || m == 4) break; swap; movback(i); if (i > iold) iold = i; for (i = 0; i < 4; i++) p[i] = bar; i = 0; } else i++; continue; } if ((p[i] += cturn) == home) { if (i > iold) iold = i; if (m == 2 && i) { movback(i); p[i--] = bar; if (p[i] != bar) continue; else break; } if (d0 || m == 4) break; swap; movback(i); for (i = 0; i < 4; i++) p[i] = bar; i = 0; continue; } if (i == 1 || m == 4) g[i] = p[i] + cturn * D1; else g[i] = p[i] + cturn * D0; if (g[i] * cturn > home) { if (*offptr >= 0) g[i] = home; else continue; } if (board[p[i]] * cturn > 0 && (r = makmove(i)) == 0) i++; } movback(i); return (iold > i ? iold : i); }
int checkmove(int ist) { int curr, curc; int j, n; int c; domove: getyx(stdscr, curr, curc); if (ist == 0) mvprintw(curr, 32, "Move: "); ist = mvl = ncin = 0; for (j = 0; j < 5; j++) p[j] = g[j] = -1; dochar: c = readc(); if (c == 'S') { raflag = 0; save(1); move(cturn == -1 ? 18 : 19, 39); ist = -1; goto domove; } if ((c == KEY_BACKSPACE || c == 0177) && ncin > 0) { getyx(stdscr, curr, curc); move(curr, curc - 1); ncin--; n = rsetbrd(); if (n == 0) { n = -1; refresh(); } if ((ist = n) > 0) goto dochar; getyx(stdscr, curr, curc); move(curr, 39); clrtoeol(); goto domove; } else if (c == KEY_DL && ncin > 0) { getyx(stdscr, curr, curc); move(curr, 39); clrtoeol(); ist = -1; refresh(); goto domove; } if (!isascii(c) || (ncin >= CIN_SIZE - 1)) { beep(); goto domove; } n = dotable(c, ist); if (n >= 0) { cin[ncin++] = c; if (n > 2) if (c != '\n') addch(c); ist = n; if (n) goto dochar; else goto domove; } if (n == -1 && mvl >= mvlim) return(0); if (n == -1 && mvl < mvlim-1) return(-4); if (n == -6) { if (movokay(mvl + 1)) { moveplayers(); movback(mvl + 1); } else move(cturn == -1 ? 18 : 19, ncin + 39); ist = n = rsetbrd(); goto dochar; } if (n != -5) return(n); beep(); goto dochar; }
void tutor(void) { int i, j, k; int wrongans; wrongans = 0; i = 0; begscr = 18; cturn = -1; home = 0; bar = 25; inptr = &in[0]; inopp = &in[1]; offptr = &off[0]; offopp = &off[1]; Colorptr = &color[0]; colorptr = &color[2]; colen = 5; wrboard(); while (1) { if (!brdeq(test[i].brd, board)) { wrongans++; move(18, 0); if (wrongans >= 3) { wrongans = 0; text(*test[i].ans); memcpy(board,test[i].brd,26*sizeof(int)); /* and have to fix *inptr, *offptr; player is red (+ve) */ k = 0; for (j = 19; j < 26; j++) k += (board[j] > 0 ? board[j] : 0); *inopp = k; for (j = 0; j < 19; j++) k += (board[j] > 0 ? board[j] : 0); *offopp = k - 30; /* -15 at start */ moveplayers(); clrest(); } else { addstr(better); nexturn(); movback(mvlim); moveplayers(); clrest(); getyx(stdscr, j, k); if (j == 19) { proll(); addch('\t'); } else move(j > 19 ? j - 2 : j + 4, 25); getmove(); if (cturn == 0) leave(); continue; } } else wrongans = 0; move(18, 0); text(*test[i].com); move(19, 0); if (i == maxmoves) break; D0 = test[i].roll1; D1 = test[i].roll2; d0 = 0; mvlim = 0; for (j = 0; j < 4; j++) { if (test[i].mp[j] == test[i].mg[j]) break; p[j] = test[i].mp[j]; g[j] = test[i].mg[j]; mvlim++; } if (mvlim) for (j = 0; j < mvlim; j++) if (makmove(j)) addstr("AARGH!!!\n"); moveplayers(); nexturn(); D0 = test[i].new1; D1 = test[i].new2; d0 = 0; i++; mvlim = movallow(); if (mvlim) { clrest(); proll(); addch('\t'); getmove(); moveplayers(); if (cturn == 0) leave(); } } leave(); }