Hi everyone, I have this Javascript Tic-Tac-Toe script I have for my web development class. I seem to have a problem with the script. There seems to be a problem with the "1 player" and after the first game it gets all screwed up. And also, with the "1 player" it doesn't record the score properly! HELP ME! Thanks, Dale <html lang="en" dir="ltr" xml:lang="en" xmlns= "http://www.w3.org/1999/xhtml"> <head> <title>CIS 242 - tic-tac-toe</title> <meta content="author" name="class example" /> <meta content= "class example, explanation of the examples included, QUARTER, Edmonds Community College" name="keywords" /> <meta content="description" name="description" /> <meta http-equiv="Content-Type" content= "text/html; charset=us-ascii" /> <meta content="none" name="robots" /> <script type="text/javascript"> //<![CDATA[ <!-- //<[CDATA[ // global variables var x = new Image(); x.src = "X.png"; var o = new Image(); o.src = "O.png"; var arrTaken = new Array(); var intPlayer = 2; for (var i = 0; i < 9; i++){ arrTaken[i] = "blank"; } var intTurn = 0; var blnWin = false; /*--------------------------------------- function takeTurn(cellName) purpose: take a turn on the tic-tac-toe board author: CIS 242 Winter 2010 date: 1/26/10 parameters: cellName as string; as the name assigned to each image in our grid ---------------------------------------*/ function takeTurn(cellName){ var strImgSrc = document.images[cellName].src; //var intBlankPos = strImgSrc.indexOf("blank.png", 0); var intArrIndex = parseInt(cellName); if (arrTaken[intArrIndex] != "blank"){ alert("Please select a different square"); return false; } // end if (arrTaken[intArrIndex] != "blank") intTurn += 1; if (intTurn % 2 == 0){ document.images[cellName].src = o.src; document.forms[0].txtTurn.value = "X's Turn"; arrTaken[intArrIndex] = "O"; } // end if (intTurn % 2 == 0) else { document.images[cellName].src = x.src; document.forms[0].txtTurn.value = "O's Turn"; arrTaken[intArrIndex] = "X"; if ((intPlayer == 1) && (blnWin == false)) { setTimeout("computerTurn()", 500); //computerTurn() }// end if (intPlayer == 1) } // end else if (intTurn >= 5){ //alert("getting into if turns are greater > 5"); blnWin = chkWin(); } if (intTurn == 9){ alert("This is a tie game"); resetGame(); } if (blnWin){ alert("There is a winner!"); resetGame(); } } /*-------------------------------------------------- if the one player rdo button option is clicked then computer takes a turn call a function "computerTurn" This function should select a random number from 0 to 9 If that square is taken call computerTurn again (Recrusive Function) Else return the random number to the calling location and assign it to cellName end if --------------------------------------------------*/ function computerTurn(){ var oRandom = Math.floor((Math.random()* 9)); blnWin = chkWin(); if (blnWin == false){ if(arrTaken[oRandom] != "blank"){ computerTurn(); } // end if(arrTaken[oRandom] != "blank") else{ intTurn += 1; document.images[oRandom].src = "o.png"; arrTaken[oRandom] = "O"; } // end else } return true; } // end function /*-------------------------------------- function chkWin() purpose: check to see there is a win author: CIS 242 Winter 2010 date: 1/26/10 parameters: ---------------------------------------*/ function chkWin(){ // check for "X" wins if ((arrTaken[0] == "X") && (arrTaken[1] == "X") && (arrTaken[2] == "X")){ document.forms[0].xWins.value = parseInt(document.forms[0].xWins.value) + 1; return true; } else if ((arrTaken[3] == "X") && (arrTaken[4] == "X") && (arrTaken[5] == "X")){ document.forms[0].xWins.value = parseInt(document.forms[0].xWins.value) + 1; return true; } else if ((arrTaken[6] == "X") && (arrTaken[7] == "X") && (arrTaken[8] == "X")){ document.forms[0].xWins.value = parseInt(document.forms[0].xWins.value) + 1; return true; } else if ((arrTaken[0] == "X") && (arrTaken[3] == "X") && (arrTaken[6] == "X")){ document.forms[0].xWins.value = parseInt(document.forms[0].xWins.value) + 1; return true; } else if ((arrTaken[1] == "X") && (arrTaken[4] == "X") && (arrTaken[7] == "X")){ document.forms[0].xWins.value = parseInt(document.forms[0].xWins.value) + 1; return true; } else if ((arrTaken[2] == "X") && (arrTaken[5] == "X") && (arrTaken[8] == "X")){ document.forms[0].xWins.value = parseInt(document.forms[0].xWins.value) + 1; return true; } else if ((arrTaken[0] == "X") && (arrTaken[4] == "X") && (arrTaken[8] == "X")){ document.forms[0].xWins.value = parseInt(document.forms[0].xWins.value) + 1; return true; } else if ((arrTaken[2] == "X") && (arrTaken[4] == "X") && (arrTaken[6] == "X")){ document.forms[0].xWins.value = parseInt(document.forms[0].xWins.value) + 1; return true; } // check for O wins else if ((arrTaken[0] == "O") && (arrTaken[1] == "O") && (arrTaken[2] == "O")){ document.forms[0].oWins.value = parseInt(document.forms[0].oWins.value) + 1; return true; } else if ((arrTaken[3] == "O") && (arrTaken[4] == "O") && (arrTaken[5] == "O")){ document.forms[0].oWins.value = parseInt(document.forms[0].oWins.value) + 1; return true; } else if ((arrTaken[6] == "O") && (arrTaken[7] == "O") && (arrTaken[8] == "O")){ document.forms[0].oWins.value = parseInt(document.forms[0].oWins.value) + 1; return true; } else if ((arrTaken[0] == "O") && (arrTaken[3] == "O") && (arrTaken[6] == "O")){ document.forms[0].oWins.value = parseInt(document.forms[0].oWins.value) + 1; return true; } else if ((arrTaken[1] == "O") && (arrTaken[4] == "O") && (arrTaken[7] == "O")){ document.forms[0].oWins.value = parseInt(document.forms[0].oWins.value) + 1; return true; } else if ((arrTaken[2] == "O") && (arrTaken[5] == "O") && (arrTaken[8] == "O")){ document.forms[0].oWins.value = parseInt(document.forms[0].oWins.value) + 1; return true; } else if ((arrTaken[0] == "O") && (arrTaken[4] == "O") && (arrTaken[8] == "O")){ document.forms[0].oWins.value = parseInt(document.forms[0].oWins.value) + 1; return true; } else if ((arrTaken[2] == "O") && (arrTaken[4] == "O") && (arrTaken[6] == "O")){ document.forms[0].oWins.value = parseInt(document.forms[0].oWins.value) + 1; return true; } else { return false; } } /* ----------------------------------------- Function: Reset Game Author: Justin Leif Purpose: Restart game Date: 1/30/10 / 2/9/10 Parameters: none -------------------------------------------*/ function resetGame() { if (confirm("Do you want to restart or play another game?")){ intTurn = 0; for (var i = 0; i < 9; i++) { arrTaken[i] = "blank"; document.images[i].src = "blank.png"; document.forms[0].txtTurn.value = "X's Turn"; } } return true; } /*--------------------------------------------- function numOfPlayers(intPlayers) purpose: keep track of the numbers of players author: Marti Baker date: 2/9/10 parameters: intPlayers as an integer indicating the number of players playing tic-tac-toe ---------------------------------------------*/ function numPlayers(intPlayers){ intPlayer = intPlayers; return true; } //]]> //--> //]]> </script> </head> <body> <form action="" name="frmOptions" id="frmOptions"> <h1 align="center">Tic-Tac-Toe</h1> <table border="1" cellpadding="2" align="center" bordercolor= "#000000"> <tr> <td><img src="blank.png" width="100" height="100" alt="blank" name="0" border="0" onclick= "return takeTurn('0')" /></td> <td><img src="blank.png" width="100" height="100" alt="blank" name="1" onclick="return takeTurn('1')" /></td> <td><img src="blank.png" width="100" height="100" alt="blank" name="2" onclick="return takeTurn('2')" /></td> </tr> <tr> <td><img src="blank.png" width="100" height="100" alt="blank" name="3" onclick="return takeTurn('3')" /></td> <td><img src="blank.png" width="100" height="100" alt="blank" name="4" onclick="return takeTurn('4')" /></td> <td><img src="blank.png" width="100" height="100" alt="blank" name="5" onclick="return takeTurn('5')" /></td> </tr> <tr> <td><img src="blank.png" width="100" height="100" alt="blank" name="6" onclick="return takeTurn('6')" /></td> <td><img src="blank.png" width="100" height="100" alt="blank" name="7" onclick="return takeTurn('7')" /></td> <td><img src="blank.png" width="100" height="100" alt="blank" name="8" onclick="return takeTurn('8')" /></td> </tr> </table> <table border="0" cellpadding="2" align="center" bordercolor= "#000000" width="400"> <tr> <td><input type="radio" name="rdoPlayer" value="true" onclick= "numPlayers(1)" />1 player<br /> <input type="radio" name="rdoPlayer" value="false" checked= "checked" onclick="numPlayers(2)" />2 player</td> <td valign="middle"><input type="button" name="btnRestart" id= "btnRestart" value="Restart Game" onclick= "return resetGame()" /><br /></td> <td><input type="text" name="txtTurn" readonly="readonly" id= "txtTurn" value="X's Turn" size="5" /></td> <td>Previous Wins:<br /> X wins:<input type="text" readonly="readonly" name="xWins" id= "xWins" value="0" size="1" /><br /> O wins:<input type="text" readonly="readonly" name="oWins" id= "oWins" value="0" size="1" /></td> </tr> </table> </form> </body> </html> Code (markup):
in the resetGame function you may need to set blnWin to false... But I think that you may have some other issues aswell... It could all be coded much more efficiently.