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)
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]
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)
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)
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()