def run(self, move: BuyPrivateCompanyMove, kwargs: MutableGameState) -> bool: move.backfill(kwargs) if BidType.BUY == move.move_type: if self.validateBuy(move, kwargs): move.private_company.setBelongs(move.player) return True if BidType.BID == move.move_type: if self.validateBid(move, kwargs): move.private_company.bid(move.player, move.bid_amount) # From the perspective of costs going down, this counts as a pass. # Find the earliest unsold company and pass on it. earliest_unsold_private_companies = next(pc for pc in kwargs.private_companies if pc.order < move.private_company_order and not pc.hasOwner()) earliest_unsold_private_companies.passed(move.player) earliest_unsold_private_companies.reduce_price(kwargs.players) return True if BidType.PASS == move.move_type: if self.validatePass(move, kwargs): move.private_company.passed(move.player) move.private_company.reduce_price(kwargs.players) return True return False
def _pass_move(self): move_json = { "private_company_order": 1, # Doesn't really matter at this point. "move_type": "PASS", "player_id": "A", "bid_amount": 265 } move = Move.fromMessage(json.dumps(move_json)) return BuyPrivateCompanyMove.fromMove(move)
def _getMove(self): move_json = { "private_company_order": 0, "move_type": "BUY", "player_id": "A", "bid_amount": 0 } move = Move.fromMessage(json.dumps(move_json)) return BuyPrivateCompanyMove.fromMove(move)
def run(self, move: BuyPrivateCompanyMove, kwargs: MutableGameState) -> bool: move.backfill(kwargs) if BidType.BID == move.move_type: if self.validateBid(move): move.private_company.bid(move.player, move.bid_amount) self.validateSold(move) return True if BidType.PASS == move.move_type: if self.validatePass(move): move.private_company.passed(move.player) move.private_company.passed_by.append(move.player) self.validateSold(move) return True return False
def pass_on_bid(player_name, privatecompany_shortname, state:MutableGameState): company = next( company for company in state.private_companies if company.short_name == privatecompany_shortname ) player = next( player for player in state.players if player_name == player.name ) move_json = { "move_type": "PASS", "private_company_order": company.order, # Doesn't really matter at this point. "player_id": player.id, } move = Move.fromMessage(json.dumps(move_json)) return BuyPrivateCompanyMove.fromMove(move)
def testInitializeMove(self): move_json = { "private_company_order": 1, "move_type": "BUY", "player_id": "A", "bid_amount": 0 } move = Move.fromMessage(json.dumps(move_json)) private_company_purchase_move = BuyPrivateCompanyMove.fromMove(move) self.assertEqual(private_company_purchase_move.private_company_order, 1) self.assertEqual(private_company_purchase_move.move_type, BidType.BUY) self.assertEqual(private_company_purchase_move.player_id, "A") self.assertEqual(private_company_purchase_move.bid_amount, 0) self.assertIsNone(private_company_purchase_move.player) self.assertIsNone(private_company_purchase_move.private_company) game_context = MutableGameState() game_context.players = [fake_player("A"), fake_player("B")] game_context.private_companies = [ fake_private_company(0), fake_private_company(1) ] private_company_purchase_move.backfill(game_context) self.assertEqual(private_company_purchase_move.player, game_context.players[0]) self.assertEqual(private_company_purchase_move.private_company, game_context.private_companies[1]) duck_type_checking_player = fake_player("A") duck_type_checking_company = fake_private_company(1) self.assertEqual(private_company_purchase_move.player, duck_type_checking_player) self.assertEqual(private_company_purchase_move.private_company, duck_type_checking_company)