script.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. var board = [
  2. [null, null, null],
  3. [null, null, null],
  4. [null, null, null],
  5. ];
  6. var player = "X";
  7. var cpu = "O";
  8. var running = true;
  9. var ended = false;
  10. $(document).ready(function () {
  11. $("#selection-x").on("click", function () {
  12. if (!running) {
  13. player = "X";
  14. cpu = "O";
  15. $(this).removeClass("selected");
  16. $(this).addClass("selected");
  17. $("#selection-o").removeClass("selected");
  18. }
  19. });
  20. $("#selection-o").on("click", function () {
  21. console.log(running);
  22. if (!running) {
  23. player = "O";
  24. cpu = "X";
  25. $(this).removeClass("selected");
  26. $(this).addClass("selected");
  27. $("#selection-x").removeClass("selected");
  28. }
  29. });
  30. $("#restart").on("click", function () {
  31. if (!ended) {
  32. running = false;
  33. $("#state").text("State: Stopped");
  34. board = board.map(function (current, x) {
  35. return current.map(function (current2, y) {
  36. var $li = $("ul").find(
  37. "[data-x='" + x + "'][data-y='" + y + "']"
  38. );
  39. $li.text("");
  40. return (current2 = null);
  41. });
  42. });
  43. running = true;
  44. $("#state").text("State: Running");
  45. }
  46. });
  47. $(".spot").on("click", function () {
  48. if (running) {
  49. var $li = $(this);
  50. var x = parseInt($li.data("x"));
  51. var y = parseInt($li.data("y"));
  52. var $X = $('<i class="fa fa-times fa-5x"></i>');
  53. var $O = $('<i class="fa fa-circle-o fa-5x"></i>');
  54. if (board[x][y] === null) {
  55. board[x][y] = player;
  56. var $symbol = player === "X" ? $X : $O;
  57. $symbol.appendTo($li);
  58. if (!check()) {
  59. bot();
  60. } else {
  61. endGame();
  62. }
  63. }
  64. }
  65. });
  66. });
  67. function endGame() {
  68. running = false;
  69. $("#state").text("State: Stopped");
  70. ended = true;
  71. $(".spot").css({
  72. color: "purple",
  73. });
  74. setTimeout(function () {
  75. board = board.map(function (current, x) {
  76. return current.map(function (current2, y) {
  77. var $li = $("ul").find(
  78. "[data-x='" + x + "'][data-y='" + y + "']"
  79. );
  80. $li.text("");
  81. return (current2 = null);
  82. });
  83. });
  84. running = true;
  85. $("#state").text("State: Running");
  86. $(".spot").removeAttr("style");
  87. ended = false;
  88. }, 5000);
  89. }
  90. function bot() {
  91. var X = Math.floor(Math.random() * 3);
  92. var Y = Math.floor(Math.random() * 3);
  93. if (board[X][Y] !== null) {
  94. bot();
  95. } else {
  96. board[X][Y] = cpu;
  97. var $li = $("ul").find("[data-x='" + X + "'][data-y='" + Y + "']");
  98. var $X = $('<i class="fa fa-times fa-5x"></i>');
  99. var $O = $('<i class="fa fa-circle-o fa-5x"></i>');
  100. var $symbol = cpu === "X" ? $X : $O;
  101. $symbol.appendTo($li);
  102. if (check()) {
  103. endGame();
  104. }
  105. }
  106. }
  107. function check() {
  108. var boardFull = true;
  109. for (var i = 0; i < board.length; i++) {
  110. if (board[i].indexOf(null) > -1) {
  111. boardFull = false;
  112. }
  113. if (
  114. board[i][0] !== null &&
  115. board[i][0] === board[i][1] &&
  116. board[i][1] === board[i][2]
  117. ) {
  118. return true;
  119. }
  120. if (
  121. board[0][i] !== null &&
  122. board[0][i] === board[1][i] &&
  123. board[1][i] === board[2][i]
  124. ) {
  125. return true;
  126. }
  127. }
  128. if (
  129. board[0][0] !== null &&
  130. board[0][0] === board[1][1] &&
  131. board[1][1] === board[2][2]
  132. ) {
  133. return true;
  134. }
  135. if (
  136. board[0][2] !== null &&
  137. board[0][2] === board[1][1] &&
  138. board[1][1] === board[2][0]
  139. ) {
  140. return true;
  141. }
  142. return boardFull;
  143. }