Advertisement
se7enek

main.js

Jan 31st, 2020
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.97 KB | None | 0 0
  1.  
  2. //Przygotowywujemy sobie zmienną na planszę
  3. var tablica;
  4. var plansza;
  5. var ruch_numer;
  6. //Tworzymy zdarzenie które uruchomi sie jak strona zostanie załadowana
  7. window.addEventListener("load", function(){
  8. //Po kliknięciu przycisku zaczynamy grę na nowo
  9. document.getElementById("przycisk").addEventListener("click", function(){
  10. document.getElementById("komunikat").setAttribute("hidden", "");
  11. nowa_gra("x");
  12. });
  13. //Przypisujemy sobie nasza zmienną do planszy żabyśmy nie musieli ciągle jej wyszukiwać
  14. plansza = document.getElementById("plansza");
  15. //dodajemy do plansz zdarzenie wywoływane przez kliknięcie myszki
  16. plansza.addEventListener("click", function(zdarzenie){
  17. //Element zdarzenie.target zawiera wskaźnik na polę na którym nastąpiło kliknięcie
  18. //Sprawdzamy czy user napewno klinką w pole a nie np. trafił na siatę, czy gdzieś obok.
  19. if(zdarzenie.target.nodeName != "TH" || zdarzenie.target.hasAttribute("pole"))
  20. return false;
  21. zdarzenie.target.setAttribute("pole", plansza.getAttribute("ruch"));
  22. var ruch = 1;
  23. if(plansza.getAttribute("ruch") == "x")
  24. {
  25. ruch = -1;
  26. plansza.setAttribute("ruch", "o");
  27. }
  28. else
  29. plansza.setAttribute("ruch", "x");
  30. //Dodaje kolejny ruch
  31. ruch_numer++;
  32. //Oznaczam pole w tablicy
  33. tablica[parseInt(zdarzenie.target.getAttribute("x"))][parseInt(zdarzenie.target.getAttribute("y"))] = ruch;
  34. switch(czy_koniec())
  35. {
  36. //najpopularniejsza opcja wiec na poczatek sprawdzamy i jak jest to przerywamy sprawdzanie
  37. case false: break;
  38. //Już wiemy że koniec więc blokujemy interfejs odbierając ruch
  39. case -1:
  40. wyswietl_komunikat("Wygrał krzyzyk");
  41. break;
  42. case 1:
  43. wyswietl_komunikat("Wygrało kólko");
  44. break;
  45. case -2:
  46. wyswietl_komunikat("Remis");
  47. break;
  48. }
  49. });
  50. nowa_gra("x");
  51. });
  52. //Funkcja do wyświetlania komunikatu na koniec gry
  53. function wyswietl_komunikat(tresc)
  54. {
  55. document.getElementById("tresc").innerHTML = tresc;
  56. plansza.removeAttribute("ruch");
  57. document.getElementById("komunikat").removeAttribute("hidden");
  58. };
  59. //Podajemy kto zaczyna x - krzyzyk, o - kolko
  60. function nowa_gra(zaczyna)
  61. {
  62. //Resetuje liczbę ruchów
  63. ruch_numer = 0;
  64. //Tworzymy tabelę jednowymiarową
  65. tablica = new Array(3);
  66. //Dodajemy drugi wymiar tworząc w każdym wierszi tabeli kolejną tabelę
  67. for(var i = 0; i < tablica.length;i++)
  68. {
  69. tablica[i] = new Array(tablica.length);
  70. for(var x = 0; x < tablica.length; x++)
  71. tablica[i][x] = 0;
  72. }
  73. //Sprawdzamy czy są atrybuty pola, jesli tak to je usuwamy
  74. var zapelnione_pola = plansza.querySelectorAll("th[pole]");
  75. for(var i = 0; i < zapelnione_pola.length; i++)
  76. zapelnione_pola[i].removeAttribute("pole");
  77. plansza.setAttribute("ruch", zaczyna);
  78. };
  79. function czy_koniec()
  80. {
  81. /*
  82. -1 - krzyzk
  83. 1 - kolko,
  84. -2 - remis
  85. false/0 - jeszcze nie koniec
  86. */
  87. //Sprawdzam czy nie ma wygranej po prostej
  88. for(var i = 0; i < 3; i++)
  89. {
  90. //Sprawdzam w poziomie
  91. if(Math.abs(tablica[0][i] + tablica[1][i] + tablica[2][i]) == 3)
  92. return tablica[0][i];
  93. //Sprawdzam w pionie
  94. if(Math.abs(tablica[i][0] + tablica[i][1] + tablica[i][2]) == 3)
  95. return tablica[i][0];
  96. }
  97. //Sprawdzam skosy
  98. if(Math.abs(tablica[0][0] + tablica[1][1] + tablica[2][2]) == 3)
  99. return tablica[0][0];
  100. if(Math.abs(tablica[0][2] + tablica[1][1] + tablica[2][0]) == 3)
  101. return tablica[0][2];
  102. //Sprawdzam czy plansza nie jest zapelniona jak jest i nie ma nadal wygranej to remis
  103. if(ruch_numer >= 9)
  104. return -2;
  105. return false;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement