def done_turn(request, game_id): """The player is done with their turn. Build up anything queued and waiting, run all battles, mark the turn as over in the db, and return a dict of data about the results of those queued up events (e.g. battle outcomes). The keys in the returned dict game_state and battles. """ ships_to_build = Ship.objects.filter(game=request.game, owner=request.player, on_build_queue=True) for s in ships_to_build: s.on_build_queue = False s.save() battle_results = battles.run_battles(request.player) for tech_name in ['attack_tech', 'range_tech']: q_tech = 'queued_%s' % tech_name investment = getattr(request.player, q_tech) current = getattr(request.player, tech_name) new_value = current + tech.invest(investment) setattr(request.player, tech_name, new_value) setattr(request.player, q_tech, 0) map_changed = False deploying_ships = request.player.ship_set.filter(on_deploy_queue=True) for ship in deploying_ships: ship.system.owner = request.player ship.system.save() ship.delete() map_changed = True num_players = len(request.game.player_set.all()) next_turn_idx = (request.player.turn_index + 1) % num_players next_player = Player.objects.get(game=request.game, turn_index=next_turn_idx) utils.end_turn(request.player) utils.start_turn(next_player) request.game.current_turn = next_player request.game.turn_phase = min(game_constants.PHASES.keys()) _game_state_changed(request.game, False) _map_changed(request.game, player_not_to_save=request.player) request.player.save() request.game.save() return _json({ 'game_state': _game_state(request.game, request.player), 'battles':battle_results })
def combat(request, game_id): """ Run all combat for a player -- all ships that are on systems with opponents ships will have battles. Primarily for testing -- in real play, the combat is triggered as part of done_turn below. Returns a json object describing all battles + the post-combat game state. See battles.py for the format of the battle description. """ err = _check_phase(request.game, game_constants.MOVE_PHASE) if err: return err battle_results = battles.run_battles(request.player) _game_state_changed(request.game) return _json({ 'game_state': _game_state(request.game, request.player), 'battles': battle_results, })