Example #1
0
def play(p1: Agent, p2: Agent) -> None:
    """Plays a game of ConnectFour between two agents."""
    board = ConnectBoard()
    turn = 0

    while board.winner() is None:
        print(board)

        if turn % 2 == 0:
            p1_board_state = board.current_state()
            move = p1.get_move(p1_board_state)
        else:
            # Invert state so P2 is 1 and P1 is -1
            p2_board_state = -board.current_state()

            # Invert move so we place a -1 on the game board
            move = -p2.get_move(p2_board_state)

        try:
            board.make_move(move)
            turn += 1
        except:
            if turn % 2 == 0:
                p1.handle_invalid_move()
            else:
                p2.handle_invalid_move()

    print(board)

    winner = board.winner()
    if winner:
        print("P{} wins!".format(winner))
    else:
        print("Tie!")
Example #2
0
    def play_game(player1: Agent, player2: Agent) -> int:
        """
        Agent1 plays first, agent2 plays second
        :param player1: an AI agent
        :param player2: an AI agent
        :returns: the winner; 1 = agent1, 2 = agent2, 0 = tie
        """
        data = GameData()
        board = data.game_board
        while True:
            col = player1.get_move(data)
            row = board.get_next_open_row(col)
            board.drop_piece(row, col, 1)
            if board.winning_move(1, row, col):
                return 1

            data.turn += 1
            data.turn = data.turn % 2

            col = player2.get_move(data)
            row = board.get_next_open_row(col)
            board.drop_piece(row, col, 2)

            if board.winning_move(2, row, col):
                return 2

            if board.tie_move():
                return 0
Example #3
0
    def play_game(player1: Agent, player2: Agent) -> int:
        """
        Agent1 plays first, agent2 plays second
        :param player1: an AI agent
        :param player2: an AI agent
        :returns: the winner; 1 = agent1, 2 = agent2, 0 = tie
        """
        data = GameData()
        board = data.game_board
        time_p1 = time_p2 = 0
        while True:
            start = time.process_time()
            col = player1.get_move(data)
            time_p1 += time.process_time() - start
            row = board.get_next_open_row(col)
            if not isinstance(row, int):
                #TODO - shouldn't happen
                print("------------ Shouldn't happen: row:",row,", col:", col)
                board.print_board()
                return 0
            data.last_move_row.append(row)
            data.last_move_col.append(col)
            board.drop_piece(row, col, 1)
            if board.winning_move(1, row, col):
                return 1, time_p1, time_p2

            data.turn += 1
            data.turn = data.turn % 2

            start = time.process_time()
            col = player2.get_move(data)
            time_p2 += time.process_time() - start
            row = board.get_next_open_row(col)
            data.last_move_row.append(row)
            data.last_move_col.append(col)
            board.drop_piece(row, col, 2)

            if board.winning_move(2, row, col):
                return 2, time_p1, time_p2

            if board.tie_move():
                return 0, time_p1, time_p2