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!")
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
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