Advertisement
Guest User

Tic Tac Toe Simple

a guest
May 22nd, 2012
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <html>
  2. <head>
  3. <!--
  4. This file retrieved from the JS-Examples archives
  5. http://www.js-examples.com
  6. 1000s of free ready to use scripts, tutorials, forums.
  7. Author: JS-Examples - http://www.js-examples.com/
  8. -->
  9.  
  10. </head>
  11. <body>
  12. <script>
  13. var _url = document.location.toString().split("?");
  14. var _parm = _url[1]?_url[1]:"";
  15. var _P0n = "";
  16. var _P0v = 0;
  17. var _P1n = "";
  18. var _P1v = 0;
  19. if (_parm != "") {
  20.   _P0n=_parm.split("&")[0].split("=")[0].toLowerCase();
  21.   _P0v=parseInt(_parm.split("&")[0].split("=")[1]);
  22.   if(_parm.split("&")[1]) {
  23.     _P1n = _parm.split("&")[1].split("=")[0].toLowerCase();
  24.     _P1v = parseInt(_parm.split("&")[1].split("=")[1]);
  25.   } else {
  26.     _P1n ="";
  27.   }
  28. } else {
  29.   _P0n="";
  30.   _P1n="";
  31. }
  32.  
  33. var MATRIX_SIZE   = 3;
  34. var AMOUNT_TO_WIN = 4;
  35. var PARAM_SIZE = "size".toLowerCase();
  36. var PARAM_WIN  = "win".toLowerCase();
  37. if (_P0n==PARAM_SIZE) {MATRIX_SIZE=_P0v;}
  38. if (_P1n==PARAM_SIZE) {MATRIX_SIZE=_P1v;}
  39. if (_P0n==PARAM_WIN) {AMOUNT_TO_WIN=_P0v;}
  40. if (_P1n==PARAM_WIN) {AMOUNT_TO_WIN=_P1v;}
  41.  
  42. //////////////////////////////
  43.  
  44. if(MATRIX_SIZE<3)MATRIX_SIZE=3;
  45. if(MATRIX_SIZE>10)MATRIX_SIZE=10;
  46. if(AMOUNT_TO_WIN>MATRIX_SIZE)AMOUNT_TO_WIN=MATRIX_SIZE;
  47. if(AMOUNT_TO_WIN<3)AMOUNT_TO_WIN=3;
  48.  
  49. document.write("<BR>"+AMOUNT_TO_WIN+" in a row wins!<BR>");
  50. var tbo = '';
  51.     tbo += '<form name=table1>';
  52.     tbo += '<table>';
  53.     for (var i=0;i<MATRIX_SIZE;i++) {
  54.       tbo += '<TR>';
  55.       for(var j=0;j<MATRIX_SIZE;j++) {
  56.         var _c = parseInt(i)*parseInt(MATRIX_SIZE)+parseInt(j);
  57.         tbo += '<td><input name=s'+_c+' type=text size=1 value=" " onfocus="clicked(table1.s'+_c+');blur()"></td>';
  58.       }
  59.       tbo += '</tr>';
  60.     }
  61.     tbo += '</table>';
  62.     tbo += '<table><tr><td>Restart Game with: <input type=button value="Player is X" onclick=setPlayers("X","O")></td>';
  63.     tbo += '<td><input type=button value="Computer is X" onclick=setPlayers("O","X")></td></tr>';
  64.     tbo += '<tr><td>Player is: <input name=pis type=text size=1 value="X" onfocus=blur()></td>';
  65.     tbo += '<td>Computer is: <input name=cis type=text size=1 value="O" onfocus=blur()></td></tr>';
  66.     tbo += '</table>';
  67.     tbo += '<table><tr><td>Won: <input type=text value="0" name=gameswon size=2></td>';
  68.     tbo += '<td>Ties: <input type=text value="0" name=gamestied size=2></td>';
  69.     tbo += '<td>Lost: <input type=text value="0" name=gameslost size=2></td></tr></table>';
  70.     tbo += 'Set Matrix Size: ';
  71.     var XX="";
  72.     for(var i=3;i<11;i++) {
  73.       if(i==MATRIX_SIZE) {
  74.         tbo += ' '+i+'x'+j+' ';
  75.       } else {
  76.         tbo += '<input type=button value="'+i+'x'+i+'"';
  77.         XX =_url[0]+"?"+PARAM_SIZE+'='+i+"&"+PARAM_WIN+'='+AMOUNT_TO_WIN;
  78.         tbo += ' onclick="document.location=\''+XX+'\'">&nbsp;';
  79.       }
  80.     }
  81.     tbo += '<BR>Amount In a Row Wins: ';
  82.     for(var i=3;i<11;i++) {
  83.       if(i==AMOUNT_TO_WIN) {
  84.         tbo += ' '+i+' ';
  85.       } else {
  86.         tbo += '<input type=button value='+i+' ';
  87.         XX = _url[0]+"?"+PARAM_SIZE+'='+MATRIX_SIZE+'&'+PARAM_WIN+'='+i;
  88.         tbo += ' onclick="document.location=\''+XX+'\'">&nbsp;';
  89.       }
  90.     }
  91.     tbo += '</form>';
  92. document.write(tbo);
  93. /////////////////////////////////////////////
  94.  
  95. var PLAYER="X";
  96. var COMPUTER="O";
  97. var BLANK=" ";
  98. var ROWS = new Array();
  99. var COLS = new Array();
  100. var DIAG = new Array();
  101.  
  102. DIAG[0]=new Array();
  103. DIAG[1]=new Array();
  104. for(var _i=0;_i<MATRIX_SIZE;_i++) {
  105.   DIAG[0][_i]=_i*MATRIX_SIZE+_i;
  106.   DIAG[1][_i]=(MATRIX_SIZE-1)*(_i+1);
  107. }
  108. for (var i=1;i<=(MATRIX_SIZE-AMOUNT_TO_WIN);i++) {
  109.   var n=2+((i-1)*4);
  110.   DIAG[n+0]=new Array();
  111.   DIAG[n+1]=new Array();
  112.   DIAG[n+2]=new Array();
  113.   DIAG[n+3]=new Array();
  114.   for (var j=1;j<=(MATRIX_SIZE-i);j++) {
  115.     DIAG[n+0][j-1]=(MATRIX_SIZE+1)*(j-1)+i;
  116.     DIAG[n+1][j-1]=(MATRIX_SIZE+1)*(j-1)+(i*MATRIX_SIZE);
  117.     DIAG[n+2][j-1]=(MATRIX_SIZE-1)*(j)-i;
  118.     DIAG[n+3][j-1]=DIAG[n+2][j-1]+(MATRIX_SIZE+1)*(i);
  119.   }
  120. }
  121.  
  122. for(var i=0;i<MATRIX_SIZE;i++) {
  123.   ROWS[i]=new Array();
  124.   COLS[i]=new Array();
  125.   for (var j=0;j<MATRIX_SIZE;j++) {
  126.     ROWS[i][j]=i*MATRIX_SIZE+j;
  127.     COLS[i][j]=i+j*MATRIX_SIZE;
  128.   }
  129. }
  130.  
  131. //////////////////////////////
  132.  
  133. function setPlayers(_p,_c) {
  134.   PLAYER=document.table1.pis.value=_p;
  135.   COMPUTER=document.table1.cis.value=_c;
  136.   resetBoard();
  137.   if(COMPUTER=="X") {
  138.     computerMove();
  139.   }
  140. }
  141.  
  142. var GAMEOVER = false;
  143.  
  144. function clicked(_s) {
  145.   if(_s.value!=BLANK || GAMEOVER) return;
  146.   _s.value=PLAYER;
  147.   postMoveLogic();
  148.   computerMove();
  149. }
  150.  
  151. function postMoveLogic() {
  152.   var _status = gameOver();
  153.   if (_status == BLANK) { document.table1.gamestied.value++;GAMEOVER=true; }
  154.   if (_status == PLAYER) { document.table1.gameswon.value++;GAMEOVER=true; }
  155.   if (_status == COMPUTER) { document.table1.gameslost.value++;GAMEOVER=true; }
  156. }
  157.  
  158. function resetBoard() {
  159.   for (var i=0;i<MATRIX_SIZE;i++) {
  160.     for (var j=0;j<MATRIX_SIZE;j++) {
  161.       var _a = parseInt(i)*parseInt(MATRIX_SIZE)+parseInt(j);
  162.       eval("document.table1.s"+_a+".value=BLANK");
  163.     }
  164.   }
  165.   GAMEOVER=false;
  166. }
  167.  
  168. function gameOver() {
  169.   var _ret = -1;
  170.   var spotsTaken=true;
  171.   for (var i=0;i<MATRIX_SIZE;i++) {
  172.     for (var j=0;j<MATRIX_SIZE;j++) {
  173.       var _a = parseInt(i)*parseInt(MATRIX_SIZE)+parseInt(j);
  174.       var _b = eval("document.table1.s"+_a+".value");
  175.       eval("var _s"+_a+"='"+_b+"'");
  176.       if(eval("_s"+_a)==BLANK) {
  177.         spotsTaken=false;
  178.       }
  179.     }
  180.   }
  181.  
  182.   if(spotsTaken) return (BLANK);
  183.   for(var i=0;i<MATRIX_SIZE;i++) {
  184.     if (AmountInARow(ROWS[i])) return (whoHasWon);
  185.     if (AmountInARow(COLS[i])) return (whoHasWon);
  186.   }
  187.   for(var i=0;i<DIAG.length;i++) {
  188.     if(AmountInARow(DIAG[i])) return (whoHasWon);
  189.   }
  190.   return (_ret);
  191. }
  192.  
  193. function allTheseMatch(_v) {
  194.   var _ret = true;
  195.   for(var i=1;i<_v.length;i++) {
  196.     var _a=eval("document.table1.s"+_v[i-1]+".value");
  197.     var _b=eval("document.table1.s"+_v[i]+".value");
  198.     if (_a != _b) _ret = false;
  199.   }
  200.   return (_ret);
  201. }
  202.  
  203. var OneAwaySpot=-1;
  204.  
  205. function oneFromWin(_who,_a) {
  206.   for(var i=0;i<(_a.length-AMOUNT_TO_WIN+1);i++) {
  207.     var _newA = new Array();
  208.     for (var j=0;j<AMOUNT_TO_WIN;j++) {
  209.       _newA[j]=_a[i+j];
  210.     }
  211.     if(oneAway(_who,_newA)) {return true;}
  212.   }
  213. }
  214.  
  215. var whoHasWon=-1;
  216. function AmountInARow(_a) {
  217.   whoHasWon=-1;
  218.   for(var i=0;i<(_a.length-AMOUNT_TO_WIN+1);i++) {
  219.     var _newA = new Array();
  220.     for (j=0;j<AMOUNT_TO_WIN;j++) {
  221.       var _TEMP = parseInt(i)+parseInt(j);
  222.       _newA[j]=eval("document.table1.s"+_a[_TEMP]+".value");
  223.     }
  224.     if (_newA[0]!=BLANK && arrayIsEqual(_newA)) {
  225.       whoHasWon = _newA[0];
  226.       return true;
  227.     }
  228.   }
  229.   return false;
  230. }
  231.  
  232. function oneAway(_who,_a) {
  233.   OneAwaySpot=-1;
  234.   var _ret = false;
  235.   var _aTemp = new Array();
  236.   for (var i=0;i<_a.length;i++) {
  237.     var _y = eval("document.table1.s"+_a[i]+".value");
  238.     if (_y !=BLANK) {
  239.       _aTemp[_aTemp.length?_aTemp.length:0]=_a[i];
  240.     } else {
  241.       OneAwaySpot = _a[i];
  242.     }
  243.   }
  244.   if (_aTemp.length && _aTemp.length == _a.length-1) {
  245.     _ret = true;
  246.     var _latchValue = eval("document.table1.s"+_aTemp[0]+".value");
  247.     for (var i=1;i<_aTemp.length;i++) {
  248.       var _y = eval("document.table1.s"+_aTemp[i]+".value");
  249.       if(_latchValue != _y || _y != _who) {
  250.         _ret = false;
  251.       }
  252.     }
  253.   }
  254.   return (_ret);
  255. }
  256.  
  257. function determineComputerMove() {
  258.   var firstMove=true;
  259.   for(var i=0;i<MATRIX_SIZE;i++) {
  260.     for (var j=0;j<MATRIX_SIZE;j++) {
  261.       var _a=parseInt(i)*parseInt(MATRIX_SIZE)+parseInt(j);
  262.       var _b=eval("document.table1.s"+_a+".value");
  263.       eval("var _s"+_a+"='"+_b+"'");
  264.       if(eval("_s"+_a) !=BLANK)
  265.         firstMove = false;
  266.     }
  267.   }
  268.   if (firstMove && (MATRIX_SIZE%2==1)) return (MATRIX_SIZE*MATRIX_SIZE-1)/2;
  269.   for(var i=0;i<MATRIX_SIZE;i++) {
  270.     if(oneFromWin(COMPUTER,ROWS[i])) return (OneAwaySpot);
  271.     if(oneFromWin(COMPUTER,COLS[i])) return (OneAwaySpot);
  272.   }
  273.   for(var i=0;i<DIAG.length;i++) {
  274.     if(oneFromWin(COMPUTER,DIAG[i])) return (OneAwaySpot);
  275.   }
  276.   for(var i=0;i<MATRIX_SIZE;i++) {
  277.     if(oneFromWin(PLAYER,ROWS[i])) return (OneAwaySpot);
  278.     if(oneFromWin(PLAYER,COLS[i])) return (OneAwaySpot);
  279.   }
  280.   for(var i=0;i<DIAG.length;i++) {
  281.     if(oneFromWin(PLAYER,DIAG[i])) return (OneAwaySpot);
  282.   }
  283.   var _spot = Math.round(Math.random()*(MATRIX_SIZE*MATRIX_SIZE-1));
  284.   while(eval("_s"+_spot) !=BLANK) {
  285.     _spot=(++_spot)%(MATRIX_SIZE*MATRIX_SIZE);
  286.   }
  287.   return (_spot);
  288. }
  289.  
  290. function computerMove() {
  291.   if(GAMEOVER) return;
  292.   var _spot = determineComputerMove();
  293.   eval("document.table1.s"+_spot+".value=COMPUTER");
  294.   postMoveLogic();
  295. }
  296.  
  297. function arrayIsEqual(_a) {
  298.   var _first=_a[0];
  299.   for(var i=1;i<_a.length;i++) {
  300.     if(_first != _a[i]) { return false; }
  301.   }
  302.   return true;
  303. }
  304.  
  305. function isEqual() {
  306.   var _ret = true;
  307.   for(var i=1;i<arguments.length;i++) {
  308.     if(arguments[i-1]!=arguments[i]) _ret = false;
  309.   }
  310.   return (_ret);
  311. }
  312.  
  313. </script>
  314. <BR>
  315. <a href="http://www.js-examples.com/">JS-Examples</a>
  316.  
  317. <BR><center><a href='http://www.js-examples.com'>JS-Examples.com</a></center>
  318. </body>
  319. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement