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():
|
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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue