diff options
author | Tor Andersson <tor@ccxvii.net> | 2024-05-27 23:25:59 +0200 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2024-05-30 21:59:25 +0200 |
commit | 810e98edf8af847903f8ef4e0700da90b57546a3 (patch) | |
tree | 372cfed3424fde7544482cf988b5f37ba7353cfb | |
parent | f361c42df67f66e1f3817a232a2309c3c54853de (diff) | |
download | friedrich-810e98edf8af847903f8ef4e0700da90b57546a3.tar.gz |
log when shuffling in middle of draw
-rw-r--r-- | play.js | 11 | ||||
-rw-r--r-- | rules.js | 59 |
2 files changed, 49 insertions, 21 deletions
@@ -276,6 +276,16 @@ const ui = { markers_element: document.getElementById("markers"), clock_of_fate: document.getElementById("clock_of_fate"), power_panel_list: document.getElementById("power_panel_list"), + power_header: [ + document.getElementById("hand_prussia_header"), + document.getElementById("hand_hanover_header"), + document.getElementById("hand_russia_header"), + document.getElementById("hand_sweden_header"), + document.getElementById("hand_austria_header"), + document.getElementById("hand_imperial_header"), + document.getElementById("hand_france_header"), + document.getElementById("clock_of_fate_header"), + ], power_panel: [ document.getElementById("hand_prussia_panel"), document.getElementById("hand_hanover_panel"), @@ -779,6 +789,7 @@ function on_update() { ui.turns[i].classList.toggle("hide", (typeof view.fate === "object") || (i + 1 < view.fate)) for (let pow = 0; pow < 7; ++pow) { + ui.power_header[pow].textContent = power_name[pow] + " - " + view.pt[pow] + " troops" ui.power_panel[pow].classList.toggle("hide", has_removed_all_pieces(pow)) ui.hand[pow].replaceChildren() @@ -2,6 +2,7 @@ // TODO: prussian offensive (no capture when not offensive) // TODO: final score summary at game end (FWC rules) +// TODO: show running tally of troops/objectives const R_FREDERICK = "Frederick" const R_ELISABETH = "Elisabeth" @@ -999,28 +1000,33 @@ function next_tactics_deck() { shuffle_bigint(game.deck) } -function draw_next_tc() { - if (game.deck.length === 0) - next_tactics_deck() - if (game.deck.length === 0) - return -1 - return game.deck.pop() +function draw_tc(n) { + let draw = [] + + let k = 0 + while (n > 0) { + if (game.deck.length === 0) { + if (k > 0) + log("Drew " + k + " TC.") + k = 0 + next_tactics_deck() + if (game.deck.length === 0) { + log("The cards ran out!") + break + } + } + set_add(draw, game.deck.pop()) + ++k + --n + } + + return draw } function goto_tactical_cards() { let n = turn_power_draw() - game.draw = [] - for (let i = 0; i < n; ++i) { - let c = draw_next_tc() - if (c >= 0) - set_add(game.draw, c) - } - - if (game.draw.length < n) - log("Drew " + game.draw.length + " / " + n + " TC.") - else - log("Drew " + n + " TC.") + game.draw = draw_tc(turn_power_draw()) if (should_power_discard_tc() && game.draw.length > 0) game.state = "tactical_cards_discard" @@ -2880,8 +2886,7 @@ function goto_clock_of_fate() { if (game.scenario === 1 || game.scenario === 2) { log("Imaginary player drew 5 TC.") - for (let i = 0; i < 5; ++i) - draw_next_tc() + draw_tc(5) } // Check before drawing a fate card. @@ -3441,8 +3446,8 @@ states.france_may_discard_any_one_tc_for_a_new_one_from_the_draw_deck = { log("France discarded one TC.") log("France drew one TC.") set_delete(game.hand[P_FRANCE], c) - c = draw_next_tc() - if (c >= 0) + let draw = draw_tc(1) + for (let c of draw) set_add(game.hand[P_FRANCE], c) goto_start_turn() }, @@ -4047,6 +4052,17 @@ function mask_hand(player) { return view_hand } +function total_troops_list() { + let list = [] + for (let pow of all_powers) { + let n = 0 + for (let p of all_power_generals) + n += game.troops[p] + list[pow] = n + } + return list +} + exports.view = function (state, player) { game = state view = { @@ -4060,6 +4076,7 @@ exports.view = function (state, player) { conquest: game.conquest, troops: mask_troops(player), hand: mask_hand(player), + pt: total_troops_list(), power: game.power, retro: game.retro, |