-static void
-dosquares(void)
-{
- int i, j;
-
- mvaddstr(0, 20, "KNIGHT'S MOVE -- a logical solitaire");
-
- move(BOARDY, BOARDX);
- waddch(boardwin, ACS_ULCORNER);
- for (j = 0; j < 7; j++) {
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_TTEE);
- }
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_URCORNER);
-
- for (i = 1; i < BDEPTH; i++) {
- move(BOARDY + i * 2 - 1, BOARDX);
- waddch(boardwin, ACS_VLINE);
- for (j = 0; j < BWIDTH; j++) {
- waddch(boardwin, ' ');
- waddch(boardwin, ' ');
- waddch(boardwin, ' ');
- waddch(boardwin, ACS_VLINE);
- }
- move(BOARDY + i * 2, BOARDX);
- waddch(boardwin, ACS_LTEE);
- for (j = 0; j < BWIDTH - 1; j++) {
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_PLUS);
- }
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_RTEE);
- }
-
- move(BOARDY + i * 2 - 1, BOARDX);
- waddch(boardwin, ACS_VLINE);
- for (j = 0; j < BWIDTH; j++) {
- waddch(boardwin, ' ');
- waddch(boardwin, ' ');
- waddch(boardwin, ' ');
- waddch(boardwin, ACS_VLINE);
- }
-
- move(BOARDY + i * 2, BOARDX);
- waddch(boardwin, ACS_LLCORNER);
- for (j = 0; j < BWIDTH - 1; j++) {
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_BTEE);
- }
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_HLINE);
- waddch(boardwin, ACS_LRCORNER);
-}
-
-static void
-mark_possibles(int prow, int pcol, chtype mark)
-{
- if (chksqr(prow + 2, pcol + 1)) {
- cellmove(prow + 2, pcol + 1);
- waddch(boardwin, mark);
- };
- if (chksqr(prow + 2, pcol - 1)) {
- cellmove(prow + 2, pcol - 1);
- waddch(boardwin, mark);
- };
- if (chksqr(prow - 2, pcol + 1)) {
- cellmove(prow - 2, pcol + 1);
- waddch(boardwin, mark);
- };
- if (chksqr(prow - 2, pcol - 1)) {
- cellmove(prow - 2, pcol - 1);
- waddch(boardwin, mark);
- };
- if (chksqr(prow + 1, pcol + 2)) {
- cellmove(prow + 1, pcol + 2);
- waddch(boardwin, mark);
- };
- if (chksqr(prow + 1, pcol - 2)) {
- cellmove(prow + 1, pcol - 2);
- waddch(boardwin, mark);
- };
- if (chksqr(prow - 1, pcol + 2)) {
- cellmove(prow - 1, pcol + 2);
- waddch(boardwin, mark);
- };
- if (chksqr(prow - 1, pcol - 2)) {
- cellmove(prow - 1, pcol - 2);
- waddch(boardwin, mark);
- };
-}
-
-static void
-drawmove(char tchar, int oldy, int oldx, int row, int column)
-/* place the stars, update board & currents */
-{
- if (movecount <= 1) {
- int i, j;
-
- for (i = 0; i < BDEPTH; i++)
- for (j = 0; j < BWIDTH; j++) {
- cellmove(i, j);
- if (winch(boardwin) == minus)
- waddch(boardwin, movecount ? ' ' : minus);
- }
- } else {
- cellmove(oldy, oldx);
- waddch(boardwin, '\b');
- waddch(boardwin, tchar);
- waddch(boardwin, tchar);
- waddch(boardwin, tchar);
- mark_possibles(oldy, oldx, ' ');
- }
-
- if (row != -1 && column != -1) {
- cellmove(row, column);
- waddch(boardwin, '\b');
- waddch(boardwin, trail);
- waddch(boardwin, trail);
- waddch(boardwin, trail);
- mark_possibles(row, column, minus);
- board[row][column] = TRUE;
- }
-
- wprintw(msgwin, "\nMove %d", movecount);
-}
-
-static bool
-evalmove(int row, int column)
-/* evaluate move */
-{
- if (movecount == 1)
- return (TRUE);
- else if (board[row][column] == TRUE) {
- waddstr(msgwin, "\nYou've already been there.");
- return (FALSE);
- } else {
- int rdif = iabs(row - history[movecount - 1].y);
- int cdif = iabs(column - history[movecount - 1].x);
-
- if (!((rdif == 1) && (cdif == 2)) && !((rdif == 2) && (cdif == 1))) {
- waddstr(msgwin, "\nThat's not a legal knight's move.");
- return (FALSE);
- }
- }
-
- return (TRUE);
-}
-
-static bool
-chkmoves(void)
-/* check to see if valid moves are available */