Exemplo n.º 1
0
def main():
    net = Net()
    net.load_state_dict(torch.load(PATH))

    g = Game()
    red = True
    moves = 0

    while not g.won():
        board = g.to_tensor(red)

        prediction = request_move(net, board, chance=1 if red else 0.0)
        max_value = torch.max(prediction)
        move = np.zeros((1, 7))

        for i, element in enumerate(prediction):
            if element == max_value:
                move[:, i] = 1
                prediction[i] = 0.

        column = move.tolist()[0].index(1.)

        for iter in range(7):
            try:
                g.insert(column, RED if red else YELLOW)
                moves += 1
                break
            except Exception as e:
                column = (column + 1) % 7
        else:
            return False, moves

        if g.won():
            g.print_board()
            return red, moves

        # switch turn
        if red:
            red = False
        else:
            red = True
Exemplo n.º 2
0
def play(games, win, ai):
    player1_wins = 0
    player2_wins = 0
    ties = 0
    last_winner = -1
    num_games = 1

    while player1_wins < win and player2_wins < win and num_games <= games:
        g = Game(7, 6, 4)
        turns_played = 0
        if last_winner == -1:
            turn = random.randint(1, 2)
        else:
            turn = last_winner  # winner gets to go first

        while g.get_winner() is None and turns_played < g.rows * g.cols - 1:
            if turn == YELLOW:
                next_move = minimax_decision(g, YELLOW, ai)
                g.insert(next_move, turn)
            else:
                g.print_board()
                next_move = input(
                    '{}\'s turn: '.format('Red' if turn == RED else 'Yellow'))
                g.insert(int(next_move), turn)

            # time.sleep(0.1)
            turns_played += 1
            # g.print_board()
            turn = YELLOW if turn == RED else RED

        num_games += 1
        winner = g.get_winner()
        if winner == 1:
            player1_wins += 1
        elif winner == 2:
            player2_wins += 1
        else:
            ties += 1

    return [player1_wins, player2_wins, ties]
Exemplo n.º 3
0
def play(games, win, ai):
    player1_wins = 0
    player2_wins = 0
    ties = 0
    last_winner = -1
    num_games = 1

    while player1_wins < win and player2_wins < win and num_games <= games:
        g = Game(7, 6, 4)
        turns_played = 0
        if last_winner == -1:
            turn = random.randint(1,2)
        else:
            turn = last_winner # winner gets to go first

        while g.get_winner() is None and turns_played < g.rows * g.cols - 1:
            if turn == YELLOW:
                next_move = minimax_decision(g,YELLOW,ai)
                g.insert(next_move, turn)
            else:
                g.print_board()
                next_move = input('{}\'s turn: '.format('Red' if turn == RED else 'Yellow'))
                g.insert(int(next_move), turn)

            # time.sleep(0.1)
            turns_played += 1
            # g.print_board()
            turn = YELLOW if turn == RED else RED

        num_games += 1
        winner = g.get_winner()
        if winner == 1:
            player1_wins += 1
        elif winner == 2:
            player2_wins += 1
        else:
            ties += 1

    return [player1_wins, player2_wins, ties]