script.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. const moles = document.querySelectorAll(".mole");
  2. const scoreEl = document.querySelector(".score span");
  3. let score = 0;
  4. const booms = document.querySelectorAll(".boom");
  5. const button = document.querySelector(".button");
  6. const boardEl = document.querySelector(".leaderboard");
  7. let interval;
  8. const startGame = () => {
  9. button.disabled = true;
  10. interval = setInterval(() => {
  11. const random = Math.floor(Math.random() * moles.length);
  12. hideMoles();
  13. moles[random].classList.add("active");
  14. }, 1200);
  15. setTimeout(() => {
  16. let userName = prompt('What is your name?');
  17. updateLeaderBoard(userName, score);
  18. showLeaderBoard();
  19. reset();
  20. }, 10000);
  21. }
  22. const hideMoles = () => {
  23. moles.forEach((mole) => {
  24. mole.classList.remove("active");
  25. });
  26. }
  27. button.addEventListener("click", startGame);
  28. const sortLeaders = (a, b) => {
  29. if (a.score < b.score) {
  30. return 1;
  31. } else if (a.score > b.score) {
  32. return -1;
  33. } else {
  34. return 0;
  35. }
  36. }
  37. const updateLeaderBoard = (userName, score) => {
  38. let leaderBoard = JSON.parse(localStorage.getItem('leaderBoard')) || [];
  39. let existingUser = leaderBoard.find((item) => item.userName == userName);
  40. if (existingUser) {
  41. existingUser.score = score > existingUser.score ? score : existingUser.score;
  42. } else {
  43. leaderBoard.push({ userName, score });
  44. }
  45. leaderBoard.sort(sortLeaders);
  46. localStorage.setItem('leaderBoard', JSON.stringify(leaderBoard));
  47. }
  48. const reset = () => {
  49. button.disabled = false;
  50. score = 0;
  51. scoreEl.innerHTML = score;
  52. clearInterval(interval);
  53. hideMoles();
  54. }
  55. const showLeaderBoard = () => {
  56. boardEl.style.display = 'block';
  57. document.querySelector(".overlay").style.display = "block";
  58. let leaderBoard = JSON.parse(localStorage.getItem('leaderBoard')) || [];
  59. let str = '<table style="padding: 20px"><tr><th>Name</th><th>Score</th></tr>';
  60. for (let user of leaderBoard) {
  61. str += `<tr><td>${user.userName}</td><td>${user.score}</td></tr>`;
  62. }
  63. str += '</table><div style="text-align: center;"><button class="button close">CLOSE</button></div>';
  64. boardEl.innerHTML = str;
  65. document.querySelector(".close").addEventListener("click", closeLeaderBoard);
  66. }
  67. const closeLeaderBoard = () => {
  68. boardEl.style.display = 'none';
  69. document.querySelector(".overlay").style.display = "none";
  70. }
  71. const handleClick = (mole, i) => {
  72. if (mole.classList.contains("active")) {
  73. score += 10;
  74. scoreEl.innerHTML = score;
  75. mole.classList.remove("active");
  76. booms[i].classList.add("boom-for-mole");
  77. setTimeout(() => {
  78. booms[i].classList.remove("boom-for-mole");
  79. }, 300);
  80. }
  81. };
  82. moles.forEach((mole, i) => {
  83. mole.addEventListener("click", function () { handleClick(mole, i) });
  84. });