Update 2025-04-13_16:25:39
This commit is contained in:
69
static/tile.js
Normal file
69
static/tile.js
Normal file
@ -0,0 +1,69 @@
|
||||
import { SHAPES } from "./emoji.js";
|
||||
|
||||
export function generateRandomTiles(gridSize = 4, shapePoolSize = 4, numberPoolSize = 5) {
|
||||
const totalTiles = gridSize * gridSize;
|
||||
const shapes = SHAPES.sort(() => 0.5 - Math.random()).slice(0, shapePoolSize);
|
||||
const numbers = Array.from({ length: numberPoolSize }, (_, i) => i + 1);
|
||||
|
||||
const positions = getGridPositions(gridSize);
|
||||
const tiles = Array.from({ length: totalTiles }, (_, i) => ({
|
||||
shape: shapes[Math.floor(Math.random() * shapes.length)],
|
||||
number: numbers[Math.floor(Math.random() * numbers.length)],
|
||||
position: positions[i]
|
||||
}));
|
||||
|
||||
return tiles;
|
||||
}
|
||||
|
||||
export function createModifiedTiles(originalTiles, changes = 2) {
|
||||
const newTiles = originalTiles.map(t => ({ ...t }));
|
||||
const changeIndices = new Set();
|
||||
|
||||
while (changeIndices.size < changes) {
|
||||
changeIndices.add(Math.floor(Math.random() * newTiles.length));
|
||||
}
|
||||
|
||||
for (const index of changeIndices) {
|
||||
let newShape;
|
||||
do {
|
||||
newShape = SHAPES[Math.floor(Math.random() * SHAPES.length)];
|
||||
} while (newShape === newTiles[index].shape);
|
||||
|
||||
newTiles[index].shape = newShape;
|
||||
}
|
||||
|
||||
return { modifiedTiles: newTiles, changedIndices: [...changeIndices] };
|
||||
}
|
||||
|
||||
export function getGridPositions(gridSize) {
|
||||
const positions = [];
|
||||
for (let row = 0; row < gridSize; row++) {
|
||||
for (let col = 0; col < gridSize; col++) {
|
||||
positions.push([row, col]);
|
||||
}
|
||||
}
|
||||
return positions;
|
||||
}
|
||||
|
||||
export function getTileFeedback(index, selected, changed) {
|
||||
if (selected.includes(index) && changed.includes(index)) return "correct";
|
||||
if (selected.includes(index) && !changed.includes(index)) return "wrong";
|
||||
if (!selected.includes(index) && changed.includes(index)) return "missed";
|
||||
return null;
|
||||
}
|
||||
|
||||
export function calculateScore(selected, correct) {
|
||||
const correctSet = new Set(correct);
|
||||
const selectedSet = new Set(selected);
|
||||
const correctGuesses = selected.filter(i => correctSet.has(i));
|
||||
const wrongGuesses = selected.filter(i => !correctSet.has(i));
|
||||
const missed = correct.filter(i => !selectedSet.has(i));
|
||||
|
||||
return {
|
||||
correctGuesses,
|
||||
wrongGuesses,
|
||||
missed,
|
||||
score: correctGuesses.length - wrongGuesses.length
|
||||
};
|
||||
}
|
||||
|
Reference in New Issue
Block a user