def _start_new_game(self, event=None): self._stop_engine() self._engine = EngineWrapper(self._get_engine_path()) self.SetTitle('Durak GUI (vs %s)' % self._get_engine_path()) new_game_data = self._controller.start_new_game( ignore_winner=not self._by_winner_menu_item.IsChecked()) self._trump = new_game_data['trump'] self._deck.set_card_count(self._controller.deck_count) self._deck.set_opened_trump(self._trump) self._engine.init(self._trump) self._engine.deal(new_game_data['player2_cards'], self._controller.get_game_data_for(self.ENGINE)) self._top_player_sizer.set_count(len(new_game_data['player2_cards'])) self._table.remove_all() self._bottom_player_sizer.remove_all() self._bottom_player_sizer.trump = self._trump for card in new_game_data['player1_cards']: self._bottom_player_sizer.add_card(card) self._bottom_player_sizer.Layout() self._set_enabled_cards_and_controls() self._panel.Layout() self.Layout() self.Refresh() if self._controller.to_move == self.ENGINE: self._engine_move()
def test_popen_arguments(self): _ = EngineWrapper('path_to_engine') self.subprocess_mock.Popen.assert_called_with( 'path_to_engine', stdin=self.subprocess_mock.PIPE, stdout=self.subprocess_mock.PIPE )
def setUp(self): self._subprocess_patcher = patch('durak.engine.wrapper.subprocess') self.subprocess_mock = self._subprocess_patcher.start() self.process = self.subprocess_mock.Popen.return_value self.process.stdout.readline.return_value = 'ok' self.wrapper = EngineWrapper('path_to_engine')
def _play_game(engine1_path, engine2_path, log_filename=''): engine1 = EngineWrapper(engine1_path) engine2 = EngineWrapper(engine2_path) controller = GameController( player1_name=engine1_path, player2_name=engine2_path, log_filename=log_filename, ) new_game_data = controller.start_new_game() engine1.init(new_game_data['trump']) engine2.init(new_game_data['trump']) engine1.deal(new_game_data['player1_cards'], controller.get_game_data_for(controller.PLAYER1)) engine2.deal(new_game_data['player2_cards'], controller.get_game_data_for(controller.PLAYER2)) while True: if controller.state == controller.States.MOVING: if controller.is_player1_to_move(): engine_to_move = engine1 else: engine_to_move = engine2 card = engine_to_move.move( controller.on_table, controller.get_game_data_for(controller.MOVER)) controller.register_move(card) elif controller.state == controller.States.RESPONDING: if controller.is_player1_to_move(): engine_to_respond = engine2 else: engine_to_respond = engine1 card = engine_to_respond.respond( controller.on_table, controller.get_game_data_for(controller.RESPONDER)) controller.register_response(card) elif controller.state == controller.States.GIVING_MORE: if controller.is_player1_to_move(): engine_to_give_more = engine1 else: engine_to_give_more = engine2 cards = engine_to_give_more.give_more( controller.on_table, controller.get_game_data_for(controller.MOVER)) controller.register_give_more(cards) elif controller.state == controller.States.DEALING: deal_data = controller.deal() engine1.deal(deal_data['player1_cards'], controller.get_game_data_for(controller.PLAYER1)) engine2.deal(deal_data['player2_cards'], controller.get_game_data_for(controller.PLAYER2)) if controller.is_game_over(): break engine1.game_end() engine2.game_end() if controller.winner == controller.PLAYER1: return ENGINE1 elif controller.winner == controller.PLAYER2: return ENGINE2 else: return DRAW