generate game pages also for games with no endgame analysis

This commit is contained in:
Maximilian Keßler 2024-01-14 13:48:49 +01:00
parent 145142c4a9
commit cf9a81979a
Signed by: max
GPG key ID: BCC5A619923C0BA5
2 changed files with 33 additions and 24 deletions

View file

@ -784,37 +784,39 @@ def convert_endgame_action(endgame_action: endgames.EndgameAction, game: hanabi.
def get_endgame_page_data(): def get_endgame_page_data():
cur = conn_manager.get_new_cursor() cur = conn_manager.get_new_cursor()
cur.execute( cur.execute(
"SELECT game_id " "SELECT games.id, termination_reason "
"FROM games " "FROM games "
"LEFT OUTER JOIN endgames_analyzed " "LEFT OUTER JOIN endgames_analyzed "
" ON endgames_analyzed.game_id = games.id " " ON endgames_analyzed.game_id = games.id "
"WHERE termination_reason IS NOT NULL"
) )
ret = {} ret = {}
for (game_id, ) in cur.fetchall(): for (game_id, termination_reason) in cur.fetchall():
ret[game_id] = [] if termination_reason is not None:
instance, actions, _ = games_db_interface.load_game_parts(game_id) ret[game_id] = []
game = hanabi.hanab_game.GameState(instance) instance, actions, _ = games_db_interface.load_game_parts(game_id)
game = hanabi.hanab_game.GameState(instance)
endgame_actions = endgames.load_endgame_actions(game_id) endgame_actions = endgames.load_endgame_actions(game_id)
while len(endgame_actions) > 0: while len(endgame_actions) > 0:
# Move to current turn and update game # Move to current turn and update game
cur_turn = endgame_actions[0].turn cur_turn = endgame_actions[0].turn
# Note the -1 here since turns on hanab.live start to count at 1 # Note the -1 here since turns on hanab.live start to count at 1
while len(game.actions) < cur_turn - 1: while len(game.actions) < cur_turn - 1:
action, *actions = actions action, *actions = actions
game.make_action(action) game.make_action(action)
assert len(actions) > 0 assert len(actions) > 0
actions_this_turn: List[endgames.EndgameAction] = [] actions_this_turn: List[endgames.EndgameAction] = []
while len(endgame_actions) > 0 and endgame_actions[0].turn == cur_turn: while len(endgame_actions) > 0 and endgame_actions[0].turn == cur_turn:
action, *endgame_actions = endgame_actions action, *endgame_actions = endgame_actions
actions_this_turn.append(action) actions_this_turn.append(action)
actions_this_turn.sort(key=lambda a: -a.win_rate) actions_this_turn.sort(key=lambda a: -a.win_rate)
best_action, *other_actions = [convert_endgame_action(a, game, actions[0]) for a in actions_this_turn] best_action, *other_actions = [convert_endgame_action(a, game, actions[0]) for a in actions_this_turn]
ret[game_id].append( ret[game_id].append(
(cur_turn, best_action, other_actions) (cur_turn, best_action, other_actions)
) )
else:
ret[game_id] = None
return ret return ret

View file

@ -36,6 +36,7 @@
<h4> <h4>
Endgame Analysis table Endgame Analysis table
</h4> </h4>
{% if data %}
<table class="endgame-table"> <table class="endgame-table">
<tr> <tr>
<th>Turn</th> <th>Turn</th>
@ -59,6 +60,12 @@
{% endfor %} {% endfor %}
{% endfor %} {% endfor %}
</table> </table>
{% else %}
Currently, there is no endgame analysis available for this game. Since the computation is resource extensive,
this might take a while, also depending on how many other games have been played recently.
<br>
Come back later to check again.
{% endif %}
</div> </div>
</div> </div>
</div> </div>