All checks were successful
Automated Container Build / build-and-push (push) Successful in 1m41s
60 lines
2.7 KiB
TypeScript
60 lines
2.7 KiB
TypeScript
import { parseConnectionsImportBatch } from "@/lib/arcade/connectionsImport";
|
|
import { parseCrosswordImportBatch } from "@/lib/arcade/crosswordImport";
|
|
import type { ArcadeGameKey } from "@/types/arcade";
|
|
|
|
const CONNECTIONS_PROMPT = `You are generating a Connections study game as strict JSON.
|
|
Return exactly one JSON object with no Markdown fence or commentary.
|
|
|
|
Use this schema:
|
|
{"schemaVersion":1,"type":"connections","name":"...","description":"...","settings":{"groupCount":4,"itemsPerGroup":4,"allowedMistakes":4},"content":[{"id":"group-1","category":"...","items":["...","...","...","..."],"explanation":"..."}]}
|
|
|
|
Rules:
|
|
- Generate exactly four groups of exactly four unique items.
|
|
- Every item must fit only its intended group within this board.
|
|
- Use specific, distinct category names and concise tiles of one to four words.
|
|
- Give every group a concise explanation.
|
|
- Do not create arbitrary leftover groups or use broad categories shared by most tiles.
|
|
- Base all content strictly on the study material below.
|
|
|
|
Material:
|
|
[paste your notes or lecture content here]`;
|
|
|
|
const CROSSWORD_PROMPT = `You are generating one Crossword study game as strict JSON.
|
|
Return exactly one JSON object with no Markdown fence or commentary.
|
|
|
|
Use this schema:
|
|
{"schemaVersion":1,"type":"crossword","name":"...","description":"...","settings":{"allowInstantCheck":false,"allowHints":true},"content":[{"id":"entry-1","answer":"...","displayAnswer":"...","clue":"...","alternateClue":"...","explanation":"..."}]}
|
|
|
|
Rules:
|
|
- Generate exactly 80 entries in the content array.
|
|
- Every answer must be unique after spaces, punctuation, hyphens, apostrophes, and capitalization are removed.
|
|
- Answers must contain 3 to 18 letters after normalization. Do not use digits.
|
|
- Prefer terminology with shared letters so the application can construct a dense connected crossword.
|
|
- Each clue must uniquely identify its answer without repeating the answer.
|
|
- Provide a genuinely useful alternate clue and a concise educational explanation for every entry.
|
|
- Use displayAnswer to preserve spaces, punctuation, or natural capitalization when needed.
|
|
- Base all content strictly on the study material below.
|
|
|
|
Material:
|
|
[paste your notes or lecture content here]`;
|
|
|
|
export const ARCADE_SERVER_REGISTRY = {
|
|
connections: {
|
|
schemaVersion: 1,
|
|
preview: parseConnectionsImportBatch,
|
|
defaultInstructions: CONNECTIONS_PROMPT,
|
|
},
|
|
crossword: {
|
|
schemaVersion: 1,
|
|
preview: parseCrosswordImportBatch,
|
|
defaultInstructions: CROSSWORD_PROMPT,
|
|
},
|
|
} satisfies Record<ArcadeGameKey, {
|
|
schemaVersion: number;
|
|
preview: (rawJson: string) => unknown;
|
|
defaultInstructions: string;
|
|
}>;
|
|
|
|
export function getArcadeGameDefinition(gameType: ArcadeGameKey) {
|
|
return ARCADE_SERVER_REGISTRY[gameType];
|
|
}
|