def test_json_saving(self): self.maxDiff = 6000 deck1 = hearthbreaker.game_objects.Deck( [RagnarosTheFirelord() for i in range(0, 30)], CHARACTER_CLASS.MAGE) deck2 = hearthbreaker.game_objects.Deck( [StonetuskBoar() for i in range(0, 30)], CHARACTER_CLASS.DRUID) agent1 = PlayAndAttackAgent() agent2 = OneCardPlayingAgent() random.seed(4879) game = Game([deck1, deck2], [agent1, agent2]) replay = record(game) game.pre_game() for turn in range(0, 17): game.play_single_turn() output = StringIO() replay.write_json(output) inp = StringIO(output.getvalue()) new_replay = Replay() new_replay.read_json(inp) old_output = output.getvalue() other_output = StringIO() new_replay.write_json(other_output) self.assertEqual(other_output.getvalue(), old_output)
def test_random_character_saving(self): deck1 = hearthbreaker.engine.Deck( [RagnarosTheFirelord() for i in range(0, 30)], Jaina()) deck2 = hearthbreaker.engine.Deck( [StonetuskBoar() for i in range(0, 30)], Malfurion()) agent1 = PlayAndAttackAgent() agent2 = OneCardPlayingAgent() random.seed(4879) game = Game([deck1, deck2], [agent1, agent2]) replay = record(game) game.pre_game() for turn in range(0, 17): game.play_single_turn() output = StringIO() replay.write_json(output) random.seed(4879) new_game = playback(Replay(StringIO(output.getvalue()))) new_game.pre_game() for turn in range(0, 17): new_game.play_single_turn() self.assertEqual(2, len(new_game.current_player.minions)) self.assertEqual(30, new_game.other_player.hero.health) self.assertEqual(5, len(new_game.other_player.minions))
def test_deck_shortening(self): deck1 = Deck([RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), GoldshireFootman(), GoldshireFootman()], CHARACTER_CLASS.DRUID) deck2 = StackedDeck([StonetuskBoar()], CHARACTER_CLASS.HUNTER) game = Game([deck1, deck2], [RandomAgent(), RandomAgent()]) replay = record(game) game.start() replay.write(StringIO())
def test_recording_game(self): self.maxDiff = None random.seed(9876) deck1 = hearthbreaker.engine.Deck([StonetuskBoar() for i in range(0, 30)], CHARACTER_CLASS.MAGE) deck2 = hearthbreaker.engine.Deck([Naturalize() for i in range(0, 30)], CHARACTER_CLASS.DRUID) agent1 = PredictableAgent() agent2 = PredictableAgent() game = Game([deck1, deck2], [agent1, agent2]) replay = record(game) game.start() output = StringIO() replay.write_json(output) f = open("tests/replays/stonetusk_innervate.hsreplay", 'r') dif = self.__compare_json(output.getvalue(), f.read()) self.assertTrue(dif) f.close()
def test_recording_game(self): self.maxDiff = None random.seed(9876) deck1 = hearthbreaker.engine.Deck( [StonetuskBoar() for i in range(0, 30)], Jaina()) deck2 = hearthbreaker.engine.Deck([Naturalize() for i in range(0, 30)], Malfurion()) agent1 = PredictableAgent() agent2 = PredictableAgent() game = Game([deck1, deck2], [agent1, agent2]) replay = record(game) game.start() output = StringIO() replay.write_json(output) f = open("tests/replays/stonetusk_innervate.hsreplay", 'r') dif = self.__compare_json(output.getvalue(), f.read()) self.assertTrue(dif) f.close()
def test_recording_game(self): self.maxDiff = None random.seed(9876) deck1 = hearthbreaker.game_objects.Deck( [StonetuskBoar() for i in range(0, 30)], CHARACTER_CLASS.MAGE) deck2 = hearthbreaker.game_objects.Deck( [Naturalize() for i in range(0, 30)], CHARACTER_CLASS.DRUID) agent1 = PredictableAgent() agent2 = PredictableAgent() game = Game([deck1, deck2], [agent1, agent2]) replay = record(game) game.start() output = StringIO() replay.write_json(output) f = open("tests/replays/stonetusk_innervate.hsreplay", 'r') dif = self.__compare_json(output.getvalue(), f.read()) with open("bler.hsreplay", "w") as debug_file: replay.write_json(debug_file) self.assertTrue(dif) f.close()
def test_json_saving(self): self.maxDiff = 6000 deck1 = hearthbreaker.engine.Deck([RagnarosTheFirelord() for i in range(0, 30)], CHARACTER_CLASS.MAGE) deck2 = hearthbreaker.engine.Deck([StonetuskBoar() for i in range(0, 30)], CHARACTER_CLASS.DRUID) agent1 = PlayAndAttackAgent() agent2 = OneCardPlayingAgent() random.seed(4879) game = Game([deck1, deck2], [agent1, agent2]) replay = record(game) game.pre_game() for turn in range(0, 17): game.play_single_turn() output = StringIO() replay.write_json(output) inp = StringIO(output.getvalue()) new_replay = Replay() new_replay.read_json(inp) old_output = output.getvalue() other_output = StringIO() new_replay.write_json(other_output) self.assertEqual(other_output.getvalue(), old_output)
def test_deck_shortening(self): deck1 = Deck([ RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), RagnarosTheFirelord(), GoldshireFootman(), GoldshireFootman() ], Malfurion()) deck2 = StackedDeck([StonetuskBoar()], CHARACTER_CLASS.HUNTER) game = Game([deck1, deck2], [RandomAgent(), RandomAgent()]) replay = record(game) game.start() replay.write(StringIO())
def test_random_character_saving(self): deck1 = hearthbreaker.engine.Deck([RagnarosTheFirelord() for i in range(0, 30)], CHARACTER_CLASS.MAGE) deck2 = hearthbreaker.engine.Deck([StonetuskBoar() for i in range(0, 30)], CHARACTER_CLASS.DRUID) agent1 = PlayAndAttackAgent() agent2 = OneCardPlayingAgent() random.seed(4879) game = Game([deck1, deck2], [agent1, agent2]) replay = record(game) game.pre_game() for turn in range(0, 17): game.play_single_turn() output = StringIO() replay.write_json(output) random.seed(4879) new_game = playback(Replay(StringIO(output.getvalue()))) new_game.pre_game() for turn in range(0, 17): new_game.play_single_turn() self.assertEqual(2, len(new_game.current_player.minions)) self.assertEqual(30, new_game.other_player.hero.health) self.assertEqual(5, len(new_game.other_player.minions))
def test_recording_game(self): self.maxDiff = None # change random to a certain seed to reproduce the replay #random.seed(9876) random.seed() deck1name = "pat_face_hunter.hsdeck" deck2name = "pat_zoolock.hsdeck" # below decks work, will try hunter v zoolock above #deck1name = "pat_freeze_mage.hsdeck" #deck2name = "pat_midrange_druid.hsdeck" # testing custom decks # need to convert card names to the actual functions deck1 = self.load_deck(deck1name) deck2 = self.load_deck(deck2name) # below are what works #deck1 = hearthbreaker.engine.Deck([StonetuskBoar() for i in range(0, 30)], Jaina()) #deck2 = hearthbreaker.engine.Deck([Naturalize() for i in range(0, 30)], Malfurion()) # PredictableAgent() works, let's try TradeAgent() agent1 = TradeAgent() agent2 = TradeAgent() # agent1 = PredictableAgent() # agent2 = PredictableAgent() game = Game([deck1, deck2], [agent1, agent2]) replay = record(game) game.start() output = StringIO() replay.write_json(output) with open('pat_replay_2.hsreplay', mode='w') as f: print(output.getvalue(), file=f) # testing something 2021_3_15 # ast.literal_eval("{'muffin' : 'lolz', 'foo' : 'kitty'}") replay_json = ast.literal_eval(output.getvalue()) # { #"character": { # "minion": 2, # "player": "p1" # }, # "name": "attack", # "target": { # "player": "p2" # } #}, # { # "name": "end" # } #] #} # last move is always "name": "end" since that's last action taken # so get the move before last_move = replay_json['moves'][-2] # above works fine, need to filter based on results # will take a sample of 10 different replays print("the last move is {}".format(last_move)) # it depends on the last move, we need to check for different situations # first situation is a minion killing a player if last_move['character']: print(last_move['character']) # minion could be 0 if last_move['character']['minion'] is not None: if last_move['target']['player']: dead_player = str(last_move['target']['player']) print("player {} died".format(dead_player)) with open('pat_who_wins.txt', mode='a') as f: print(dead_player, file=f)