From acae1d7bad20f579b428f7ce4c50f1b12d360d1d Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Tue, 10 Dec 2024 12:48:39 +0000 Subject: [PATCH] chore: store -> stats --- src/core/engine.ts | 36 +++++++++++++++++++----------------- src/core/game.ts | 6 +++--- src/english/engine.ts | 38 ++++++++++++-------------------------- 3 files changed, 34 insertions(+), 46 deletions(-) diff --git a/src/core/engine.ts b/src/core/engine.ts index 12f8bc4..7427ea2 100644 --- a/src/core/engine.ts +++ b/src/core/engine.ts @@ -26,39 +26,41 @@ export enum DraughtsPlayer { DARK = 'dark', } -export type DraughtsEngineData = { +export type DraughtsEngineData = { player: DraughtsPlayer; board: DraughtsEngineBoard; - store: E; + stats: { + sinceCapture: number; + sinceNonKingAdvance: number; + } }; -export type DraughtsEngineStrategy = { +export type DraughtsEngineStrategy = { moves: ( - engine: DraughtsEngine + engine: DraughtsEngine ) => DraughtsEngineMove[]; - status: (engine: DraughtsEngine) => DraughtsStatus; + status: (engine: DraughtsEngine) => DraughtsStatus; isValidMove: ( - engine: DraughtsEngine, + engine: DraughtsEngine, move: DraughtsEngineMove ) => boolean; move: ( - engine: DraughtsEngine, + engine: DraughtsEngine, move: DraughtsEngineMove - ) => DraughtsEngineData; - serializeStore: (store: TStore) => TStore; + ) => DraughtsEngineData; }; -export class DraughtsEngine { - data: DraughtsEngineData; +export class DraughtsEngine { + data: DraughtsEngineData; - private strategy: DraughtsEngineStrategy; + private strategy: DraughtsEngineStrategy; private _moves: DraughtsEngineMove[] | undefined; private _status: DraughtsStatus | undefined; constructor( - data: DraughtsEngineData, - strategy: DraughtsEngineStrategy + data: DraughtsEngineData, + strategy: DraughtsEngineStrategy ) { this.data = data; this.strategy = strategy; @@ -82,7 +84,7 @@ export class DraughtsEngine { * Clones the current engine instance * @returns A new cloned engine instance */ - clone(): DraughtsEngine { + clone(): DraughtsEngine { return new DraughtsEngine(this.serialize(), this.strategy); } @@ -90,11 +92,11 @@ export class DraughtsEngine { * Serializes the engine data * @returns The serialized engine data */ - serialize(): DraughtsEngineData { + serialize(): DraughtsEngineData { return { board: { ...this.data.board }, - store: this.strategy.serializeStore(this.data.store), player: this.data.player, + stats: { ...this.data.stats }, }; } diff --git a/src/core/game.ts b/src/core/game.ts index df1e5b2..373a914 100644 --- a/src/core/game.ts +++ b/src/core/game.ts @@ -46,8 +46,8 @@ export type DraughtsAdapter1D = { toBoard1D: (engineBoard: DraughtsEngineBoard) => DraughtsBoard1D; }; -export class DraughtsGame1D { - engine: DraughtsEngine; +export class DraughtsGame1D { + engine: DraughtsEngine; history: DraughtsGameHistory1D; private _board: DraughtsBoard1D | undefined; @@ -56,7 +56,7 @@ export class DraughtsGame1D { private readonly adapter: DraughtsAdapter1D; constructor( - engine: DraughtsEngine, + engine: DraughtsEngine, history: DraughtsGameHistory1D, adapter: DraughtsAdapter1D ) { diff --git a/src/english/engine.ts b/src/english/engine.ts index c0e53ba..03a4683 100644 --- a/src/english/engine.ts +++ b/src/english/engine.ts @@ -9,19 +9,12 @@ import Mask from './mask'; import { EnglishDraughtsMoveGeneratorFactory } from './move-generation'; import { decomposeBits } from './utils'; -export type EnglishDraughtsEngineStore = { - readonly sinceCapture: number; - readonly sinceNonKingAdvance: number; -}; - export type EnglishDraughtsEngineData = DraughtsEngineData< - number, - EnglishDraughtsEngineStore + number >; export type EnglishDraughtsEngine = DraughtsEngine< - number, - EnglishDraughtsEngineStore + number >; export const EnglishDraughtsEngineDefaultData: EnglishDraughtsEngineData = { @@ -31,22 +24,15 @@ export const EnglishDraughtsEngineDefaultData: EnglishDraughtsEngineData = { dark: Mask.DARK_START, king: 0, }, - store: { + stats: { sinceCapture: 0, sinceNonKingAdvance: 0, }, }; export const EnglishDraughtsEngineStrategy: DraughtsEngineStrategy< - number, - EnglishDraughtsEngineStore + number > = { - serializeStore(store: EnglishDraughtsEngineStore) { - return { - ...store, - }; - }, - status(engine: EnglishDraughtsEngine) { if (engine.moves.length === 0) { return engine.data.player === DraughtsPlayer.LIGHT @@ -54,8 +40,8 @@ export const EnglishDraughtsEngineStrategy: DraughtsEngineStrategy< : DraughtsStatus.LIGHT_WON; } if ( - engine.data.store.sinceCapture >= 40 && - engine.data.store.sinceNonKingAdvance >= 40 + engine.data.stats.sinceCapture >= 40 && + engine.data.stats.sinceNonKingAdvance >= 40 ) { return DraughtsStatus.DRAW; } @@ -95,7 +81,7 @@ export const EnglishDraughtsEngineStrategy: DraughtsEngineStrategy< ...engine.data.board, }; - const store = { ...engine.data.store }; + const stats = { ...engine.data.stats }; board.light &= ~(move.origin | move.captures); board.dark &= ~(move.origin | move.captures); @@ -111,15 +97,15 @@ export const EnglishDraughtsEngineStrategy: DraughtsEngineStrategy< if (engine.data.board.king & move.origin) { board.king |= move.destination; - store.sinceNonKingAdvance += 1; + stats.sinceNonKingAdvance += 1; } else { - store.sinceNonKingAdvance = 0; + stats.sinceNonKingAdvance = 0; } if (move.captures) { - store.sinceCapture = 0; + stats.sinceCapture = 0; } else { - store.sinceCapture += 1; + stats.sinceCapture += 1; } return { @@ -128,7 +114,7 @@ export const EnglishDraughtsEngineStrategy: DraughtsEngineStrategy< ? DraughtsPlayer.DARK : DraughtsPlayer.LIGHT, board, - store, + stats, }; }, };