feat: add emoji pool and difficulty-based selection

This commit is contained in:
2026-04-07 20:51:36 +07:00
parent aa3114f71f
commit 261a4d864e
2 changed files with 49 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
import { Difficulty } from "../types";
import { DIFFICULTY_CONFIGS } from "./constants";
export const EMOJI_POOL: string[] = [
"🐶", "🐱", "🐭", "🐹", "🐰", "🦊", "🐻", "🐼",
"🐨", "🐯", "🦁", "🐮", "🐷", "🐸", "🐵", "🐔",
"🐧", "🐦", "🦆", "🦅", "🦉", "🦇", "🐺", "🐗",
"🐴", "🦄", "🐝", "🐛", "🦋", "🐌", "🐞", "🐢",
"🐍", "🦎", "🐙", "🦑", "🦐", "🦀", "🐡", "🐠",
"🐟", "🐬", "🐳", "🐊",
];
export function getEmojisForDifficulty(difficulty: Difficulty): string[] {
const count = DIFFICULTY_CONFIGS[difficulty].pairCount;
const shuffled = [...EMOJI_POOL].sort(() => Math.random() - 0.5);
return shuffled.slice(0, count);
}
+32
View File
@@ -0,0 +1,32 @@
import { describe, it, expect } from "vitest";
import { EMOJI_POOL, getEmojisForDifficulty } from "../../src/game/emoji";
describe("emoji", () => {
it("pool has at least 40 unique emoji", () => {
expect(EMOJI_POOL.length).toBeGreaterThanOrEqual(40);
expect(new Set(EMOJI_POOL).size).toBe(EMOJI_POOL.length);
});
it("returns correct count for easy", () => {
const emojis = getEmojisForDifficulty("easy");
expect(emojis.length).toBe(12);
expect(new Set(emojis).size).toBe(12);
});
it("returns correct count for medium", () => {
const emojis = getEmojisForDifficulty("medium");
expect(emojis.length).toBe(24);
});
it("returns correct count for hard", () => {
const emojis = getEmojisForDifficulty("hard");
expect(emojis.length).toBe(40);
});
it("returned emojis are a subset of the pool", () => {
const emojis = getEmojisForDifficulty("hard");
for (const e of emojis) {
expect(EMOJI_POOL).toContain(e);
}
});
});