コード例 #1
0
ファイル: check.c プロジェクト: lattera/openbsd
void
getmove()
{
	int     i, c;

	c = 0;
	for (;;) {
		i = checkmove(c);

		switch (i) {
		case -1:
			if (movokay(mvlim)) {
				move(20, 0);
				for (i = 0; i < mvlim; i++)
					if (h[i])
						wrhit(g[i]);
				nexturn();
				if (*offopp == 15)
					cturn *= -2;
				return;
			}
		case -4:
		case 0:
			refresh();
			if (i != 0 && i != -4)
				break;
			mvaddstr(20, 0, *Colorptr);
			if (i == -4)
				addstr(" must make ");
			else
				addstr(" can only make ");
			printw("%d move%s.\n", mvlim, mvlim > 1 ? "s":"");
			break;

		case -3:
			if (quit())
				return;
		}

		move(cturn == -1 ? 18 : 19, 39);
		clrtoeol();
		c = -1;
	}
}
コード例 #2
0
getmove ()  {
	register int	i, c;

	c = 0;
	for (;;)  {
		i = checkmove(c);

		switch (i)  {
		case -1:
			if (movokay(mvlim))  {
				if (tflag)
					curmove (20,0);
				else
					writec ('\n');
				for (i = 0; i < mvlim; i++)
					if (h[i])
						wrhit(g[i]);
				nexturn();
				if (*offopp == 15)
					cturn *= -2;
				if (tflag && pnum)
					bflag = pnum;
				return;
			}

		case -4:
		case 0:
			if (tflag)
				refresh();
			if (i != 0 && i != -4)
				break;
			if (tflag)
				curmove (20,0);
			else
				writec ('\n');
			writel (*Colorptr);
			if (i == -4)
				writel (" must make ");
			else
				writel (" can only make ");
			writec (mvlim+'0');
			writel (" move");
			if (mvlim > 1)
				writec ('s');
			writec ('.');
			writec ('\n');
			break;

		case -3:
			if (quit())
				return;
		}

		if (! tflag)
			proll ();
		else  {
			curmove (cturn == -1? 18: 19,39);
			cline ();
			c = -1;
		}
	}
}
コード例 #3
0
ファイル: table.c プロジェクト: radixo/openbsd-src
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;
}