Botpot
Visit our website
  • Fundamentals
    • Botpot overview
    • Get action
      • Get action: game state
      • Get action: API object
      • Get action: action object
    • Specialized game concepts
      • Get action: ref data
      • Game settings
    • Botpot architecture
  • Games
    • Creating your first bot
    • Understanding game logic
    • Explore game documentations
      • Tic-Tac-Toe
      • Quoridor
      • Connect Four
      • Battleship
      • Virus War
      • Dots and Boxes
      • Hex
      • Reversi
      • Gomoku
      • Mancala
      • Uno
      • Big 2
      • Snake & Tetris
      • Checker
      • Generals
      • Blokus
      • Wordle
      • Chinese Checker
Powered by GitBook
On this page
  • Game logic
  • Game state schema
  • Action schema

Was this helpful?

  1. Games
  2. Explore game documentations

Tic-Tac-Toe

Game logic

Game Logic code
def init_game(game_settings):
    state = {
        "player_turn_idx": 0,
        "board": [-1, -1, -1, -1, -1, -1, -1, -1, -1]
        }
    return state

def place_piece(state, index):
    if index < 0 or index > 8:
        raise InvalidActionError("Index out of bound")
    if state["board"][index] != -1:
        raise InvalidActionError("Someone already placed a piece here")
    state["board"][index] = state["player_turn_idx"]
    state["player_turn_idx"] = (state["player_turn_idx"] + 1) % 2

    return state

def get_game_result(state):
    if __has_line(state, 0):
        return {
            "game_result": "Winner",
            "winner_idx": 0
        }
    if __has_line(state, 1):
        return {
            "game_result": "Winner",
            "winner_idx": 1
        }
    for value in state["board"]:
        if value == -1:
            return {
                "game_result": "NoWinnerYet"
            }
    return {
        "game_result": "Draw"
    }

def __has_line(state, value):
    for i in range(0, 3):
        if state["board"][i*3] == value and state["board"][i*3 + 1] == value and state["board"][i*3 + 2] == value:
            return True
        if state["board"][i] == value and state["board"][i + 3] == value and state["board"][i + 6] == value:
            return True
    if state["board"][0] == value and state["board"][4] == value and state["board"][8] == value:
        return True
    if state["board"][2] == value and state["board"][4] == value and state["board"][6] == value:
        return True
    return False

Game state schema

message State {
  // Required field to indicate the player who should be making the next move
  // Values = 0 or 1
  int32 player_turn_idx = 1;

  /*
  Array of size 9 initialized to -1, representing an empty 3 by 3 board.
  The values of board can be -1, 0, or 1. 
  Placing a piece in index x will set the value of board[x] to the player's index.
  Array is row major order: index 0 is top left, index 2 is top right, index 6 is 
  bottom left, and index 8 is bottom right.
  */
  repeated int32 board = 2;
}

Action schema

place_piece(int index)

Last updated 1 year ago

Was this helpful?

Start building now