Skip to content

Commit

Permalink
move grid padding into puzzle generation so that custom puzzles aren'…
Browse files Browse the repository at this point in the history
…t double padded
  • Loading branch information
skedwards88 committed Aug 29, 2024
1 parent 103bf11 commit cd02a61
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 24 deletions.
34 changes: 13 additions & 21 deletions src/logic/gameInit.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import getDailySeed from "../common/getDailySeed";
import {getNumLettersForDay} from "./getNumLettersForDay";
import {getGridSizeForLetters} from "./getGridSizeForLetters";
import {generatePuzzleFromRepresentativeString} from "./generatePuzzleFromRepresentativeString";
import {updatePieceDatum} from "./assemblePiece";

function validateSavedState(savedState) {
if (typeof savedState !== "object" || savedState === null) {
Expand Down Expand Up @@ -92,31 +91,24 @@ export function gameInit({
`Error generating custom puzzle from seed ${seed}. Will proceed to generate random game instead. Caught error: ${error}`,
);

({pieces, maxShiftLeft, maxShiftRight, maxShiftUp, maxShiftDown} =
generatePuzzle({
gridSize: gridSize,
minLetters: minLetters,
seed: seed,
}));
({
gridSize,
pieces,
maxShiftLeft,
maxShiftRight,
maxShiftUp,
maxShiftDown,
} = generatePuzzle({
gridSize: gridSize,
minLetters: minLetters,
seed: seed,
}));
}
} else {
({pieces, maxShiftLeft, maxShiftRight, maxShiftUp, maxShiftDown} =
({gridSize, pieces, maxShiftLeft, maxShiftRight, maxShiftUp, maxShiftDown} =
generatePuzzle({gridSize: gridSize, minLetters: minLetters, seed: seed}));
}

// Pad the puzzle with a square on each side and recenter the solution
maxShiftRight++;
maxShiftDown++;
maxShiftLeft++;
maxShiftUp++;
gridSize = gridSize + 2;
pieces = pieces.map((piece) =>
updatePieceDatum(piece, {
solutionTop: piece.solutionTop + 1,
solutionLeft: piece.solutionLeft + 1,
}),
);

// If there are already stats, use those
let stats;
if (savedState && savedState.stats) {
Expand Down
22 changes: 19 additions & 3 deletions src/logic/generatePuzzle.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,16 @@ export function generatePuzzle({gridSize, minLetters, seed}) {

const centeredGrid = centerGrid(grid, "");

const {maxShiftLeft, maxShiftRight, maxShiftUp, maxShiftDown} =
getMaxShifts(centeredGrid, "");
let {maxShiftLeft, maxShiftRight, maxShiftUp, maxShiftDown} = getMaxShifts(
centeredGrid,
"",
);

const pieces = shuffleArray(
makePieces(centeredGrid),
pseudoRandomGenerator,
);
const pieceData = pieces.map((piece, index) =>
let pieceData = pieces.map((piece, index) =>
updatePieceDatum(piece, {
id: index,
poolIndex: index,
Expand All @@ -48,7 +50,21 @@ export function generatePuzzle({gridSize, minLetters, seed}) {
numSingletons / numPieces < maxFractionSingles;

if (foundPuzzleWithAcceptableSingletons || count > 100) {
// Pad the puzzle with a square on each side and recenter the solution
maxShiftRight++;
maxShiftDown++;
maxShiftLeft++;
maxShiftUp++;
gridSize = gridSize + 2;
pieceData = pieceData.map((piece) =>
updatePieceDatum(piece, {
solutionTop: piece.solutionTop + 1,
solutionLeft: piece.solutionLeft + 1,
}),
);

return {
gridSize,
pieces: pieceData,
maxShiftLeft: maxShiftLeft,
maxShiftRight: maxShiftRight,
Expand Down

0 comments on commit cd02a61

Please sign in to comment.