From 9e2e6b4073feb31c0fa369dc1a4bd038361588d8 Mon Sep 17 00:00:00 2001 From: Krantz Date: Fri, 13 Jun 2025 18:41:33 +0200 Subject: [PATCH 1/2] more indent rules forbidding confusing object shorthand --- eslint.config.mjs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eslint.config.mjs b/eslint.config.mjs index 6c6726c..0941033 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -21,6 +21,8 @@ export default [ ...tseslint.configs.recommendedTypeChecked, { rules: { "semi": ["warn", "never"], + "indent": ["warn", 4], + "object-shorthand": ["error", "never"], "constructor-super": "error", "getter-return": "error", "no-const-assign": "error", From fbf2921c4677fce159964fa46effee4ee0aca847 Mon Sep 17 00:00:00 2001 From: Krantz Date: Fri, 13 Jun 2025 18:49:39 +0200 Subject: [PATCH 2/2] turn result --- src/game/bammi.ts | 36 ++++++++++++++++++++++++++++++------ src/index.ts | 17 ++++++++++++++--- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/src/game/bammi.ts b/src/game/bammi.ts index b1371ab..8e6675b 100644 --- a/src/game/bammi.ts +++ b/src/game/bammi.ts @@ -105,6 +105,16 @@ export class BammiBoardState { } } +type ExplosionTurnEvent = { + exploding_area: Area + adjacent_areas: Area[] +} + +type TurnResult = { + explosions: ExplosionTurnEvent[] + victory: boolean +} + export class BammiGame { public board_state: BammiBoardState private _turn_order: PlayerIndex[] @@ -120,21 +130,26 @@ export class BammiGame { return this._turn_order[this._turn_index] } - public submit_move(column: number, row: number, player: PlayerIndex): void { + public submit_move(column: number, row: number, player: PlayerIndex): TurnResult { + const return_value: TurnResult = { + explosions: [], + victory: false + } + if (this.board_state.get_win_state() !== undefined) { console.log("We already have a winner, you can't play any more") - return + return return_value } const area = this.board_state.get_area(column, row) if (!area) { console.error("Area at column", column, "and row", row, "has no area to be found!") - return + return return_value } if (area.owning_player !== 0 && area.owning_player !== player) { console.warn("Player", player, "cannot add to area at column", column, "and row", row) - return + return return_value } // Increment player pointer @@ -150,7 +165,13 @@ export class BammiGame { if (top_area.slice_count >= top_area.pie_size) { // Explosion top_area.slice_count = 0 - areas_to_add_to.push(...this.board_state.get_adjacent_areas(top_area)) + const adjacent_areas = this.board_state.get_adjacent_areas(top_area) + areas_to_add_to.push(...adjacent_areas) + + return_value.explosions.push({ + exploding_area: top_area, + adjacent_areas: adjacent_areas + }) } top_area.slice_count++ @@ -159,9 +180,12 @@ export class BammiGame { if (winner !== undefined) { console.log("We have a winner! Player with index", winner) - return + return_value.victory = true + return return_value } } + + return return_value } } diff --git a/src/index.ts b/src/index.ts index fe1fa44..9255f2a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -37,14 +37,14 @@ function main(): void { cells.length = 0 const current_player = get_player_info(bammi_game.get_active_player()) - console.log("current player", current_player) turn_indicator.classList.forEach((class_name) => { if (class_name.match('player-')) { turn_indicator.classList.replace(class_name, current_player.class) } }) - turn_indicator.innerText = `${current_player.flavour}'s turn` + + turn_indicator.innerText = `${current_player.color}'s turn.\nTurn all pies into ${current_player.flavour} pies!` const state = bammi_game.board_state @@ -68,7 +68,18 @@ function main(): void { } cell_element.onclick = (): void => { - bammi_game.submit_move(cell.column, cell.row, bammi_game.get_active_player()) + const active_player = bammi_game.get_active_player() + const result = bammi_game.submit_move(cell.column, cell.row, active_player) + + for (let index = 0; index < result.explosions.length; index++) { + const explosion = result.explosions[index] + console.log("Explosion at area", explosion.exploding_area, "spreading into", explosion.adjacent_areas.length, "adjacent areas") + } + + if (result.victory) { + console.log("Game over, the winner is", get_player_info(active_player).flavour) + } + update_board() } const top_adjacent = new Position(cell.column, cell.row - 1)