Skip to the content.

Program “Memory challenge”

Hra probíhá v kolech a funguje následujícím způsobem:

  1. Hráč si má za pět sekund zapamatovat pět čísel.
  2. Pak je má vepsat do textboxu:
  • a. Pokud uhodne, tak další kolo si bude muset zkusit zapamatovat šest čísel za šest sekund.
  • b. Pokud neuspěje, tak se mu ukážou čtyři čísla na čtyři sekundy.
  1. Hríč vyhraje, pokud si v pěti kolech zapamatuje číslo správně.
  2. Hráč prohraje pokud dříve pětkrát číslo napíše špatně.

Tzn. hra má maximálně devět kol, protože pak už hráč musí buď prohrát nebo vyhrát.

Čekání

V programu jsou využity dva triky, které si zaslouží trochu okomentovat. První z nich je čekání. JavaScript neobsahuje přímo funkci sleep, takže je nutné si ji naimplementovat. Využili jsme sleep funkci ze StackOverflow:

function sleep(delay) {
  var start = new Date().getTime();
  while (new Date().getTime() < start + delay);
}

Tuto funkci pak v kódu můžete zavolat třeba takto:

console.log("Chtel jsem neco rict, ale nemuzu si vzpomenout ...");
sleep(2000);
console.log("Uz vim! Krouzek programovani je skvely!");

Takto bude JavaScript mezi oběma výpisy do konzole chvilku váhat. Přesněji mezi výpisy bude čekat 2 sekundy.

Generování čísel

V programu potřebujeme generovat náhodné čísla s požadovaným počtem číslic. Požadovaný počet číslic nám udává proměnná digitNumber. V podstatě existují dva přístupy k tomuto problému. První iterativní algoritmus generuje v cyklu vždy jednu číslici, kterou přičteme k výslednému číslu a následně násobíme desíti.

number = 0;
for (var i = 0; i <= digitNumber; i++) {
  number = number * 10;
  number = number + randomNumber(0, 9);
}

Druhý přístup je vypočítat interval, ze kterého se mají čísla vybírat. Kupříkladu pro dvou ciferné čísla budeme náhodně vybírat čísla z intervalu 10 - 99. Obě strany intervalu se dají vypočítat jako 10^1 až 10^2 - 1. V JavaScriptu pak generování čísla bude probíhat takto:

number = randomNumber(
  Math.pow(10, digitNumber),
  Math.pow(10, digitNumber + 1) - 1
);