Add ?seed= support

This commit is contained in:
Lynn 2022-01-07 17:13:39 +01:00
parent 09c259447b
commit 84880b2551
3 changed files with 28 additions and 6 deletions

View file

@ -4,7 +4,7 @@ import dictionary from "./dictionary.json";
import { Clue, clue } from "./clue";
import { Keyboard } from "./Keyboard";
import common from "./common.json";
import { dictionarySet, pick } from "./util";
import { dictionarySet, pick, resetRng } from "./util";
import { names } from "./names";
enum GameState {
@ -33,7 +33,7 @@ function Game(props: GameProps) {
const [currentGuess, setCurrentGuess] = useState<string>("");
const [wordLength, setWordLength] = useState(5);
const [hint, setHint] = useState<string>(`Make your first guess!`);
const [target, setTarget] = useState(randomTarget(wordLength));
const [target, setTarget] = useState(() => randomTarget(wordLength));
const reset = () => {
setTarget(randomTarget(wordLength));
@ -129,13 +129,19 @@ function Game(props: GameProps) {
min="4"
max="11"
id="wordLength"
disabled={guesses.length > 0 || currentGuess !== ""}
disabled={
gameState === GameState.Playing &&
(guesses.length > 0 || currentGuess !== "")
}
value={wordLength}
onChange={(e) => {
const length = Number(e.target.value);
resetRng();
setGuesses([]);
setTarget(randomTarget(length));
setWordLength(length);
setHint(`${length} letters`);
(document.activeElement as HTMLElement)?.blur();
}}
></input>
<button

View file

@ -13277,7 +13277,6 @@
"deleted",
"ignition",
"rehearsal",
"ness",
"pediatric",
"helmet",
"anthology",

View file

@ -2,6 +2,23 @@ import dictionary from "./dictionary.json";
export const dictionarySet: Set<string> = new Set(dictionary);
export function pick<T>(array: Array<T>): T {
return array[Math.floor(array.length * Math.random())];
function mulberry32(a: number) {
return function () {
var t = (a += 0x6d2b79f5);
t = Math.imul(t ^ (t >>> 15), t | 1);
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
};
}
const seed = Number(new URLSearchParams(window.location.search).get("seed"));
const makeRandom = () => (seed ? mulberry32(seed) : () => Math.random());
let random = makeRandom();
export function resetRng(): void {
random = makeRandom();
}
export function pick<T>(array: Array<T>): T {
return array[Math.floor(array.length * random())];
}