Prevented random memory corruption and other cleanup
authorKevin Worth <kevin@theworths.org>
Fri, 16 Dec 2005 01:27:15 +0000 (01:27 +0000)
committerKevin Worth <kevin@theworths.org>
Fri, 16 Dec 2005 01:27:15 +0000 (01:27 +0000)
src/test-board.c
src/ttt-board.c

index 89af8719bd53772147cf8becc4c343a5872a44ee..e07e28dd89703821572de93eba4ea730a77fd1f2 100644 (file)
@@ -7,7 +7,7 @@ main (void)
 {
     ttt_board_t board;
     int m, i, newline;
-    ttt_cell_t winner;
+    ttt_cell_t winner, move_result;
     
     ttt_board_init (&board);
     
@@ -16,12 +16,23 @@ main (void)
        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)
        {
index 273702185d8695ab312ef68275fcd4fecdcd3d1f..d231ea943ad52d4ddb252c1debe773ea4e79b40a 100644 (file)
@@ -94,15 +94,20 @@ ttt_board_write (ttt_board_t *board, FILE *file)
  *  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)