Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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();
}
Exemplo n.º 4
0
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);
}
Exemplo n.º 5
0
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;
}
Exemplo n.º 6
0
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();
}