UNPKG

tmemory

Version:

A terminal-based Memory card game built with React Ink. Features multiple grid sizes, AI opponent, and high scores.

84 lines (83 loc) 1.87 kB
import { GameCard, GameMode, GameScores, GameState, GridDimension, Player, Winner } from "../../types/game.js"; export interface GameContextState { gameState: GameState; gameMode: GameMode; gridDimension: GridDimension; gridSelectionMode: 'preset' | 'custom'; currentPresetIndex: number; grid: GameCard[]; flippedIndices: number[]; matchedIndices: number[]; currentPlayer: Player; scores: GameScores; selectedIndex: number; message: string; startTime: number; endTime: number; winner: Winner; shouldTrackScore: boolean; isNewRecord: boolean; } export type GameAction = { type: 'SET_GAME_STATE'; payload: GameState; } | { type: 'SET_GAME_MODE'; payload: GameMode; } | { type: 'SET_GRID_DIMENSION'; payload: GridDimension; } | { type: 'SET_GRID_SELECTION_MODE'; payload: 'preset' | 'custom'; } | { type: 'SET_CURRENT_PRESET_INDEX'; payload: number; } | { type: 'SET_GRID'; payload: GameCard[]; } | { type: 'SET_FLIPPED_INDICES'; payload: number[]; } | { type: 'SET_MATCHED_INDICES'; payload: number[]; } | { type: 'SET_CURRENT_PLAYER'; payload: Player; } | { type: 'SET_SCORES'; payload: GameScores; } | { type: 'SET_SELECTED_INDEX'; payload: number; } | { type: 'SET_MESSAGE'; payload: string; } | { type: 'SET_START_TIME'; payload: number; } | { type: 'SET_END_TIME'; payload: number; } | { type: 'START_NEW_GAME'; } | { type: 'FLIP_CARD'; payload: number; } | { type: 'SWITCH_PLAYER'; } | { type: 'SET_WINNER'; payload: Winner; } | { type: 'SET_SHOULD_TRACK_SCORE'; payload: boolean; } | { type: 'SET_IS_NEW_RECORD'; payload: boolean; }; export interface GameContextValue { state: GameContextState; dispatch: React.Dispatch<GameAction>; }