maze-test 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,222 @@
1
- /** The npm package name. */
1
+ type Language = "en" | "zh";
2
+ type ScenarioKind = "success" | "treasure-and-leave" | "death-and-stop";
3
+ type Direction = "up" | "down" | "left" | "right";
4
+ interface Cell {
5
+ row: number;
6
+ col: number;
7
+ }
8
+ interface Door {
9
+ id: string;
10
+ position: Cell;
11
+ state: "closed";
12
+ }
13
+ interface KeyObject {
14
+ id: string;
15
+ type: "key";
16
+ position: Cell;
17
+ }
18
+ interface ChestObject {
19
+ id: string;
20
+ type: "chest";
21
+ position: Cell;
22
+ treasures: number;
23
+ }
24
+ interface TrapObject {
25
+ id: string;
26
+ type: "trap";
27
+ position: Cell;
28
+ damage: number;
29
+ }
30
+ interface MedicineObject {
31
+ id: string;
32
+ type: "medicine";
33
+ position: Cell;
34
+ recovery: number;
35
+ }
36
+ type MazeObject = KeyObject | ChestObject | TrapObject | MedicineObject;
37
+ interface MazeMetrics {
38
+ totalCells: number;
39
+ wallCells: number;
40
+ floorCells: number;
41
+ connectedFloorCells: number;
42
+ connected: boolean;
43
+ floorAdjacencyEdges: number;
44
+ independentCycles: number;
45
+ deadEnds: number;
46
+ junctions: number;
47
+ entryGoalDistance: number | null;
48
+ doorCount: number;
49
+ gatingDoorCount: number;
50
+ objectCounts: Partial<Record<MazeObject["type"], number>>;
51
+ }
52
+ interface Maze {
53
+ schemaVersion: "solid-cell-maze-v3@1";
54
+ id: string;
55
+ seed: number;
56
+ requestedSeed: number;
57
+ rows: number;
58
+ cols: number;
59
+ braid: number;
60
+ coordinateSystem: {
61
+ origin: "top-left";
62
+ columns: "letters-left-to-right";
63
+ rows: "numbers-top-to-bottom";
64
+ };
65
+ terrain: string[];
66
+ entry: Cell;
67
+ goal: Cell;
68
+ doors: Door[];
69
+ objects: MazeObject[];
70
+ metrics: MazeMetrics;
71
+ }
72
+ interface GenerateMazeOptions {
73
+ rows?: number;
74
+ cols?: number;
75
+ seed?: number;
76
+ requestedSeed?: number;
77
+ braid?: number;
78
+ id?: string;
79
+ }
80
+ interface DecorateMazeOptions {
81
+ seed?: number;
82
+ doorCount?: number;
83
+ chestCount?: number;
84
+ trapCount?: number;
85
+ medicineCount?: number;
86
+ }
87
+ interface InitialState {
88
+ health: number;
89
+ healthMax: number;
90
+ keys: number;
91
+ treasures: number;
92
+ }
93
+ interface TrialState extends InitialState {
94
+ position: Cell;
95
+ alive: boolean;
96
+ reachedGoal: boolean;
97
+ openedDoors: string[];
98
+ collectedKeys: string[];
99
+ openedChests: string[];
100
+ triggeredTraps: string[];
101
+ usedMedicines: string[];
102
+ }
103
+ interface TrialEvent {
104
+ type: "open-door" | "collect-key" | "open-chest" | "pass-closed-chest" | "trigger-trap" | "use-medicine" | "die" | "reach-goal";
105
+ id?: string;
106
+ keyCost?: number;
107
+ treasures?: number;
108
+ damage?: number;
109
+ recovery?: number;
110
+ }
111
+ type BlockedReason = "dead" | "wall-or-outside" | "closed-door-without-key";
112
+ interface TrialTraceItem {
113
+ step: number;
114
+ direction: Direction;
115
+ before: TrialState;
116
+ moved: boolean;
117
+ reason: BlockedReason | null;
118
+ events: TrialEvent[];
119
+ after: TrialState;
120
+ }
121
+ interface TrialAnswers {
122
+ finalPosition: string;
123
+ keys: number;
124
+ treasures: number;
125
+ health: number;
126
+ alive: boolean;
127
+ reachedGoal: boolean;
128
+ openedDoors: number;
129
+ openedChests: number;
130
+ triggeredTraps: number;
131
+ usedMedicines: number;
132
+ blockedMoves: number;
133
+ blockedAfterDeath: number;
134
+ }
135
+ interface SimulationResult {
136
+ state: TrialState;
137
+ trace: TrialTraceItem[];
138
+ answers: TrialAnswers;
139
+ }
140
+ interface TrialOptions {
141
+ seed?: number;
142
+ rows?: number;
143
+ cols?: number;
144
+ braid?: number;
145
+ doorCount?: number;
146
+ chestCount?: number;
147
+ trapCount?: number;
148
+ medicineCount?: number;
149
+ scenario?: ScenarioKind;
150
+ language?: Language;
151
+ style?: number;
152
+ minDistance?: number;
153
+ maxAttempts?: number;
154
+ }
155
+ interface ResolvedTrialOptions {
156
+ seed: number;
157
+ rows: number;
158
+ cols: number;
159
+ braid: number;
160
+ doorCount: number;
161
+ chestCount: number;
162
+ trapCount: number;
163
+ medicineCount: number;
164
+ scenario: ScenarioKind;
165
+ language: Language;
166
+ style: number;
167
+ minDistance: number;
168
+ maxAttempts: number;
169
+ }
170
+ interface TrialSections {
171
+ map: string;
172
+ rules: string;
173
+ actions: string;
174
+ questions: string;
175
+ }
176
+ interface MazeTrial {
177
+ schemaVersion: "maze-test-trial@1";
178
+ options: ResolvedTrialOptions;
179
+ maze: Maze;
180
+ initialState: InitialState;
181
+ actions: Direction[];
182
+ sections: TrialSections;
183
+ question: string;
184
+ answer: string;
185
+ result: SimulationResult;
186
+ }
187
+ interface MazeValidation {
188
+ valid: boolean;
189
+ errors: string[];
190
+ metrics: MazeMetrics | null;
191
+ }
192
+
193
+ declare function cell(row: number, col: number): Cell;
194
+ declare function cellKey(value: Cell): string;
195
+ declare function sameCell(a: Cell | undefined, b: Cell | undefined): boolean;
196
+ declare function columnLabel(col: number): string;
197
+ declare function letterNumberCoordinate(value: Cell): string;
198
+ declare function rowColumnCoordinate(value: Cell): string;
199
+ declare function neighbors(value: Cell, rows: number, cols: number): Cell[];
200
+
201
+ declare function generateSolidCellMaze(options?: GenerateMazeOptions): Maze;
202
+ declare function decorateSolidCellMaze(maze: Maze, options?: DecorateMazeOptions): Maze;
203
+ declare function analyzeSolidCellMaze(maze: Maze): MazeMetrics;
204
+ declare function validateSolidCellMaze(maze: Maze): MazeValidation;
205
+ declare function shortestPath(maze: Pick<Maze, "rows" | "cols" | "terrain">, start: Cell, goal: Cell, excludedCell?: Cell | null): Cell[];
206
+ declare function terrainAt(maze: Pick<Maze, "rows" | "cols" | "terrain">, value: Cell): string | null;
207
+ declare function isFloor(maze: Pick<Maze, "rows" | "cols" | "terrain">, value: Cell): boolean;
208
+
209
+ declare function renderCharacterMaze(maze: Maze, language?: Language): string;
210
+
211
+ declare function simulateTrial(maze: Maze, actions: readonly Direction[], initial?: Partial<InitialState>): SimulationResult;
212
+ declare function stateKey(state: TrialState): string;
213
+
214
+ declare function generateTrial(options?: TrialOptions): MazeTrial;
215
+ declare function generateQuestion(options?: TrialOptions): string;
216
+ declare function generateAnswer(options?: TrialOptions): string;
217
+ declare function resolveTrialOptions(options?: TrialOptions): ResolvedTrialOptions;
218
+
219
+ /** The npm package name. Retained for compatibility with the initial release. */
2
220
  declare const packageName = "maze-test";
3
221
 
4
- export { packageName };
222
+ export { type BlockedReason, type Cell, type ChestObject, type DecorateMazeOptions, type Direction, type Door, type GenerateMazeOptions, type InitialState, type KeyObject, type Language, type Maze, type MazeMetrics, type MazeObject, type MazeTrial, type MazeValidation, type MedicineObject, type ResolvedTrialOptions, type ScenarioKind, type SimulationResult, type TrapObject, type TrialAnswers, type TrialEvent, type TrialOptions, type TrialSections, type TrialState, type TrialTraceItem, analyzeSolidCellMaze, cell, cellKey, columnLabel, decorateSolidCellMaze, generateAnswer, generateQuestion, generateSolidCellMaze, generateTrial, isFloor, letterNumberCoordinate, neighbors, packageName, renderCharacterMaze, resolveTrialOptions, rowColumnCoordinate, sameCell, shortestPath, simulateTrial, stateKey, terrainAt, validateSolidCellMaze };