From 5d685d0eb020c2aa5d5f97786899b5d1edfd66cb Mon Sep 17 00:00:00 2001 From: Moritz Ruth Date: Thu, 18 May 2023 17:53:37 +0200 Subject: [PATCH] Prepare a new card and randomize the first player --- src/icons.ts | 6 ++++-- src/server/game.ts | 1 + src/shared/game/actions.ts | 1 + src/shared/game/cards.ts | 6 ++++++ src/shared/game/state.ts | 2 +- 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/icons.ts b/src/icons.ts index 9990bef..230a35c 100644 --- a/src/icons.ts +++ b/src/icons.ts @@ -5,7 +5,8 @@ import PlusCircleIcon from "virtual:icons/ph/plus-circle" import MinusCircleIcon from "virtual:icons/ph/minus-circle" import EyeSlashIcon from "virtual:icons/ph/eye-slash-bold" import FlagIcon from "virtual:icons/ph/flag-bold" -import CaretCircleDoubleRightIcon from "virtual:icons/ph/caret-circle-double-right-bold" +import CircleHalfFillIcon from "virtual:icons/ph/circle-half-fill" +import FastForwardIcon from "virtual:icons/ph/fast-forward-bold" import NumberCircleOneIcon from "virtual:icons/ph/number-circle-one" import NumberCircleTwoIcon from "virtual:icons/ph/number-circle-two" import NumberCircleThreeIcon from "virtual:icons/ph/number-circle-three" @@ -23,7 +24,8 @@ export const specialCardIcons: Record = { "decrease-target-by-2": MinusCircleIcon, "next-round-covert": EyeSlashIcon, "force-hit": FlagIcon, - "double-draw": CaretCircleDoubleRightIcon + "double-draw": CircleHalfFillIcon, + "end-game": FastForwardIcon } export const numberCircleIcons = { diff --git a/src/server/game.ts b/src/server/game.ts index b86a984..e85d359 100644 --- a/src/server/game.ts +++ b/src/server/game.ts @@ -124,6 +124,7 @@ export class Game extends EventEmitter { this.addAction({ type: "start", targetSum: 21, + startingPlayerId: players[Math.floor(Math.random() * players.length)].id, players }) diff --git a/src/shared/game/actions.ts b/src/shared/game/actions.ts index a441de5..8745337 100644 --- a/src/shared/game/actions.ts +++ b/src/shared/game/actions.ts @@ -28,6 +28,7 @@ type ServerAction = { | { type: "start" targetSum: number + startingPlayerId: string } | { type: "deal-number" diff --git a/src/shared/game/cards.ts b/src/shared/game/cards.ts index f007fa7..68b8f20 100644 --- a/src/shared/game/cards.ts +++ b/src/shared/game/cards.ts @@ -6,6 +6,7 @@ interface SpecialCardMeta { export type SpecialCardId = | "return-last-opponent" | "return-last-own" | "increase-target-by-2" | "decrease-target-by-2" | "next-round-covert" | "double-draw" | "force-hit" + | "end-game" export const specialCardsMeta: Record = { "return-last-opponent": { @@ -42,6 +43,11 @@ export const specialCardsMeta: Record = { type: "permanent", description: "Your opponent is not allowed to stay", weight: 3 + }, + "end-game": { + type: "permanent", + description: "The game ends after everyone had another turn.", + weight: 1000 } } diff --git a/src/shared/game/state.ts b/src/shared/game/state.ts index fcc7b4c..3ba7ec9 100644 --- a/src/shared/game/state.ts +++ b/src/shared/game/state.ts @@ -78,7 +78,7 @@ export const produceNewState = (oldState: GameState, action: GameAction) => prod case "start": state.phase = "running" - state.activePlayerId = state.players[0].id + state.activePlayerId = action.startingPlayerId state.targetSum = action.targetSum state.activeSpecialCards = [] state.numberCardsStack = getFullNumbersCardStack()