forked from Hanabi/hanabi-league
generate game pages also for games with no endgame analysis
This commit is contained in:
parent
145142c4a9
commit
cf9a81979a
2 changed files with 33 additions and 24 deletions
|
@ -784,37 +784,39 @@ def convert_endgame_action(endgame_action: endgames.EndgameAction, game: hanabi.
|
|||
def get_endgame_page_data():
|
||||
cur = conn_manager.get_new_cursor()
|
||||
cur.execute(
|
||||
"SELECT game_id "
|
||||
"SELECT games.id, termination_reason "
|
||||
"FROM games "
|
||||
"LEFT OUTER JOIN endgames_analyzed "
|
||||
" ON endgames_analyzed.game_id = games.id "
|
||||
"WHERE termination_reason IS NOT NULL"
|
||||
)
|
||||
ret = {}
|
||||
for (game_id, ) in cur.fetchall():
|
||||
ret[game_id] = []
|
||||
instance, actions, _ = games_db_interface.load_game_parts(game_id)
|
||||
game = hanabi.hanab_game.GameState(instance)
|
||||
for (game_id, termination_reason) in cur.fetchall():
|
||||
if termination_reason is not None:
|
||||
ret[game_id] = []
|
||||
instance, actions, _ = games_db_interface.load_game_parts(game_id)
|
||||
game = hanabi.hanab_game.GameState(instance)
|
||||
|
||||
endgame_actions = endgames.load_endgame_actions(game_id)
|
||||
while len(endgame_actions) > 0:
|
||||
# Move to current turn and update game
|
||||
cur_turn = endgame_actions[0].turn
|
||||
# Note the -1 here since turns on hanab.live start to count at 1
|
||||
while len(game.actions) < cur_turn - 1:
|
||||
action, *actions = actions
|
||||
game.make_action(action)
|
||||
assert len(actions) > 0
|
||||
endgame_actions = endgames.load_endgame_actions(game_id)
|
||||
while len(endgame_actions) > 0:
|
||||
# Move to current turn and update game
|
||||
cur_turn = endgame_actions[0].turn
|
||||
# Note the -1 here since turns on hanab.live start to count at 1
|
||||
while len(game.actions) < cur_turn - 1:
|
||||
action, *actions = actions
|
||||
game.make_action(action)
|
||||
assert len(actions) > 0
|
||||
|
||||
actions_this_turn: List[endgames.EndgameAction] = []
|
||||
while len(endgame_actions) > 0 and endgame_actions[0].turn == cur_turn:
|
||||
action, *endgame_actions = endgame_actions
|
||||
actions_this_turn.append(action)
|
||||
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]
|
||||
ret[game_id].append(
|
||||
(cur_turn, best_action, other_actions)
|
||||
)
|
||||
actions_this_turn: List[endgames.EndgameAction] = []
|
||||
while len(endgame_actions) > 0 and endgame_actions[0].turn == cur_turn:
|
||||
action, *endgame_actions = endgame_actions
|
||||
actions_this_turn.append(action)
|
||||
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]
|
||||
ret[game_id].append(
|
||||
(cur_turn, best_action, other_actions)
|
||||
)
|
||||
else:
|
||||
ret[game_id] = None
|
||||
return ret
|
||||
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
<h4>
|
||||
Endgame Analysis table
|
||||
</h4>
|
||||
{% if data %}
|
||||
<table class="endgame-table">
|
||||
<tr>
|
||||
<th>Turn</th>
|
||||
|
@ -59,6 +60,12 @@
|
|||
{% endfor %}
|
||||
{% endfor %}
|
||||
</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>
|
||||
|
|
Loading…
Reference in a new issue