{
ttt_board_t board;
int m, i, newline;
- ttt_cell_t winner;
+ ttt_cell_t winner, move_result;
ttt_board_init (&board);
ttt_board_write (&board, stdout);
printf ("\n");
- printf ("Make a move ");
+ printf ("Make a move: ");
m = getchar();
+ if (m == EOF)
+ {
+ printf ("\nGoodbye.\n");
+ exit (1);
+ }
newline = getchar();
- m = m - '0';
- if (ttt_board_make_move (&board, m) == TTT_ERROR_NOT_VALID_MOVE)
+ m -= '0';
+ move_result = ttt_board_make_move (&board, m);
+ if (move_result == TTT_ERROR_NOT_GRID)
+ printf ("Sorry, %c is an invalid move.\n"
+ "Please enter a number between 0 & 8.", m + '0');
+
+ if (move_result == TTT_ERROR_NOT_VALID_MOVE)
continue;
+
winner = ttt_board_is_won (&board);
if (winner == TTT_CELL_X)
{
* 3|4|5
* 6|7|8
*
- * Returns: TTT_ERROR_NONE if a move is made succesfully. TTT_ERROR_NOT_VALID_MOVE
- * if a move is invalid (the given cell is not empty).
+ * Returns: TTT_ERROR_NONE if a move is made
+ * succesfully. TTT_ERROR_NOT_VALID_MOVE if a move is invalid (the
+ * given cell is not empty). TTT_ERROR_NOT_GRID if the move is
+ * impossible (user input 'a' or '9' etc.)
*/
ttt_error_t ttt_board_make_move (ttt_board_t *board, int move)
{
+ if (move < 0 || move > 8)
+ return TTT_ERROR_NOT_GRID;
+
if (board->cells[move] != TTT_CELL_EMPTY)
return TTT_ERROR_NOT_VALID_MOVE;
-
+
board->cells[move] = board->current_player;
if (board->current_player == TTT_CELL_X)