예제 #1
0
파일: views.py 프로젝트: ojrac/Asphodel
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
            })
예제 #2
0
파일: views.py 프로젝트: ojrac/Asphodel
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,
            })