fix: prevent premature solved status, add DFS boost button, mark boosted exports

This commit is contained in:
2026-02-13 07:03:08 +01:00
parent 43c0290fac
commit c3188bb740
7 changed files with 145 additions and 16 deletions

View File

@@ -11,6 +11,8 @@ export const usePuzzleStore = defineStore('puzzle', () => {
const isGameWon = ref(false);
const hasUsedGuide = ref(false);
const guideUsageCount = ref(0);
const hasUsedBoost = ref(false);
const boostUsageCount = ref(0);
const currentDifficulty = ref(null); // 'easy', 'medium', 'hard', 'custom' or object { density: 0.5 }
const currentDensity = ref(0);
const size = ref(5);
@@ -72,6 +74,8 @@ export const usePuzzleStore = defineStore('puzzle', () => {
isGameWon.value = false;
hasUsedGuide.value = false;
guideUsageCount.value = 0;
hasUsedBoost.value = false;
boostUsageCount.value = 0;
currentDensity.value = totalCellsToFill.value / (size.value * size.value);
elapsedTime.value = 0;
startTimer();
@@ -90,6 +94,8 @@ export const usePuzzleStore = defineStore('puzzle', () => {
isGameWon.value = false;
hasUsedGuide.value = false;
guideUsageCount.value = 0;
hasUsedBoost.value = false;
boostUsageCount.value = 0;
currentDensity.value = density;
elapsedTime.value = 0;
startTimer();
@@ -110,6 +116,8 @@ export const usePuzzleStore = defineStore('puzzle', () => {
isGameWon.value = false;
hasUsedGuide.value = false;
guideUsageCount.value = 0;
hasUsedBoost.value = false;
boostUsageCount.value = 0;
// Calculate density
const totalFilled = grid.flat().filter(c => c === 1).length;
@@ -256,6 +264,17 @@ export const usePuzzleStore = defineStore('puzzle', () => {
}
if (correct) {
// Auto-fill remaining empty cells with X (2)
const rows = solution.value.length;
const cols = solution.value[0].length;
for (let r = 0; r < rows; r++) {
for (let c = 0; c < cols; c++) {
if (playerGrid.value[r][c] === 0) {
playerGrid.value[r][c] = 2;
}
}
}
isGameWon.value = true;
stopTimer();
}
@@ -290,6 +309,8 @@ export const usePuzzleStore = defineStore('puzzle', () => {
isGameWon: isGameWon.value,
hasUsedGuide: hasUsedGuide.value,
guideUsageCount: guideUsageCount.value,
hasUsedBoost: hasUsedBoost.value,
boostUsageCount: boostUsageCount.value,
currentDensity: currentDensity.value,
elapsedTime: elapsedTime.value,
moves: moves.value,
@@ -310,6 +331,8 @@ export const usePuzzleStore = defineStore('puzzle', () => {
isGameWon.value = parsed.isGameWon;
hasUsedGuide.value = parsed.hasUsedGuide || false;
guideUsageCount.value = parsed.guideUsageCount || 0;
hasUsedBoost.value = parsed.hasUsedBoost || false;
boostUsageCount.value = parsed.boostUsageCount || 0;
currentDensity.value = parsed.currentDensity || 0;
elapsedTime.value = parsed.elapsedTime || 0;
moves.value = parsed.moves || 0;
@@ -348,6 +371,13 @@ export const usePuzzleStore = defineStore('puzzle', () => {
saveState();
}
function markBoostUsed() {
if (isGameWon.value) return;
hasUsedBoost.value = true;
boostUsageCount.value++;
saveState();
}
function closeWinModal() {
if (!isGameWon.value) return;
isGameWon.value = false;