def defend_commit(request, game_id, player_no, tile_count): g = Game.objects.get(id=int(game_id)) if not g.state.startswith("DEFEND"): return False board = StandardBoard(g, 1) build_board_data(board) p = g.__getattribute__("player_" + player_no) hand = Hand.objects.filter(player=p, turn_no=1, game=g).get() civ = g.state.split("|")[1] if not int(player_no) == g.waiting_for: return False if not hand.batch_remove(civ, tile_count): return False hand.save() defend_info = _get_defend_info(g, board) losing_kindom = None if len(defend_info["attack_board"]) + int(defend_info["attack_committed"]) > len(defend_info["defend_board"]) + int( tile_count ): losing_kingdom = _get_defender_kingdom(g, board) winner_no = _get_attacker(g, board) else: losing_kingdom = _get_attacker_kingdom(g, board) winner_no = player_no points = board.external_war_removal(losing_kingdom, civ) _give_points(game=g, player_no=winner_no, count=points, type=civ) build_board_data(board) unification_cell_no = board.find_unification_tile() more_war = external_war_tile(board, unification_cell_no) if more_war: g.state = "CHOOSE_COLOR" g.waiting_for = g.current_turn else: board[unification_cell_no].piece = _convert(board[unification_cell_no].special.piece) board[unification_cell_no].special = None build_board_data(board) treasure = board.treasure_to_claim() if treasure: g.waiting_for = treasure["player_no"] g.state = "TREASURE" else: g.state = "REGULAR" g.increment_action() g.save() board.save() update_browsers(game_id) return game_state_json(request, game_id, player_no)
def test_external_war_removal(self): board = StandardBoard(self.game) board.rows = 4 board.columns = 4 board._parse_state('t|G?|r1t|s|r2t|G|t|t|G|t|r2s|t|G|r2f|s|s') build_board_data(board) count = board.external_war_removal(1,'temple') self.assertEquals(count, 2) self.assertEquals(board._db_form(), 't|G?|G|s|r2t|G|t|G|G|t|r2s|t|G|r2f|s|s') board._parse_state('t|G?|r1t|s|r2t|G|t|t|G|t|r2s|t|G|r2f|s|s') build_board_data(board) count = board.external_war_removal(2,'temple') self.assertEquals(count, 2) self.assertEquals(board._db_form(), 'G|G?|r1t|s|G|G|t|t|G|t|r2s|t|G|r2f|s|s')