Ejemplo n.º 1
0
def fight():
    form = DeckForm()

    if form.validate_on_submit():
        angel_deck = tuple(
            map(int,
                form.angel_deck.data.replace(' ', '').split(',')))
        demon_deck = tuple(
            map(int,
                form.demon_deck.data.replace(' ', '').split(',')))

        card_set = import_card_set_from_file("test_set.scg")
        game = Game(card_set, (angel_deck, demon_deck))

        angel = 0
        demon = 0
        tests = 100
        for i in range(tests):
            result = tuple(game.play())
            angel += result[0]
            demon += result[1]

        response = "<p>Angel winrate: " + str(100 * angel / tests) + "%</p>"
        response += "<p>Demon winrate: " + str(100 * demon / tests) + "%</p>"
        response += "<p>Draw rate: " + str(100 *
                                           (1 -
                                            (angel + demon) / tests)) + "%</p>"
        return response

    return render_template("index.html", form=form)
Ejemplo n.º 2
0
def selection(population, rounds=10):
    for deck in population:
        deck.reset()

    for i, deck_1 in enumerate(population):
        for j, deck_2 in enumerate(population):
            if i > j:
                game = Game(card_set, (deck_1.deck, deck_2.deck))
                for k in range(rounds):
                    result = tuple(game.play())
                    if result[0] == 1:
                        deck_1.won += 1
                        deck_2.lost += 1
                    elif result[1] == 1:
                        deck_1.lost += 1
                        deck_2.won += 1
                    else:
                        deck_1.draw += 1
                        deck_2.draw += 1
            else:
                break

    population.sort(key=methodcaller('winrate'), reverse=True)
    # print(population[0].deck, population[0].winrate(), sep='\t')
    # print(calculate_card_ii(population, card_set))
    return population[:len(population) // 2]
Ejemplo n.º 3
0
def multiplayer(game: Game):
    # show game state at the start of the game
    print(game.__dict__)
    while game.state == State.CONTINUE:
        # print board
        for row in game.board:
            print(row)

        # Display player's turn, pieces left... and input move
        if game.player_turn == Player.ODD:
            player = '[odd]'
            pieces_left = [ piece for piece in game.odd_pieces.values() if piece ]
        else:
            player = '[even]'
            pieces_left = [ piece for piece in game.even_pieces.values() if piece ]

        piece = int(input(player +  " select piece to play: (options: " + str(pieces_left) + ") "))
        row = int(input(player +  " select row to place piece: "))
        column = int(input(player +  " select column to place piece: "))
        print(game.play(piece, row, column))

    # show end of game message and final board configuration
    if game.state == State.EVEN_WIN:
        print('even player won:')
    elif game.state == State.ODD_WIN:
        print('odd player won:')
    else:
        print('draw:')

    for row in game.board:
            print(row)
Ejemplo n.º 4
0
def singleplayer(game: Game):
    if input("enter e to play as even, o to play as odd: ") == 'e':
        user = Player.EVEN
        agent = Agent(Player.ODD)
    else:
        user = Player.ODD
        agent = Agent(Player.EVEN)


    # show game state at the start of the game
    game_info = game.__dict__
    print(game_info)
    while game.state == State.CONTINUE:
        # print board
        print()
        print('board:')
        for row in game.board:
            print(row)
        print()
        

        if game.player_turn == user: # get user input
            # Display player's turn, pieces left... and input move
            if user == Player.ODD:
                player = '[odd]'
                pieces_left = [ piece for piece in game.odd_pieces.values() if piece ]
            else:
                player = '[even]'
                pieces_left = [ piece for piece in game.even_pieces.values() if piece ]

            piece = int(input(player +  " select piece to play: (options: " + str(pieces_left) + ") "))
            row = int(input(player +  " select row to place piece: "))
            column = int(input(player +  " select column to place piece: "))

        else: # get agent input
            move = agent.get_move(game)
            piece = move['piece']
            row = move['row']
            column = move['col']

        game_info = game.play(piece, row, column)
        print()
        print('game engine object information:')
        print(game_info)
        print()


    # show end of game message and final board configuration
    if game.state == State.EVEN_WIN:
        print('even player won:')
    elif game.state == State.ODD_WIN:
        print('odd player won:')
    else:
        print('draw:')

    for row in game.board:
            print(row)
Ejemplo n.º 5
0
from game_engine import Game
from set_reader import import_card_set_from_file

decks = ([3, 4, 4, 3, 3, 4, 4, 4, 4, 5, 4, 3, 3, 3, 4, 3, 3, 6, 3,
          4], [6, 5, 6, 6, 6, 6, 4, 5, 5, 6, 6, 6, 6, 4, 6, 6, 6, 5, 5, 4],
         [2, 2, 2, 2, 2, 1, 1, 1, 5, 1, 1, 1, 1, 4, 2, 4, 5, 4, 1,
          1], [2, 6, 6, 6, 2, 3, 4, 5, 6, 6, 5, 6, 2, 6, 3, 1, 6, 3, 3, 3],
         [2, 5, 7, 2, 2, 7, 7, 7, 7, 7, 2, 2, 2, 3, 2, 2, 7, 7, 2,
          7], [2, 2, 2, 5, 2, 2, 7, 2, 7, 7, 7, 7, 7, 2, 2, 7, 2, 1, 7, 7],
         [6, 1, 6, 2, 2, 2, 1, 2, 1, 3, 2, 3, 5, 1, 4, 2, 1, 4, 1,
          3], [5, 1, 5, 5, 1, 4, 1, 1, 5, 1, 13, 6, 7, 2, 2, 5, 13, 4, 13, 3],
         [2, 5, 9, 1, 5, 2, 1, 5, 1, 1, 14, 2, 13, 14, 1, 1, 1, 7, 14,
          13], [1, 1, 1, 13, 3, 3, 1, 13, 1, 1, 1, 1, 1, 14, 2, 2, 1, 3, 4, 9])

if __name__ == "__main__":
    card_set = import_card_set_from_file("test_set.scg")
    game = Game(card_set, (decks[-2], decks[-1]))
    game.play()