Exemplo n.º 1
0
 def train(self, opponent=RandomAgent(), n_episodes=1000):
     board = TicTacToeBoard(self.size)
     for episode_nb in range(n_episodes):
         board.reset()
         while not board.is_end_state():
             self.train_one_step(board, opponent)
         if episode_nb % 100 == 0:
             self.eps *= self.eps_decay
             print(self.eps)
Exemplo n.º 2
0
def game_loop():
	pygame.init()
	screen = pygame.display.set_mode([720, 480])
	screen.fill((0,0,0))
	game_board = TicTacToeBoard(screen)

	cpu_player = -1
	toss = randint(1,2)  # Simulating biased coin flip
	if toss == 1:  # In this case, CPU starts
		cpu_state = TicTacToeState(game_board.state)
		cpu_player = 1
		state = cpu_state.monte_next_move(player=cpu_player)
		game_board.update_to_state(state.state_list)
	cpu_flag = 0
	done = False
	while not done:
		for event in pygame.event.get():
			if event.type == pygame.QUIT:
				done = True
				continue
			elif event.type == pygame.MOUSEBUTTONDOWN and not cpu_flag:
				mpos = pygame.mouse.get_pos()
				if game_board.update_board(mpos):
					cpu_flag = cpu_flag ^ 1

		game_board.draw(screen)
		pygame.display.flip()
		end = TicTacToeState(game_board.state)
		if end.is_end_game:
			done = True
			break

		if cpu_flag:
			cpu_state = TicTacToeState(game_board.state)
			state = cpu_state.monte_next_move(player=cpu_player)
			game_board.update_to_state(state.state_list)
			cpu_flag = cpu_flag ^ 1

		game_board.draw(screen)
		end = TicTacToeState(game_board.state)
		if end.is_end_game:
			done = True
			break

		pygame.display.flip()

	if end.winning_player == cpu_player:
		print('CPU wins')
	elif end.winning_player != 0:
		print ('You win!')
	else:
		print ('Tie')
Exemplo n.º 3
0
def test():
    """
    Little test function for debug
    """
    board = TicTacToeBoard()
    tree = BinaryTree(board)
    tree.create_tree()
    print(tree._root)
    print(tree._root.left)
    print(tree._root.left.left)
    print(tree._root.left.left.left)
    print(tree._root.left.left.left.left)
    print(tree._root.right)
Exemplo n.º 4
0
def play_against_agent(agent):
    board = TicTacToeBoard(size=agent.size)
    while True:
        board.reset()
        while not board.is_end_state():
            os.system('cls' if os.name == 'nt' else 'clear')
            print(board)
            x, y = [int(elt) for elt in input().split()]
            board.do_move(x, y)
            print(board)
            print(agent.get_possible_move_values(board))
            input("...")
            board.do_move(*agent.best_move(board))
Exemplo n.º 5
0
def start_game():
    """
    Main game loop
    Starts the game and leads to the end
    """
    board = TicTacToeBoard()
    answer = ""
    rich.print("[bold blue]Welcome to Tic Tac Toe game![/bold blue]", ":game_die:")

    while len(answer) < 1 or answer[0].lower() not in ["y", "n"]:
        answer = input("Do you want to play first [Y/N]? ")

    print(board)

    if answer[0].lower() == "y":

        # Enter the game loop which will exit once the
        # board is filled or someone has won
        # The player's turn is first
        while True:
            player_turn(board, "Player 1")
            print(board)
            if check_win(board, True):
                break

            rich.print("[bold magenta]Computer's turn:[/bold magenta]")
            computer_turn(board, "Player 2")
            print(board)
            if check_win(board, True):
                break
    else:

        # Enter the game loop which will exit once the
        # board is filled or someone has won
        # The player's turn is second
        while True:
            print("Computer's turn:")
            computer_turn(board, "Player 1")
            print(board)
            if check_win(board, False):
                break

            player_turn(board, "Player 2")
            print(board)
            if check_win(board, False):
                break
Exemplo n.º 6
0
def test_agent(agent, opponent, n_episodes=10000):
    from agents import RLAgent
    board = TicTacToeBoard(agent.size)
    n_wins = 0
    for _ in range(n_episodes):
        board.reset()
        counter = 0
        while not board.is_end_state():
            to_play = opponent if counter % 2 == 0 else agent
            if isinstance(to_play, RLAgent):
                board.do_move(*(to_play.eps_greedy(board)[1]))
            else:
                board.do_move(*to_play.best_move(board))
            counter += 1
        n_wins += board.has_won(agent.sym)
    print(f"{n_wins}/{n_episodes}")
    return n_wins / n_episodes
Exemplo n.º 7
0
 def __init__(self):
     self.board = TicTacToeBoard()
     self.feature_vector_size = 28
Exemplo n.º 8
0
 def reset(self):
     self.board = TicTacToeBoard()
Exemplo n.º 9
0
 def __init__(self):
     self._board = TicTacToeBoard()
     self._player = self.X
     self._running = True
     self._has_winner = False
     self._moves = []