Guest User

Untitled

a guest
Jan 16th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.04 KB | None | 0 0
  1. // retrieve game state from json, and append a clickable tic tac toe table
  2. $.getJSON('asset/json/tictactoe.json',
  3. function(data)
  4. {
  5. // add a table to the grid (3x3)
  6. $("#grid").append('<table/>');
  7. var table = $("#grid").find("table");
  8. for (var i=0; i<data.length; ++i)
  9. {
  10. // add a row in the table
  11. $(table).append('<tr/>');
  12. for (var j=0; j<data[i].length; ++j)
  13. {
  14. var row = $(table).children()[i];
  15. $(row).append('<td/>');
  16. var td = $(row).children()[j];
  17.  
  18. // add the 2D grid from JSON object
  19. $(td).html(data[i][j]);
  20.  
  21. // add id to attribute
  22. //this is used to assist in checking game state for the end of the game
  23. $(td).attr("id","b"+i+j);
  24.  
  25. // add hover feature to table buttons
  26. $(td).hover(function() { $(this).toggleClass("hovered"); });
  27.  
  28. // make table buttons clickable
  29. $(td).click(
  30. function()
  31. {
  32. var X = "&nbsp;X&nbsp;"; var O = "&nbsp;O&nbsp;"; var V = "&nbsp;&nbsp;&nbsp;"; var D = "DRAW!";
  33. if (($("#winner").html() == X) || ($("#winner").html() == O) || ($("#winner").html() == D))
  34. {
  35. window.alert('game is complete.');
  36. return true;
  37. }
  38. if ($(this).html() != V)
  39. {
  40. window.alert('square is occupied.');
  41. return false;
  42. }
  43. var turn = $("#turn").html();
  44. $(this).html(turn);
  45. turn = (turn == O) ? X : O;
  46. $("#turn").html(turn);
  47. $(this).toggleClass("pushed");
  48. $("#winner").trigger("click");
  49. }
  50. );
  51. }
  52. }
  53. }
  54. );
  55.  
  56. // check game state when trigger or if user clicks the winner box
  57. $("#winner").click(
  58. function() {
  59.  
  60. // initialize variables
  61. var board = [[[],[],[]],[[],[],[]],[[],[],[]]];
  62. var X = "&nbsp;X&nbsp;"; var O = "&nbsp;O&nbsp;"; var V = "&nbsp;&nbsp;&nbsp;"; var D = "DRAW!";
  63.  
  64. // if there is already a winner, or it is drawn, then do not bother
  65. if (($("#winner").html() == X) || ($("#winner").html() == O) || ($("#winner").html() == D)) return true;
  66.  
  67. // retrieve board from td's. could be done by grabbing #grid
  68. var occupied = 0;
  69. for (var i=0; i<board.length; ++i)
  70. for (var j=0; j<board[i].length; ++j)
  71. board[i][j] = $("#"+"b"+i+j).html();
  72.  
  73. var winner = V;
  74.  
  75. // check for non-diagonal wins
  76. for (var i=0; i<board.length; ++i)
  77. {
  78. // horizontally
  79. if (((board[i][0] == X) || (board[i][0] == O)) && ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2])))
  80. {
  81. winner = board[i][0];
  82. break;
  83. }
  84.  
  85. // vertically
  86. if (((board[0][i] == X) || (board[0][i] == O)) && (board[0][i] == board[1][i]) && (board[1][i] == board[2][i]))
  87. {
  88. winner = board[0][i];
  89. break;
  90. }
  91. }
  92.  
  93. // if no winner yet
  94. if (winner == V)
  95. {
  96.  
  97. // check for diagonal wins
  98. if ((board[0][0] == X) || (board[0][0] == O))
  99. if ((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]))
  100. winner = board[0][0];
  101. if ((board[0][2] == X) || (board[0][2] == O))
  102. if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]))
  103. winner = board[0][2];
  104.  
  105. }
  106.  
  107. // is there a winner?
  108. if (winner != V)
  109. {
  110. $("#turn").html("Game Over");
  111. $("#winner").html(winner);
  112. return true;
  113. }
  114.  
  115. // count how many suqares are occupied
  116. var occupied = 0;
  117. for (var i=0; i<board.length; ++i)
  118. for (var j=0; j<board[i].length; ++j)
  119. if ((board[i][j] == X) || (board[i][j] == O)) ++occupied;
  120.  
  121. // is the game drawn?
  122. if (occupied >= 9)
  123. {
  124. $("#turn").html("Game Over");
  125. $("#winner").html(D);
  126. return true;
  127. }
  128. }
  129. );
  130.  
  131. <!doctype html>
  132. <html>
  133. <head>
  134. <link rel="stylesheet" href="asset/css/tictactoe.css">
  135. </head>
  136. <body>
  137. <div id="grid"><!-- tic-tac-toe board is populated here -->
  138. </div>
  139. <div id="game">
  140. <table>
  141. <tr>
  142. <td>Turn: </td><td id="turn">&nbsp;X&nbsp;</td>
  143. </tr>
  144. <tr>
  145. <td>Winner: </td><td id="winner">&nbsp;&nbsp;&nbsp;</td>
  146. </tr>
  147. </table>
  148. </div>
  149. <!--
  150. <div>
  151. <textarea id="debug" rows="10" cols="50"></textarea>
  152. </div>
  153. -->
  154. <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
  155. <script type="text/javascript" src="asset/js/jquery-3.2.1.min.js"></script>
  156. <script type="text/javascript" src="asset/js/tictactoe.js"></script>
  157. </body>
  158. </html>
  159.  
  160. #grid table {
  161. border-spacing: 3px;
  162. }
  163.  
  164. #grid table > tr > td {
  165. border-color: #92A5BD;
  166. border-width: 3px;
  167. border-style: outset;
  168. padding: 3px;
  169. font-family: Verdana, Arial, Helvetica, sans-serif;
  170. font-size: 16px;
  171. text-align: center;
  172. cursor: pointer;
  173. }
  174.  
  175. #grid table > tr > td.hovered {
  176. border-style: inset; /* button appearance w/ border style */
  177. background-color: #F99;
  178. }
  179.  
  180. #grid table > tr > td.pushed {
  181. border-style: outset; /* button appearance w/ border style */
  182. background-color: #999;
  183. }
  184.  
  185. var board = [[[],[],[]],[[],[],[]],[[],[],[]]];
Add Comment
Please, Sign In to add comment