Example #1
0
def execute_fourth_down(game):
    """
    Executes a fourth down play, returns game state via a specific execution
    """
    desperation_time = 160 + (game.offense.gameplan.o_aggression / 2)

    if ((game.offense.score < game.defense.score)
            and (game.time <= 900)
            and (game.time <= (desperation_time * ((game.defense.score - game.offense.score) / 8) + 1))):
        if ((game.offense.score) + 3 >= game.defense.score
                or game.time > (desperation_time (game.defense.score - game.offense.score - 3) / 9)):
            if game.yard_line <= game.offense.gameplan.fg_try:
                return execute_field_goal(game)
        return determine_play(game)
    else:
        to_go_mod = game.yard_line
        go_chance = ((100 - game.offense.gameplan.o_aggression)
                     + (4 * (game.yard_line - 40))
                     + (to_go_mod * (game.to_go - 1)))

        if game.yard_line <= game.offense.gameplan.fg_try:
            return execute_field_goal(game)
        elif (game.yard_line <= 55
              and random_in_range(-1, go_chance) <= 10
              and go_chance <= 500
              and game.to_go <= 6):
            return determine_play(game)
        else:
            return execute_punt(game)
Example #2
0
def run(game):
    """
    Primary entry point for game simulation
    """
    pdb.set_trace()
    if random_chance(50):
        game.offense = game.away
        game.defense = game.home
    else:
        game.offense = game.home
        game.defense = game.away

    game.kicking_team = game.defense

    while game.time > 0:
        if game.overtime is False:
            if game.last_time > 2700 and game.time <= 2700:
                game.quarter = 2
            if game.last_time > 1800 and game.time <= 1800:
                game.quarter = 3
                game.time = 1800

                if game.kicking_team != game.offense:
                    tmp = game.offense
                    game.offense = game.defense
                    game.defense = tmp

                #TODO implement second half kickoff
            if game.last_time > 900 and game.time <= 900:
                game.quarter = 4
        else:
            if game.offense.score != game.defense.score:
                game.time = 0

        if game.down < 4:
            game = determine_play(game)
        elif game.down == 4:
            game = execute_fourth_down(game)
        else:
            game = execute_turnover(game)

        if game.time <= 0:
            foo = False
            #TODO check overtime

    return game