chore: initial commit

This commit is contained in:
Giancarmine Salucci
2026-03-31 18:38:34 +02:00
commit 3d1f3e5eb4
79 changed files with 6659 additions and 0 deletions

69
src/game/types.ts Normal file
View File

@@ -0,0 +1,69 @@
export type Suit = 'bastoni' | 'coppe' | 'denara' | 'spade';
export const SUITS: Suit[] = ['bastoni', 'coppe', 'denara', 'spade'];
export interface Card {
suit: Suit;
value: number; // 1-10
id: string; // e.g. "denara_7"
}
export interface Capture {
played: Card;
captured: Card[];
}
export type PlayerIndex = 0 | 1 | 2 | 3;
export interface Player {
index: PlayerIndex;
hand: Card[];
pile: Card[]; // captured cards
scope: number; // number of scope achieved
isHuman: boolean;
name: string;
}
export interface GameState {
players: [Player, Player, Player, Player];
table: Card[];
currentPlayer: PlayerIndex;
roundOver: boolean;
gameOver: boolean;
teamScores: [TeamScore, TeamScore]; // Team 0: players 0+2, Team 1: players 1+3
lastCapturTeam: 0 | 1 | null; // which team made the last capture (gets remaining table cards)
roundNumber: number;
}
export interface TeamScore {
cards: number;
scope: number;
denari: number;
settebello: boolean;
primiera: number;
// final points for this round
roundPoints: number;
totalPoints: number;
}
export interface ScoreBreakdown {
cartePoint: 0 | 1 | null; // null = tie
denariPoint: 0 | 1 | null;
settebelloPoint: 0 | 1;
primieraPoint: 0 | 1 | null;
scopeTeam0: number;
scopeTeam1: number;
}
// Primiera values per card value
export const PRIMIERA_VALUES: Record<number, number> = {
7: 21,
6: 18,
1: 16,
5: 15,
4: 14,
3: 13,
2: 12,
8: 10,
9: 10,
10: 10,
};