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)
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