Page Components JavaScript DHTML


Tic Tac Toe


.main{background:#FFFFFF; border:#000000 solid 1px; width:400px}
.header{background:#000000; width:100%}
.ip{border:#000000 solid 1px; width:50px; height:20px}
.btn{border:#000000 solid 1px; font-weight:bold; height:20px; cursor:hand}
.content_cpy{font-family:verdana,arial,helvetica; font-size:8pt; color:#FFFFFF}
.link{font-family:verdana,arial,helvetica; font-size:8pt; color:#FFFFFF}
.link:hover{font-family:verdana,arial,helvetica; font-size:8pt; color:#99FF00}
.nav{font-family:verdana,arial; font-size:8pt; font-weight:bold; 
     border-right:#000000 solid 2px; border-left:#000000 solid 1px; 
     border-bottom:#000000 solid 2px; border-top:#000000 solid 1px; 
     background:#FFFFFF; height:20px; cursor:hand}
.nav_over{font-family:verdana,arial; font-size:8pt; font-weight:bold; 
          border-right:#000000 solid 1px; border-left:#000000 solid 2px; 
          border-bottom:#000000 solid 1px; border-top:#000000 solid 2px; 
          background:#FFFFFF; height:20px; cursor:hand}






  Play Game!
  About
  How it Works!







/////////////////////////////////////////////////////////////////
//
//  Tic-Tac-Toe JavaScript
//  By Premshree Pillai
//  Created : 04/10/02 (dd/mm/yy)
//  Web : http://www.qiksearch.com
//        http://javascript.qik.cjb.net
//  E-mail : qiksearch@rediffmail.com
//     jsfx@rediffmail.com
//  
//  Like the script ?
//  Sign my Guestbook :
//  - http://pub.alxnet.com/guestbook?id=2395118
//
//  Use freely as long as all credits are reatained
//  and all contents are as it is.
//
//  CopyRight 2002 Premshree Pillai. All rights reserved.
//  Do not modify anything below this!
//
/////////////////////////////////////////////////////////////////
/* Global Variables */
/////////////////////////////////////////////////////////////////
var playerToken="1";
var myToken="0";
var MAXSIZE=100;
var _def_size=60;
var _def_bg_color="#000000";
var _def_color="#FFFFFF";
var _def_exit_msg='
';
var isEmptyArr=new Array(MAXSIZE);
for(var i=0; i  isEmptyArr[i]=true;
var drawCounter=0;
/* Arrays for testing */
var rowArr=new Array();
for(var i=0; i<=MAXSIZE; i++)
  rowArr[i]=0;
var colArr=new Array();
for(var i=0; i<=MAXSIZE; i++)
  colArr[i]=0;
var digArr=new Array();
for(var i=0; i<=MAXSIZE; i++)
  digArr[i]=-1;
var lostFlag=false;
var meFirst=false;
/////////////////////////////////////////////////////////////////
/* Reset Global Variables */
function flush()
{
  isEmptyArr=new Array(MAXSIZE);
  for(var i=0; i    isEmptyArr[i]=true;
  rowArr=new Array();
  for(var i=0; i<=MAXSIZE; i++)
    rowArr[i]=0;
  colArr=new Array();
  for(var i=0; i<=MAXSIZE; i++)
    colArr[i]=0;
  digArr=new Array();
  for(var i=0; i<=MAXSIZE; i++)
    digArr[i]=-1;
  drawCounter=0;
  lostFlag=false;
}
/* Generate the Board */
function genBox(size,where)
{
  var count=0;
  var retVal='
';
  for(var i=0; i  {
    retVal+='
';
    for(var j=0; j    {
      count++;
      var id=new String('id'+count);
      retVal+='';
    }
    retVal+='
';
  }
  retVal+='
';
  document.getElementById(where).innerHTML=retVal;
  if(isNaN(size))
  {
    alert("Please enter a valid number!");
    document.getElementById(where).innerHTML=_def_exit_msg;
  }
}
/* Insert Token */
function insert(what,id,size)
{
  var ids=id.split("id");
  if(isEmpty(id))
  {
    drawCounter++;
    document.getElementById(id).innerHTML=what;
    isEmptyArr[ids[1]]=false;
    if(what==playerToken)
      if((!playerWin(size))&&(!checkWin(size)))
        move(size);
  }
  else
    alert('You cannot insert here!');
  if((drawCounter==size*size)&&!lostFlag)
  {
    if((!checkWin(size))&&(!playerWin(size)))
    {
      alert('It\'s a Draw!!!');
      if(confirm("Do you want to play again ?"))
      {
        flush();
        resolveMove(size);
      }
      else
        document.getElementById('container').innerHTML=_def_exit_msg;
    }
  }
}
/* Computer's Move! */
function move(size)
{
  var count=0;
  var maxCount=0;
  /* Building the Row Array */
  for(var i=1; i<=size; i++)
  {
    maxCount=0;
    for(var j=1; j<=size; j++)
    {
      count++;
      var id=new String('id'+count);
      if(!isEmpty(id))
        if(document.getElementById(id).innerHTML==playerToken)
          maxCount++;
    }
    rowArr[i]=maxCount;
  }
  /* Building the Column Array */
  for(var i=1; i<=size; i++)
  {
    count=i;
    maxCount=0;
    for(var j=1; j<=size; j++)
    {
      var id=new String('id'+count);
      if(!isEmpty(id))
      {
        if(document.getElementById(id).innerHTML==playerToken)
          maxCount++;
      }
      count+=size;
    }
    colArr[i]=maxCount;
  }
  /* Building the Diagonal Array */
  for(var i=1; i<=2; i++)
  {
    if(i==1)
      count=i;
    else
      count=size;
    maxCount=0;
    for(var j=1; j<=size; j++)
    {
      var id=new String('id'+count);
      if(!isEmpty(id))
      {
        if(document.getElementById(id).innerHTML==playerToken)
          maxCount++;
      }
      if(i==1)
        count+=size+1;
      else
        count+=size-1;
    }
    digArr[i]=maxCount;
  }
  /* Finding max values */
  var maxRow=max(rowArr,0,size,"row");
  var maxCol=max(colArr,0,size,"col");
  var maxDig=max(digArr,0,size,"dig");
  var maxArrs=new Array(-1,max(rowArr,1,size,"row"),max(colArr,1,size,"col"),max(digArr,1,size,"dig"));
  if(max(maxArrs,0,size,"x")==1)
    count=size*maxRow-size+1;
  if(max(maxArrs,0,size,"x")==2)
    count=maxCol;
  if(max(maxArrs,0,size,"x")==3)
  {
    if(maxDig==1)
      count=maxDig;
    else
      count=size;
  }
  if(!firstMove(size))
  {
    for(var i=1; i<=size; i++)
    {
      var id=new String('id'+count);
      if(isEmpty(id))
      {
        insert(myToken,id,size);
        break;
      }
      if(max(maxArrs,0,size,"x")==1)
        count++;
      if(max(maxArrs,0,size,"x")==2)
        count+=size;
      if(max(maxArrs,0,size,"x")==3)
      {
        if(maxDig==1)
          count+=size+1;
        else
          count+=size-1;
      }
    }
  }
  else
  {
    playFirst(size);
  }
  if(playerWin(size))
  {
    alert('WOW! You Won!!!');
    if(confirm("Do you want to play again ?"))
    {
      flush();
      resolveMove(size);
    }
    else
      document.getElementById('container').innerHTML=_def_exit_msg;
    lostFlag=true;
  }
  else
  {
    if(checkWin(size))
    {
      alert('OOPS! You lost!!!');
      if(confirm("Do you want to play again ?"))
      {
        flush();
        resolveMove(size);
      }
      else
        document.getElementById('container').innerHTML=_def_exit_msg;
      lostFlag=true;
    }
  }
}
function max(arr,what,size,type)
{
  var max=-1,maxIndex=-1;
  for(var i=1; i<=size; i++)
  {
    if(type=="x")
    {
      if(arr[i] > max)
      {
        max=arr[i];
        maxIndex=i;
      }
    }
    else
    {
      if(!isFull(type,i,size) && type!="dig")
      {
        if(arr[ i ] > max)
        {
          max=arr[i];
          maxIndex=i;
        }
      }
    }
  }
  if(type=="dig")
  {
    for(var i=1; i<=2; i++)
    {
      if(!isFull(type,i,size))
      {
        if(arr[i] > max)
        {
          max=arr[i];
          maxIndex=i;
        }
      }
    }
  }
  if(what==0)
    return(maxIndex);
  else
    return(max);
}
function isEmpty(who)
{
  who=who.split("id");
  return(isEmptyArr[who[1]]);
}
function isFull(type,num,size)
{
  var retVal,count=1;
  if(type=="row")
  {
    count=size*num-size+1;
    for(var i=1; i<=size; i++)
    {
      var id=new String('id'+count);
      if(isEmpty(id))
      {
        retVal=false;
        return false;
        break;
      }
      else
        retVal=true;
      count++;
    }
  }
  if(type=="col")
  {
    count=num;
    for(var i=1; i<=size; i++)
    {
      var id=new String('id'+count);
      if(isEmpty(id))
      {
        retVal=false
        return false;
        break;
      }
      else
        retVal=true;
      count+=size;
    }
  }
  if(type=="dig")
  {
    if(num==1)
      count=num;
    else
      count=size;
    for(var i=1; i<=size; i++)
    {
      var id=new String('id'+count);
      if(isEmpty(id))
      {
        retVal=false
        return false;
        break;
      }
      else
        retVal=true;
      if(num==1)
        count+=size+1;
      else
        count+=size-1;
    }
  }
  return(retVal);
}
function firstMove(size)
{
  var count=0;
  for(var i=1; i<=size*size; i++)
  {
    var id=new String('id'+i);
    if(!isEmpty(id))
      count++;
  }
  if(count<=1)
    return true;
  else
    return false;
}
function playFirst(size)
{
  if(size%2!=0)
  {
    var tempNum=Math.floor(size*size/2)+1;
    var id=new String('id'+tempNum);
    if(isEmpty(id))
      insert(myToken,id,size);
    else
    {
      tempNum+=size+1;
      id=new String('id'+tempNum);
      insert(myToken,id,size);
    }
  }
  else
  {
    var temp=max(digArr,0,size,"dig");
    if(temp==1)
      count=temp;
    else
      count=size;
    for(var i=1; i<=size; i++)
    {
      var id=new String('id'+count);
      if(isEmpty(id))
      {
        insert(myToken,id,size);
        break;
      }
      if(temp==1)
        count+=size+1;
      else
        count+=size-1;
    }
  }
}
function checkWin(size)
{
  var myRowArr=new Array();
  var myColArr=new Array();
  var myDigArr=new Array();
  var maxCount,count=0;
  /* Building My Row Array */
  for(var i=1; i<=size; i++)
  {
    maxCount=0;
    for(var j=1; j<=size; j++)
    {
      count++;
      var id=new String('id'+count);
      if(!isEmpty(id))
        if(document.getElementById(id).innerHTML==myToken)
          maxCount++;
    }
    myRowArr[i]=maxCount;
  }
  /* Building My Column Array */
  for(var i=1; i<=size; i++)
  {
    count=i;
    maxCount=0;
    for(var j=1; j<=size; j++)
    {
      var id=new String('id'+count);
      if(!isEmpty(id))
      {
        if(document.getElementById(id).innerHTML==myToken)
          maxCount++;
      }
      count+=size;
    }
    myColArr[i]=maxCount;
  }
  /* Building My Diagonal Array */
  for(var i=1; i<=2; i++)
  {
    if(i==1)
      count=i;
    else
      count=size;
    maxCount=0;
    for(var j=1; j<=size; j++)
    {
      var id=new String('id'+count);
      if(!isEmpty(id))
      {
        if(document.getElementById(id).innerHTML==myToken)
          maxCount++;
      }
      if(i==1)
        count+=size+1;
      else
        count+=size-1;
    }
    myDigArr[i]=maxCount;
  }
  var myMaxRow=myMax(myRowArr,0,size);
  var myMaxCol=myMax(myColArr,0,size);
  var myMaxDig=myMax(myDigArr,0,size);
  var myMaxArrs=new Array(-1,myMax(myRowArr,1,size),myMax(myColArr,1,size),myMax(myDigArr,1,size));
  if(myMax(myMaxArrs,1,size)==size)
  {
    var blinkWho=myMax(myMaxArrs,0,size);
    var blinkNum;
    if(blinkWho==1)
      blinkNum=myMaxRow;
    if(blinkWho==2)
      blinkNum=myMaxCol;
    if(blinkWho==3)
      blinkNum=myMaxDig;
    blink(blinkWho,blinkNum,size,"#FF0000");
    return true;
  }
  else
    return false;
}
function myMax(arr,what,size)
{
  var max=-1,maxIndex=-1;
  for(var i=1; i<=size; i++)
  {
    if(arr[i] > max)
    {
      max=arr[i];
      maxIndex=i;
    }
  }
  if(what==0)
    return(maxIndex);
  else
    return(max);
}
function blink(who,num,size,color)
{
  var count;
  if(who==1)
    count=size*num-size+1;
  if(who==2)
    count=num;
  if(who==3)
  {
    if(num==1)
      count=num;
    else
      count=size;
  }
  for(var i=1; i<=size; i++)
  {
    var id=new String('id'+count);
    document.getElementById(id).style.color=color;
    if(who==1)
      count++;
    if(who==2)
      count+=size;
    if(who==3)
    {
      if(num==1)
        count+=size+1;
      else
        count+=size-1;
    }
  }
}
/* Check if player wins */
function playerWin(size)
{
  var maxRow=myMax(rowArr,0,size);
  var maxCol=myMax(colArr,0,size);
  var maxDig=myMax(digArr,0,size);
  var maxArrs=new Array(-1,myMax(rowArr,1,size),myMax(colArr,1,size),myMax(digArr,1,size));
  if(myMax(maxArrs,1,size)==size)
  {
    var blinkWho=myMax(maxArrs,0,size);
    var blinkNum;
    if(blinkWho==1)
      blinkNum=maxRow;
    if(blinkWho==2)
      blinkNum=maxCol;
    if(blinkWho==3)
      blinkNum=maxDig;
    blink(blinkWho,blinkNum,size,"#00FF00");
    return true;
  }
  else
    return false;
}
function doGen()
{
  var puts;
  var size=document.containerForm.slct.options[document.forms[0].slct.options.selectedIndex].value;
  var pf=document.containerForm.slct_pf.options[document.forms[0].slct_pf.options.selectedIndex].value;
  if(pf==0)
    alert("Player plays first.");
  if(pf==1)
  {
    alert("Computer plays first.");
    meFirst=true;
  }
  if(pf=="none")
    alert("Please select who plays first!");
  if(size=="none")
    alert("Please select a Board size!");
  if((size=="other")&&(pf!="none"))
  {
    puts='Enter size (eg 7):   ';
    document.getElementById('container').innerHTML=puts;
  }
  if((size!="none")&&(size!="other")&&(pf!="none"))
    resolveMove(size);
}
function resolveMove(size)
{
  genBox(size,'container');
  if(meFirst)
    setTimeout("playFirst('"+size+"')",300);
}


Select Board Size3 x 34 x 45 x 5Other SizeWho plays first ?PlayerComputer



CopyRight 2002 Premshree Pillai. Sign my Guestbook | More JavaScripts




           
       
tictactoe.zip( 18 k)