Tic Tac Toe
Level: BeginnerConcepts: State Design
Create a program to implement the classic game of Tic Tac Toe.
Requirements
- Implement game rules:
- 3x3 grid game board
- Two players (X and O)
- Players take turns placing their mark
- First player to get 3 in a row (horizontally, vertically, or diagonally) wins
- Game ends in a draw if all spaces are filled with no winner
- Handle game state:
- Track current player's turn
- Validate moves (prevent playing in occupied spaces)
- Detect win conditions
- Detect draw conditions
- Return appropriate results:
- Current game state
- Winner (if any)
- Error messages for invalid moves
Test Cases
Scenario | Moves | Expected Result | Notes |
---|---|---|---|
Empty Board | None | Game in progress | Initial state |
Horizontal Win | X(0,0), O(1,0), X(0,1), O(1,1), X(0,2) | X wins | Top row win |
Vertical Win | X(0,0), O(0,1), X(1,0), O(1,1), X(2,0) | X wins | Left column win |
Diagonal Win | X(0,0), O(0,1), X(1,1), O(0,2), X(2,2) | X wins | Top-left to bottom-right |
Draw | X(0,0), O(0,1), X(0,2), O(1,0), X(1,1), O(2,0), X(1,2), O(2,2), X(2,1) | Draw | No winner |
Invalid Move | X(0,0), X(0,1) | Error | Same player twice |
Edge Cases to Consider
- Playing in an occupied space
- Playing out of turn
- Playing outside the board boundaries
- Continuing play after game end
- Multiple win conditions
Tips
- Start with an empty board representation
- Add move validation next
- Then implement win detection
- Finally add game state management
- Consider using enums for player marks and game states