Advertisement
Guest User

Untitled

a guest
Jul 2nd, 2016
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.44 KB | None | 0 0
  1. <!--TicTacToe by Maruthi Ayyappan-->
  2. <html>
  3. <head><title></title></head>
  4. <!--Calling the below function-->
  5. <body onload="javascript: drawboard();">
  6. <canvas width="425" height="425" id="board" onclick="javascript: handleclick(event);"></canvas>
  7. <script>
  8.  
  9. var boardX = 0;
  10. var boardO = 0;
  11. var begin = true;
  12. var content;
  13. var width, height;
  14.  
  15. <!--Overview of the Board-->
  16.  
  17. function drawboard() {
  18. var board = document.getElementById('board');
  19.  
  20. width = board.width;
  21. height = board.height;
  22. content = board.getContext('2d');
  23.  
  24. content.beginPath();
  25. content.strokeStyle = '#362626';
  26. content.lineWidth = 3;
  27.  
  28. content.moveTo((width / 3), 0);
  29. content.lineTo((width / 3), height);
  30.  
  31. content.moveTo((width / 3) * 2, 0);
  32. content.lineTo((width / 3) * 2, height);
  33.  
  34. content.moveTo(0, (height / 3));
  35. content.lineTo(width, (height / 3));
  36.  
  37. content.moveTo(0, (height / 3) * 2);
  38. content.lineTo(width, (height / 3) * 2);
  39.  
  40. content.stroke();
  41. content.closePath();
  42.  
  43. <!--Random Start for 'X' or 'O'-->
  44.  
  45. if (begin) {
  46. var init = Math.abs(Math.floor(Math.random() * 9 - 0.1));
  47. markBit(1 << init, 'O');
  48. begin = false;
  49. } else {
  50. begin = true;
  51. }
  52. }
  53.  
  54. <!--Check winner 'X' or 'O'-->
  55.  
  56. function wincheck(board) {
  57.  
  58. var result = false;
  59.  
  60. if (((board | 0x1C0) == board) || ((board | 0x38 ) == board) ||
  61. ((board | 0x7) == board) || ((board | 0x124) == board) ||
  62. ((board | 0x92) == board) || ((board | 0x49) == board) ||
  63. ((board | 0x111) == board) || ((board | 0x54) == board)) {
  64.  
  65. result = true;
  66. }
  67. return result;
  68. }
  69.  
  70. <!--Print 'X' in the box-->
  71.  
  72. function paintX(x, y) {
  73.  
  74. content.beginPath();
  75.  
  76. content.strokeStyle = '#f40d0d';
  77. content.lineWidth = 3;
  78.  
  79. var Xoffset = (width / 3) * 0.1;
  80. var Yoffset = (height / 3) * 0.1;
  81.  
  82. var beginX = x * (width / 3) + Xoffset;
  83. var beginY = y * (height / 3) + Yoffset;
  84.  
  85. var endX = (x + 1) * (width / 3) - Xoffset * 2;
  86. var endY = (y + 1) * (height / 3) - Yoffset * 2;
  87.  
  88. content.moveTo(beginX, beginY);
  89. content.lineTo(endX, endY);
  90.  
  91. content.moveTo(beginX, endY);
  92. content.lineTo(endX, beginY);
  93.  
  94. content.stroke();
  95. content.closePath();
  96. }
  97.  
  98. <!--Print 'O' in the box-->
  99.  
  100. function paintO(x, y) {
  101.  
  102. content.beginPath();
  103.  
  104. content.strokeStyle = '#0303db';
  105. content.lineWidth = 3;
  106.  
  107. var Xoffset = (width / 3) * 0.1;
  108. var Yoffset = (height / 3) * 0.1;
  109.  
  110. var beginX = x * (width / 3) + Xoffset;
  111. var beginY = y * (height / 3) + Yoffset;
  112.  
  113. var endX = (x + 1) * (width / 3) - Xoffset * 2;
  114. var endY = (y + 1) * (height / 3) - Yoffset * 2;
  115.  
  116. content.arc(beginX + ((endX - beginX) / 2), beginY + ((endY - beginY) / 2), (endX - beginX) / 2 , 0, Math.PI * 2, true);
  117.  
  118. content.stroke();
  119. content.closePath();
  120. }
  121.  
  122. <!--Alternate 'X" and 'O' for UI-->
  123.  
  124. function handleclick(e) {
  125.  
  126. var i = Math.floor(e.clientY / (height / 3));
  127. var j = Math.floor(e.clientX / (width/ 3));
  128.  
  129. var bit = (1 << j + ( i * 3 ));
  130.  
  131. if (isEmpty(boardX, boardO, bit)) {
  132.  
  133. markBit(bit, 'X')
  134.  
  135. if (!checkNobody()) {
  136. if (wincheck(boardX)) {
  137.  
  138. alert('You win!!');
  139. restart();
  140.  
  141. } else {
  142.  
  143. play();
  144. if (!checkNobody()) {
  145.  
  146. if (wincheck(boardO)) {
  147. alert('Loser!!');
  148. restart();
  149. }
  150. }
  151. }
  152. }
  153. }
  154. }
  155.  
  156. <!--Check Winner (draw game)-->
  157.  
  158. function checkNobody(){
  159. if ((boardX | boardO) == 0x1FF) {
  160. alert('Nobody won!!');
  161. restart();
  162. return true;
  163. }
  164. return false;
  165. }
  166.  
  167. function restart() {
  168. content.clearRect (0, 0, width , height);
  169. boardX = 0;
  170. boardO = 0;
  171. drawboard();
  172. }
  173.  
  174. function isEmpty(boardX, boardO, bit) {
  175. return (((boardX & bit) == 0) && ((boardO & bit) == 0));
  176. }
  177.  
  178. function simulate(boardO, boardX) {
  179.  
  180. var ratio = 0;
  181.  
  182. var bit = 0;
  183. for (var i= 0; i < 9; i++) {
  184.  
  185. var cBit = 1 << i;
  186.  
  187. if (isEmpty(boardX, boardO, cBit)) {
  188.  
  189. if (wincheck(boardO | cBit)) {
  190. bit = cBit;
  191. break;
  192. } else if (wincheck(boardX | cBit)) {
  193. bit = cBit;
  194. }
  195. }
  196. }
  197.  
  198. if (bit == 0) {
  199. for (var i= 0; i < 9; i++) {
  200. var cBit = 1 << i;
  201.  
  202. if (isEmpty(boardX, boardO, cBit)) {
  203. var result = think(boardO, boardX, 'X', 0, 1)
  204. if (ratio == 0 || ratio < result) {
  205. ratio = result;
  206. bit = cBit;
  207. }
  208. }
  209. }
  210. }
  211. return bit;
  212. }
  213.  
  214. <!-- Try to stop three 'X' or 'O' -->
  215.  
  216.  
  217. function think(boardO, boardX, player, bit, ratio) {
  218.  
  219. if (player == 'O') {
  220. boardO = boardO | bit;
  221. } else {
  222. boardX = boardX | bit;
  223. }
  224.  
  225. if (wincheck(boardO)) {
  226. ratio *= 1.1;
  227. return ratio;
  228.  
  229. } else if (wincheck(boardX)) {
  230.  
  231. ratio *= 0.7;
  232. return ratio;
  233.  
  234. } else {
  235. var best = 0;
  236. ratio *= 0.6;
  237.  
  238. for (var j= 0; j < 9; j++) {
  239.  
  240. if (isEmpty(boardX, boardO, 1 << j)) {
  241.  
  242. var newRatio = think(boardO, boardX, player == 'O' ? 'X' : 'O', 1 << j, ratio);
  243.  
  244. if (best == 0 || best < newRatio) {
  245. best = newRatio;
  246. }
  247. }
  248. }
  249.  
  250. return best;
  251. }
  252. }
  253.  
  254. function markBit(markBit, player) {
  255.  
  256. var bit = 1;
  257. var Xpos = 0, Ypos = 0;
  258.  
  259. while ((markBit & bit) == 0) {
  260. bit = bit << 1;
  261. Xpos++;
  262. if (Xpos > 2) {
  263. Xpos = 0;
  264. Ypos++;
  265. }
  266. }
  267.  
  268. if (player == 'O') {
  269. boardO = boardO | bit;
  270. paintO(Xpos, Ypos);
  271. } else {
  272. boardX = boardX | bit;
  273. paintX(Xpos, Ypos);
  274. }
  275. }
  276.  
  277. function play() {
  278. var bestBit = simulate(boardO, boardX);
  279. markBit(bestBit, 'O');
  280.  
  281. }
  282. </script>
  283. </body>
  284. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement