Witam. Nie mam pewności co do odpowiedzi na pytania dot. działania gry (pokera) napisanej w JavaScript.
Byłbym wdzięczny za sprawdzenie (i ewentualnie poprawienie odpowiedzi) :)

Moje odp. (niektórych brak) wyglądają następująco:

  1. Jaką funkcje pełni zmienna tally?
    odp. ?
  2. W jakim celu stworzono funkcję numsort?
    odp. W celu porównania liczb dla sort()
  3. O jaką właściwość zostaje wzbogacony element DOM img (id=”card3”) po wykonaniu funkcji InitGame?
    odp. Obsługa zdarzenia?
  4. Jaka jest wartośc składników obiektu deck[21] po wykonaniu pętli for – linia 24 *.js
    odp. Dec[21] = 8h
  5. Na czym polega działanie instrukcji for –linia 34 *.js
    odp. Tasowanie kart (poprzez zamiane dwóch losowych kart przy użyciu zmiennej pomocniczej)
  6. Na czym polega sens wykonania funkcji Score – linia 31 *.js
    odp. Do zerowania wyniku (np. gdy nowa gra)
  7. Co jest skutkiem wykonania instrukcji nexti.src = deck[nextcard+1].fname() – linia 45 *.js
    odp. Wstępnie załaduje następny obraz
  8. Wyjaśnij co jest skutkiem kliknięcia na linki o napisie „zacznij od nowa”, skoro właściwośc href tego linku jest równa href=”#”?
    odp. Wywołanie zdarzenia OnClick powodującego uruchomienie funkcji InitGame
  9. Dlaczego występuje reakcja na kliknięcie „miejsca na karte” na planszy?
    odp. Ponieważ jest ustawiona reakcja na zdarzenie?
  10. Jakie jest znaczenie lini thiscard = (e.target) ? e.target: e.scrElement; ? –linia 55
    **odp. Sprawdza które pole zostało kliknięte (target mozilla / e.srcElement IE) **
  11. Co jest skutkiem działania instrukcji pos=thiscard.id.substring(4) dla kliknięcia na 2 rzedzie 2 karty na planszy?
    odp. Pos = 7
  12. Jaką role pełni tablica board, a jaką deck?
    odp. Board reprezentuje plansze przechowując 25 elementów Card, tablica deck symuluje talie kart
  13. Jakie jest znaczenie (w jaki sposób jest zmieniana i wykorzystywana) zmienna nextcard?
    zmieniana przez inkrementacje (++), wskazuje na następną karte
  14. Do czego służy funkcja fname?
    odp. Generuje nazwe pliku obrazu wg Card
  15. Do przechowywania jakich informacji służy zmienna thiscard, a do jakich zmienna drawcard?
    odp. Thiscard – obecna carda, drawcard – następna karta
  16. Jaką rolę pełni zmienna nexti? Do przechowywania obiektów jakiego typu służy?
    odp. Praktycznie? Żadną, teoretycznie służy do przechowywania obrazów
  17. Jakie parametry przekazywane są do funkcji zliczającej ilość punktów w rzędzie?
    odp. board[r], board[r+1], board[r+2], board[r+3], board[r+4],”row”, gdzie x to nr wiersza
    ORAZ board[r], board[r+5], board[r+10], board[r+15], board[r+20],”col”, gdzie x to nr kolumny
  18. W jakim przypadku funkcja AddScore nie wykonuje obliczeń, tylko „od razu” zwraca w wyniku 0?
    odp. Jeżeli jest pusty rząd (kolumna olbo wiersz) zwraca 0
  19. Dlaczego stwierdzenie „strita” i „pokera królewskiego” odbywa się w różny sposób?
    odp. W stricie karty muszą być ułożone po kolei, natomiast w pokerze królewskim muszą to być 10,K,Q,K,A
  20. W jaki sposób odbywa się stwierdzenie „pokera”
    odp. Jeżeli jest strit AND (&&) kolor == true to jest wtedy poker
  21. Jakie merytoryczne znaczenie posiada instrukcja for –linia 161
    odp. ?
  22. W jaki sposób odbywa się stwierdzenie ‘trójki’?
    odp. Jeżeli three – true znaczy to że jest trójka
  23. W jaki sposób odbywa się stwierdzenie „fula”? jakiego typu są zmienne tree i pairs?
    odp. jeżeli three AND pairs == 1 (true) znaczy to, że jest FUL
  24. Jakim elementem DOM jest ‘obj’? – linia 102
    odp.
  25. W jakich wypadkach wywoływana jest funkcja InitGame?
    odp. po załadowaniu strony lub poprzez kliknięcie „zacznij od nowa” (zdarzenie OnClick)
  26. Co oznacza zapis nexti=New Image(53,68)?
    Odp. Tworzenie nowego obiektu IMAGE
  27. Co jest warunkiem zakończenia gry?
    odp. Wszystkie 25 pól muszą być zapełnione
  28. W jaki sposób zmieniamy napisy wewnątrz odnośnika?
    Odp. nazwa_obiektu.InnerHTML=””;
  29. Jakiego typu jest zmienna flush i co ona robi?
    odp. Jest to zmienna typu BOOL’enaowskiego, oznacza KOLOR-FLUSH
    30. W jaki sposób dotrzeć do obiektu DOM o znanym identyfikatorze?
    odp. dokument.getElementById(nazwa_obiektu).

KOD *.JS

// zmienne globalne
var tally = new Array(14)
var nextcard = 1;
var nexti = new Image(53,68);
// porównanie liczbowe dla sort()
function numsort(a, b) {
   return a - b;
}
//function InitGame() {
   if (!document.getElementById) return;
   stat=document.getElementById("status");
   stat.innerHTML="Next Card";
   nextcard = 1;
// tablica dla zawartości planszy
   board = new Array(26);
   for (i=1; i<26; i++) {
      board[i] = new Card(0,"x");
      obj=document.getElementById("card"+i);
      obj.src = "blank.gif";
      obj.onclick = PlaceCard;
   }
   // zapełnij talię (na razie uporządkowaną)
   deck = new Array(53);
   for (i=1; i<14; i++) {
     deck[i] = new Card(i,"c");
     deck[i+13] = new Card(i,"h");
     deck[i+26] = new Card(i,"s");
     deck[i+39] = new Card(i,"d");
   }
   // oczyść wyniki
   Score();
   // tasuj karty
   n = Math.floor(100 * Math.random() + 200);
   for (i=1; i<n; i++) {
      c1 = Math.floor(52*Math.random() + 1);
      c2 = Math.floor(52*Math.random() + 1);
      temp = deck[c2];
      deck[c2] = deck[c1];
      deck[c1] = temp;
   }
   // odkryj pierwszą kartę na ekranie
   next=document.getElementById("dcard");
   next.src = deck[nextcard].fname();
   // wstępnie załaduj następny obraz
   nexti.src = deck[nextcard+1].fname();
   obj=document.getElementById("newgame")
   obj.onclick=InitGame;
} // koniec InitGame

// połóż kartę na planszy w miejscu kliknięcia

function PlaceCard(e) {
   if (!e) var e = window.event;
   // które pole planszy zostało kliknięte?
   thiscard = (e.target) ? e.target: e.srcElement;
   pos = thiscard.id.substring(4);
   if (board[pos].suit != "x") {
      return;
   }
   drawcard=document.getElementById("dcard");
   thiscard.src = deck[nextcard].fname();
   drawcard.src = "blank.gif";
   board[pos] = deck[nextcard];
   nextcard++;
   Score();
   // Koniec gry?
   if (nextcard > 25) {
      EndGame();
   }
   else {
      drawcard.src = deck[nextcard].fname();
   // buforuj obraz następnej karty w talii na stole
      nexti = new Image(53,68);
      nexti.src = deck[nextcard+1].fname();
   }
}
// sprawdź ukończone wiersze i wyświetl wyniki
function Score() {
   score=document.getElementById("totalscore");
   totscore = 0;
// wiersze
   for (x=0; x<5; x++) {
      r = x * 5 + 1;
      a = AddScore(board[r],board[r+1],board[r+2],board[r+3],board[r+4],"row"+x);
      totscore += a;
   }
// kolumny
   for (x=0; x<5; x++) {
      r = x + 1;
      a = AddScore(board[r],board[r+5],board[r+10],board[r+15],board[r+20],"col"+x);
      totscore += a;
   }
// przekątne
      a = AddScore(board[5],board[9],board[13],board[17],board[21],"diag1")
      totscore += a;
      a = AddScore(board[1],board[7],board[13],board[19],board[25],"diag2")
      totscore += a;
      score.firstChild.nodeValue = totscore; 
}
// sprawdź układy kart
function AddScore(c1,c2,c3,c4,c5,scorebox) {
   obj=document.getElementById(scorebox);
   straight = false;
   flush = false;
   royal = false;
   pairs = 0;
   three = false;
// tablica sortowana dla wygody
   nums = new Array(5);
   nums[0] = c1.num;
   nums[1] = c2.num;
   nums[2] = c3.num;
   nums[3] = c4.num;
   nums[4] = c5.num;
   nums.sort(numsort);
// bez wyniku, jeśli rząd nie jest pełny
   if (c1.num == 0 || c2.num == 0 || c3.num == 0
       || c4.num == 0 || c5.num == 0) {
      obj.innerHTML="";
      return 0;
   }
// kolor
   if (c1.suit == c2.suit && c2.suit == c3.suit
      && c3.suit == c4.suit && c4.suit == c5.suit) {
      flush = true;
   }
// strit
   if (nums[4] - nums[3] == 1
    && nums[3] - nums[2] == 1
    && nums[2] - nums[1] == 1
    && nums[1] - nums[0] == 1) {
      straight = true;
   }
// poker królewski (10, J, Q, K, A)
   if (nums[1] == 10 && nums[2] == 11 && nums[3] == 12
    && nums[4] == 13 && nums[0] == 1) {
      straight = true;
      royal = true;
   }
// Poker królewski, poker, strit, kolor
   if (straight && flush && royal) {
      obj.innerHTML="Poker królewski<br>250";
      return 250;
   }
   if (straight && flush) {
      obj.innerHTML="Poker<br>50";
      return 50;
   }
   if (straight) {
      obj.innerHTML="Strit<br>4";
      return 4;
   }
   if (flush) {
      obj.innerHTML="Kolor<br>5"
      return 5;
   }
// tablica tally jest odliczeniem dla każdej wartości karty
   for (i=1; i<14; i++) {
      tally[i] = 0;
   }
   for (i=0; i<5; i++) {
      tally[nums[i]] += 1;
   }
   for (i=1; i<14; i++) {
// kareta
      if (tally[i] == 4) {
         obj.innerHTML="Kareta<br>25";
         return 25;
      }
      if (tally[i] == 3) three = true;
      if (tally[i] == 2) pairs += 1;
   }
// full
   if (three && pairs == true) {
      obj.innerHTML="Full<br>8";
      return 8;
   }
// dwie pary
   if (pairs == 2) {
      obj.innerHTML="Dwie pary<br>2";
      return 2;
   }
// trójka
   if (three) {
      obj.innerHTML="Trójka<br>3";
      return 3;
   }
// ledwie para
   if (pairs == 1) {
      obj.innerHTML="Para<br>1";
      return 1;
   }
// nic
   obj.innerHTML="Bez punktów<br>0";
   return 0;
// koniec AddScore()
}
// koniec gry - ostateczny wynik
function EndGame() {
   stat=document.getElementById("status");
   stat.innerHTML="<b>Koniec gry</b>";
}
// wygeneruj nazwę pliku obrazu wg obiektu Card
function fname() {
   return this.num + this.suit + ".gif";
}
// konstruktor obiektów Card
function Card(num,suit) {
   this.num = num;
   this.suit = suit;
   this.fname = fname;
}
// funkcje obsługi zdarzeń do rozpoczęcia gry 
window.onload=InitGame;

KOD HTML:

<html>
<head>
<title>Poker-samotnik</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">
<script language="JavaScript" type="text/javascript"
   src="pokersol.js">
</script>
<link rel="stylesheet" type="text/css" href="pokersol.css">
</head>
<body>

<table>
<tr>
  <td colspan="2"><h1>Poker-samotnik</h1></td>
  <td> <img id="card1" src="blank.gif" height="68" width="53"> </td>
  <td> <img id="card2" src="blank.gif" height="68" width="53"> </td>
  <td> <img id="card3" src="blank.gif" height="68" width="53"> </td>
  <td> <img id="card4" src="blank.gif" height="68" width="53"> </td>
  <td> <img id="card5" src="blank.gif" height="68" width="53"></td>
  <td class="score" id="row0">  </td>
</tr>
<tr>
  <td> <img id="dcard" border="0"
     src="blank.gif" height="68" width="53"></td>
  <td> </td>
  <td> <img id="card6" src="blank.gif" height="68" width="53"></td>
  <td> <img id="card7" src="blank.gif" height="68" width="53"></td>
  <td> <img id="card8" src="blank.gif" height="68" width="53"></td>
  <td> <img id="card9" src="blank.gif" height="68" width="53"></td>
  <td> <img id="card10" src="blank.gif" height="68" width="53"></td>
  <td class="score" id="row1"> </td>
</tr>
<tr>
  <td valign="top" id="status">Następna karta</td>
  <td> </td>
  <td> <img id="card11" src="blank.gif" height="68" width="53"></td>
  <td> <img id="card12" src="blank.gif" height="68" width="53"></td>
  <td> <img id="card13" src="blank.gif" height="68" width="53"></td>
  <td> <img id="card14" src="blank.gif" height="68" width="53"></td>
  <td> <img id="card15" src="blank.gif" height="68" width="53"></td>
  <td class="score" id="row2"> </td>
</tr>
<tr>
  <td id="total"> <b>Całkowity wynik:</b>
     <div id="totalscore">0</div></td>
  <td> </td>
  <td> <img id="card16" src="blank.gif" height="68" width="53"></td>
  <td> <img id="card17" src="blank.gif" height="68" width="53"></td>
  <td> <img id="card18" src="blank.gif" height="68" width="53"></td>
  <td> <img id="card19" src="blank.gif" height="68" width="53"></td>
  <td> <img id="card20" src="blank.gif" height="68" width="53"></td>
  <td class="score" id="row3"> </td>
</tr>
<tr>
  <td> <a id="newgame" href="#"><b>Zacznij od nowa</b></a></td>
  <td> </td>
  <td> <img id="card21" border=0 src="blank.gif" height=68 width=53></td>
  <td> <img id="card22" border=0 src="blank.gif" height=68 width=53></td>
  <td> <img id="card23" border=0 src="blank.gif" height=68 width=53></td>
  <td> <img id="card24" border=0 src="blank.gif" height=68 width=53></td>
  <td> <img id="card25" border=0 src="blank.gif" height=68 width=53></td>
  <td class="score" id="row4"> </td>
</tr>
<tr>
  <td> </td>
  <td class="score" id="diag1"> </td>
  <td class="score" id="col0">  </td>
  <td class="score" id="col1">  </td>
  <td class="score" id="col2">  </td>
  <td class="score" id="col3">  </td>
  <td class="score" id="col4">  </td>
  <td class="score" id="diag2"> </td>
</table>
</body>
</html>