Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.43 KB | None | 0 0
  1. "use strict";
  2.  
  3. //variables
  4.  
  5. //main buttons
  6. var paper = document.getElementById("paper");
  7. var rock = document.getElementById("rock");
  8. var scissors = document.getElementById("scissors");
  9. var buttons = document.getElementsByClassName("player-move"); // wszystkie buttony gracza
  10. var newGame = document.getElementById("newGame"); // przycisk new game
  11.  
  12. //outputs
  13. var output = document.getElementById("output"); // pole do wyswietlania wyniku meczu
  14. var result = document.getElementById("result"); // pole do wyswietlania liczby wygranych rund
  15. var modalOutput = document.getElementById("modal-one-content"); //pole do wyswietlania wyniku meczu w modalu
  16. var tableOutput = document.getElementById("modal-one-table"); // pole do wyswietlania tabeli z przebiegiem gry w modalu
  17. var modalSummary = document.getElementById("modal-one"); // modal z wynikami i przebiegiem gry pokazywanym w tabeli
  18.  
  19. //moves
  20. var computerButton; // do przypisania random liczby do rock, paper,scissors w funkcji computerMove
  21. var preventGame; //do wykorzystania w funkcji blokujaca dalsza gre, zmienna ktora ma wlasciwosci true lub false
  22.  
  23. //main variable
  24. var params = {
  25. playerRounds: 0, //number of player rounds
  26. computerRounds: 0, //number of computer rounds
  27. noTurns: "", //number of turns set while clicking new game button
  28. noRounds: 0, // round number
  29. progress: [], //pusta tablica sluzaca do zapisywania parametrow rozgrywki
  30. playerCurrentMove: "", // zmienna przechowujaca ruch gracza w danej turze
  31. computerCurrentMove: "", //zmienna przechowujaca ruch komputera w danej turze
  32. roundStatus: "" //zmienna ktora bedzie wyswietlac won/lost lub draw dla danej rundy
  33. };
  34.  
  35. //functions
  36.  
  37. //funkcja sluzaca do tworzenia obiektu i dodawania wartosci kluczow do obiektu
  38. var pushValues = function() {
  39. var values = {
  40. // tworzymy zmienna values przechowujaca parametry rundy ( moze trzeba ja zadeklarowac globalnie zamiast w funkcji)
  41. noRound: params.noRounds,
  42. playerMove: params.playerCurrentMove,
  43. computerMove: params.computerCurrentMove,
  44. roundResult: params.roundStatus,
  45. matchResult:
  46. "You: " + params.playerRounds + " - " + "Comp: " + params.computerRounds
  47. };
  48.  
  49. var valuesLength = Object.keys(values);
  50. //console.log(valuesLength);
  51.  
  52. //funkcja ktora dodaje obiekt z parametrami rundy do tabliby progress
  53.  
  54. params.progress.push(values); // dodajemy parametry rundy do tablicy params.progress po kazdym kliknieciu w button
  55. console.log(params.progress);
  56. var testCell = Object.values(values); // parametry z kluczow w obiekcie values do wypelniania komorek w tabeli
  57. console.log(testCell);
  58. };
  59.  
  60. // funkcja tworzaca tabele ( czy musze wyrzucic ja poza funkcje pushValues zeby tworzylo jedna tabele a nie co button clik)
  61. function createTable() {
  62. var tbl = document.getElementById("table-score");
  63. tbl.innerHTML = '';
  64. tbl.innerHTML =
  65. "<tr><th>Round nr</th><th>Player move</th><th>Computer move</th><th>Round result</th><th>Match result</th></tr>";
  66.  
  67. for (var i = 0; i < params.progres.length; i++) {
  68. tbl.innerHTML +=
  69. "<tr><td>" +
  70. params.progres[i].noRounds +
  71. "</td><td>" +
  72. params.progres[i].playerCurrentMove +
  73. "</td><td>" +
  74. params.progres[i].computerCurrentMove +
  75. "</td><td>" +
  76. params.progres[i].roundStatus +
  77. "</td><td>" +
  78. params.progres[i].matchResult +
  79. "</td></tr>";
  80. }
  81. }
  82.  
  83. //funkcja tworzaca tabele poza funkcja pushValues
  84. /*function createTable(){
  85. var tbl = document.createElement('table');
  86. tbl.classList.add('table');
  87. var headers = ["Round nr", "Player move", "Computer move", "Round result", "Match result"];
  88. var columnCount = headers.length;
  89. //Add the header row.
  90. var row = table.insertRow(-1);
  91. for (var i = 0; i < columnCount; i++) {
  92. var headerCell = document.createElement("TH");
  93. headerCell.innerHTML = headers[i];
  94. row.appendChild(headerCell);
  95. }; */
  96.  
  97. //funkcja playerMove - glowna funkcja
  98. function playerMove(buttonClicked) {
  99. params.playerCurrentMove = buttonClicked; // dzieki temu do zmiennej w params trafi aktualny ruch gracza
  100. computerMove();
  101. params.noRounds++; // each click increase round number
  102. switch (
  103. buttonClicked + computerButton //funkcja decydujaca o wyniku
  104. ) {
  105. case "rockscissors":
  106. case "paperrock":
  107. case "scissorspaper":
  108. params.roundStatus = "You Won";
  109. displayText(
  110. "YOU WON! : You played " +
  111. "<b>" +
  112. buttonClicked +
  113. "</b>" +
  114. ", computer played " +
  115. "<b>" +
  116. computerButton +
  117. "</b>"
  118. );
  119. params.playerRounds++;
  120. //console.log('player won games: '+ params.playerRounds);
  121. displayWonRounds();
  122. pushValues(); // dopiero jak wynik przeskoczy [ZMIANA]
  123. checkIfWon();
  124. break;
  125. case "rockpaper":
  126. case "paperscissors":
  127. case "scissorsrock":
  128. params.roundStatus = "You Lost";
  129. displayText(
  130. "YOU LOST! : You played " +
  131. "<b>" +
  132. buttonClicked +
  133. "</b>" +
  134. ", computer played " +
  135. "<b>" +
  136. computerButton +
  137. "</b>"
  138. );
  139. params.computerRounds++;
  140. //console.log('computer won games: '+ params.computerRounds);
  141. displayWonRounds();
  142. pushValues(); // dopiero jak wynik przeskoczy [ZMIANA]
  143. checkIfWon();
  144. break;
  145. case "rockrock":
  146. case "paperpaper":
  147. case "scissorsscissors":
  148. params.roundStatus = "Draw";
  149. displayText(
  150. "DRAW! : You played " +
  151. "<b>" +
  152. buttonClicked +
  153. "</b>" +
  154. ", computer also played " +
  155. "<b>" +
  156. computerButton +
  157. "</b>"
  158. );
  159. pushValues(); // dopiero jak wynik przeskoczy [ZMIANA]
  160. break;
  161. }
  162. }
  163.  
  164. // petla przechodzaca przez wszystkie buttony i uruchamiajaca funkcje playerMove z opdpowiednim argumentem, zastepuje funkcje playerChoice();
  165. for (var i = 0; i < buttons.length; i++) {
  166. // dla kazdego buttona
  167. buttons[i].addEventListener("click", function() {
  168. playerMove(this.getAttribute("data-move")); // po kliknieciu w button uruchom funkcje ktora zczytuje wartosc parametru data-move ktorego wartosciami sa, w zaleznosci od kliknietego buttona - rock,parer,scissorss
  169. });
  170. }
  171.  
  172. //funkcja losująca liczby od 1 do 3 i przypisujaca im wartosci
  173. function computerMove() {
  174. var computerChoice = Math.floor(Math.random() * 3 + 1);
  175. if (computerChoice == 1) {
  176. computerButton = "paper";
  177. } else if (computerChoice == 2) {
  178. computerButton = "rock";
  179. } else {
  180. computerButton = "scissors";
  181. }
  182. params.computerCurrentMove = computerButton; // dzieki temu do zmiennej w params trafi aktualny ruch komputera
  183. return computerChoice;
  184. }
  185.  
  186. //funkcja wyswietlajaca tekst w output
  187. var displayText = function(text) {
  188. output.innerHTML = output.innerHTML + text + "<br>";
  189. };
  190.  
  191. //funkcja wyswietlajaca liczbe wygranych rund
  192. var displayWonRounds = function() {
  193. clearTextWonRounds();
  194. result.innerHTML =
  195. result.innerHTML +
  196. "Number of won rounds: " +
  197. "<br><br>" +
  198. "<b>" +
  199. "Player: " +
  200. "</b>" +
  201. params.playerRounds +
  202. "<b>" +
  203. " Computer: " +
  204. "</b>" +
  205. params.computerRounds +
  206. "<br><br>";
  207. };
  208.  
  209. //funkcja czysczaca text w WonRounds
  210. function clearTextWonRounds() {
  211. result.innerHTML = "";
  212. }
  213.  
  214. //funkcja zczytujaca wartosc z newGame i wyswietlajaca komunikat w polu result
  215. newGame.addEventListener("click", function() {
  216. params.noTurns = window.prompt(
  217. "Plase specify number of turns necessery to win the game"
  218. );
  219. if (
  220. isNaN(params.noTurns) ||
  221. params.noTurns == "" ||
  222. params.noTurns == null ||
  223. params.noTurns == 0 ||
  224. params.noTurns == 1
  225. ) {
  226. displayText("Can only be a number and larger than 1!");
  227. } else {
  228. displayRounds();
  229. paper.style.visibility = "visible";
  230. rock.style.visibility = "visible";
  231. scissors.style.visibility = "visible";
  232. }
  233. });
  234. //funkcja wyswietlajaca liczbe ustalonych rund
  235. var displayRounds = function() {
  236. result.innerHTML = "";
  237. result.insertAdjacentHTML(
  238. "beforebegin",
  239. "Numbers of turns to win the game is: " +
  240. "<b>" +
  241. params.noTurns +
  242. "</b>" +
  243. "<br><br>"
  244. );
  245. };
  246. //funkcja czysczaca liczbe rund w result
  247. function clearRounds() {
  248. //result.insertAdjacentHTML('beforebegin','');
  249. params.playerRounds = 0;
  250. params.computerRounds = 0;
  251. }
  252.  
  253. function showModal() {
  254. // funkcja pokazujaca modal
  255. document.querySelector("#modal-overlay").classList.add("show");
  256. modalSummary.classList.add("show");
  257. }
  258.  
  259. //funkcja ktora sprawdza czy gracz lub komputer nie ma wiekszego score niz liczba rund i blokuje gre jesli score jest osiagniety
  260. function checkIfWon() {
  261. if (params.playerRounds == params.noTurns) {
  262. //wyswietlenie wygranej gracza
  263. //output.insertAdjacentHTML('beforebegin','<b>' + 'You won the entire game!' + '</b>'+ '<br>' + ' Press NEW GAME button to play again'+'<br>');
  264. modalOutput.innerHTML = "";
  265. modalOutput.insertAdjacentHTML(
  266. "afterbegin",
  267. "<br>" +
  268. "<b>" +
  269. "You won the entire game!" +
  270. "</b>" +
  271. "<br><br>" +
  272. " Press NEW GAME button to play again" +
  273. "<br>"
  274. );
  275. output.innerHTML = "";
  276. result.innerHTML = "";
  277. showModal();
  278. clearRounds();
  279. paper.style.visibility = "hidden";
  280. rock.style.visibility = "hidden";
  281. scissors.style.visibility = "hidden";
  282. } else if (params.computerRounds == params.noTurns) {
  283. //wyswietlenie wygranej komputera
  284. //output.insertAdjacentHTML('beforebegin','<b>' + 'You lost the game!' + '</b>'+ '<br>' + ' Press NEW GAME button to play again'+'<br>');
  285. modalOutput.innerHTML = "";
  286. modalOutput.insertAdjacentHTML(
  287. "afterbegin",
  288. "<br>" +
  289. "<b>" +
  290. "You lost the game!" +
  291. "</b>" +
  292. "<br><br>" +
  293. " Press NEW GAME button to play again" +
  294. "<br>"
  295. );
  296. output.innerHTML = "";
  297. result.innerHTML = "";
  298. showModal();
  299. clearRounds();
  300. paper.style.visibility = "hidden";
  301. rock.style.visibility = "hidden";
  302. scissors.style.visibility = "hidden";
  303. } else {
  304. console.log("draw");
  305. }
  306. }
  307.  
  308. // modals code
  309.  
  310. (function() {
  311. /* W kodzie HTML i CSS dodaliśmy style dla prostego modala, który będzie zawsze wyśrodkowany w oknie.
  312.  
  313. Teraz wystarczy napisać funkcję otwierającą modal:
  314. */
  315.  
  316. var showModal = function(event) {
  317. event.preventDefault();
  318. document.querySelector("#modal-overlay").classList.add("show");
  319. /*var link = this.getAttribute('href'); // oobieramy atrybut z wlasciwosci href kliknietego linku
  320. console.log(link);
  321. link = link.replace('#', ''); // usuwamy # z atrybutu href
  322. console.log("after using replace() on link variable: " + link);
  323. var selectedModal = document.getElementById(link); // zaznaczamy modal o Id kliknietego linku */
  324.  
  325. for (var i = 0; i < modalLinks.length; i++) {
  326. modals[i].classList.remove("show");
  327. }
  328. selectedModal.classList.add("show"); // zmienic ten parametr do gry kamien nozyce
  329. };
  330.  
  331. // Mimo, że obecnie mamy tylko jeden link, stosujemy kod dla wielu linków. W ten sposób nie będzie trzeba go zmieniać, kiedy zechcemy mieć więcej linków lub guzików otwierających modale
  332.  
  333. var modalLinks = document.querySelectorAll(".show-modal");
  334.  
  335. for (var i = 0; i < modalLinks.length; i++) {
  336. modalLinks[i].addEventListener("click", showModal);
  337. }
  338.  
  339. // Dodajemy też funkcję zamykającą modal, oraz przywiązujemy ją do kliknięć na elemencie z klasą "close".
  340.  
  341. var hideModal = function(event) {
  342. event.preventDefault();
  343. document.querySelector("#modal-overlay").classList.remove("show");
  344. };
  345.  
  346. var closeButtons = document.querySelectorAll(".modal .close");
  347.  
  348. for (var i = 0; i < closeButtons.length; i++) {
  349. closeButtons[i].addEventListener("click", hideModal);
  350. }
  351.  
  352. // Dobrą praktyką jest również umożliwianie zamykania modala poprzez kliknięcie w overlay.
  353.  
  354. document.querySelector("#modal-overlay").addEventListener("click", hideModal);
  355.  
  356. // Musimy jednak pamiętać, aby zablokować propagację kliknięć z samego modala - inaczej każde kliknięcie wewnątrz modala również zamykałoby go.
  357.  
  358. var modals = document.querySelectorAll(".modal");
  359.  
  360. for (var i = 0; i < modals.length; i++) {
  361. modals[i].addEventListener("click", function(event) {
  362. event.stopPropagation();
  363. });
  364. }
  365. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement