turn_counter 不重置 jquery
turn_counter does not reset jquery
我正在尝试构建一个 jQuery 井字游戏。我将粘贴整个内容,因此您只需使用 1 个文件。我遇到的问题是,在每个 win/tie 之后,clearboard()
函数需要重置棋盘以及上一个游戏中分配的所有 类。现在它在技术上是正确的,但只有 1 轮,一旦第 2 轮到来,整个程序开始出现故障,它开始增加 2,然后开始新游戏 类 已经添加并且计数器已经增加.
<!DOCTYPE>
<html>
<head>
<meta charset="utf-8" />
<title>jQuery Tic-Tac-Toe</title>
<meta name="description" content="Simple Tic-Tac-Toe game built using HTML5, JavaScript, jQuery, and CSS." />
<meta name="keywords" content="tic-tac-toe, game, html5, javascript, jquery, css" />
<meta name="viewport" content="width = device-width" />
<style type="text/css">
body {
font-size: 1.5em;
font-family: Helvetica, Arial;
text-align: center;
font-weight: italic;
}
@media screen and (max-width: 800px) {
body {
font-size: 1.3em;
}
}
@media screen and (max-width: 700px) {
body {
font-size: 1.1em;
}
}
@media screen and (max-width: 550px) {
body {
font-size: 0.8em;
}
}
table {
margin: 0 auto;
cursor: default;
border-spacing: 0;
width: 23em;
height: 30em;
}
td {
padding: 0;
width: 33.3%;
height: 33.3%;
font-size: 8em;
text-align: center;
}
table, td { /* by giving both a 1px border, everything gets a 2px border on all sides */
border: 1px solid red;
}
body, td:hover {
cursor: pointer;
background-color: gray;
}
body, td.taken:hover {
cursor: default;
background-color: inherit;
}
td.win {
background-color: blue;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript">
// JQuery starts here.......
$(document).ready(function(){
var turn_counter = 0;
var xWins = 0;
var oWins = 0;
var ties = 0;
clearBoard();
function move(){
$(this).off('click');
if(turn_counter % 2 == 0)
{
$(this).text("x");
$(this).addClass("x");
} else if(turn_counter % 2 != 0)
{
$(this).text("o");
$(this).addClass("o");
};
check_board();
showScores();
turn_counter++;
console.log(turn_counter);
}
function showScores(){
$('#xWins').text(xWins);
$('#oWins').text(oWins);
$('#ties').text(ties);
}
function check_board(){
if(turn_counter === 9){
alert("It's a TIE!!!");
ties++;
turn_counter = 0;
clearBoard();
} else if (
$('#1').hasClass('x') && $('#2').hasClass('x') && $('#3').hasClass('x') ||
$('#4').hasClass('x') && $('#5').hasClass('x') && $('#6').hasClass('x') ||
$('#7').hasClass('x') && $('#8').hasClass('x') && $('#9').hasClass('x') ||
$('#1').hasClass('x') && $('#4').hasClass('x') && $('#7').hasClass('x') ||
$('#2').hasClass('x') && $('#5').hasClass('x') && $('#8').hasClass('x') ||
$('#3').hasClass('x') && $('#6').hasClass('x') && $('#9').hasClass('x') ||
$('#1').hasClass('x') && $('#5').hasClass('x') && $('#9').hasClass('x') ||
$('#3').hasClass('x') && $('#5').hasClass('x') && $('#7').hasClass('x'))
{
alert("Player X has won!!!");
xWins++;
turn_counter = 0;
clearBoard();
} else if (
$('#1').hasClass('o') && $('#2').hasClass('o') && $('#3').hasClass('o') ||
$('#4').hasClass('o') && $('#5').hasClass('o') && $('#6').hasClass('o') ||
$('#7').hasClass('o') && $('#8').hasClass('o') && $('#9').hasClass('o') ||
$('#1').hasClass('o') && $('#4').hasClass('o') && $('#7').hasClass('o') ||
$('#2').hasClass('o') && $('#5').hasClass('o') && $('#8').hasClass('o') ||
$('#3').hasClass('o') && $('#6').hasClass('o') && $('#9').hasClass('o') ||
$('#1').hasClass('o') && $('#5').hasClass('o') && $('#9').hasClass('o') ||
$('#3').hasClass('o') && $('#5').hasClass('o') && $('#7').hasClass('o'))
{
alert("Player O has won!!!");
oWins++;
turn_counter = 0;
clearBoard();
}
}
function clearBoard(){
showScores();
$("td").text('')
$("td").removeAttr('class');
$("td").on('click', move);
turn_counter = 0;
}
});
</script>
</head>
<body>
<h1>Welcome!!!!</h1>
<h2>jQuery Tic-Tac-Toe</h2>
<p>Score: <span id="xWins"></span> - <span id="oWins"></span><br>Tie Count: <span id="ties"></span></p>
<table>
<caption>Match Arena</caption>
<tr>
<td id="1"></td>
<td id="2"></td>
<td id="3"></td>
</tr>
<tr>
<td id="4"></td>
<td id="5"></td>
<td id="6"></td>
</tr>
<tr>
<td id="7"></td>
<td id="8"></td>
<td id="9"></td>
</tr>
</table>
</body>
</html>
问题是 move
函数中函数调用的顺序。如果一个玩家赢了,你从 check_board
调用 clearBoard
然后直接通过 move
中的 turn_counter++
增加 turn_counter
即使没有新的移动发生了。
此外,某些字段可能具有双击处理程序,因为您只是在单击的字段上删除它们。如果在上一轮中未单击某个字段,则它会附加两个处理程序。您可以通过在 clearBoard
中调用 off
来防止这种情况
像那样:$("td").off('click').on('click', move);
.
我做了一个 fiddle 并试图解决这些问题:http://jsfiddle.net/qpfc455w/
我正在尝试构建一个 jQuery 井字游戏。我将粘贴整个内容,因此您只需使用 1 个文件。我遇到的问题是,在每个 win/tie 之后,clearboard()
函数需要重置棋盘以及上一个游戏中分配的所有 类。现在它在技术上是正确的,但只有 1 轮,一旦第 2 轮到来,整个程序开始出现故障,它开始增加 2,然后开始新游戏 类 已经添加并且计数器已经增加.
<!DOCTYPE>
<html>
<head>
<meta charset="utf-8" />
<title>jQuery Tic-Tac-Toe</title>
<meta name="description" content="Simple Tic-Tac-Toe game built using HTML5, JavaScript, jQuery, and CSS." />
<meta name="keywords" content="tic-tac-toe, game, html5, javascript, jquery, css" />
<meta name="viewport" content="width = device-width" />
<style type="text/css">
body {
font-size: 1.5em;
font-family: Helvetica, Arial;
text-align: center;
font-weight: italic;
}
@media screen and (max-width: 800px) {
body {
font-size: 1.3em;
}
}
@media screen and (max-width: 700px) {
body {
font-size: 1.1em;
}
}
@media screen and (max-width: 550px) {
body {
font-size: 0.8em;
}
}
table {
margin: 0 auto;
cursor: default;
border-spacing: 0;
width: 23em;
height: 30em;
}
td {
padding: 0;
width: 33.3%;
height: 33.3%;
font-size: 8em;
text-align: center;
}
table, td { /* by giving both a 1px border, everything gets a 2px border on all sides */
border: 1px solid red;
}
body, td:hover {
cursor: pointer;
background-color: gray;
}
body, td.taken:hover {
cursor: default;
background-color: inherit;
}
td.win {
background-color: blue;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript">
// JQuery starts here.......
$(document).ready(function(){
var turn_counter = 0;
var xWins = 0;
var oWins = 0;
var ties = 0;
clearBoard();
function move(){
$(this).off('click');
if(turn_counter % 2 == 0)
{
$(this).text("x");
$(this).addClass("x");
} else if(turn_counter % 2 != 0)
{
$(this).text("o");
$(this).addClass("o");
};
check_board();
showScores();
turn_counter++;
console.log(turn_counter);
}
function showScores(){
$('#xWins').text(xWins);
$('#oWins').text(oWins);
$('#ties').text(ties);
}
function check_board(){
if(turn_counter === 9){
alert("It's a TIE!!!");
ties++;
turn_counter = 0;
clearBoard();
} else if (
$('#1').hasClass('x') && $('#2').hasClass('x') && $('#3').hasClass('x') ||
$('#4').hasClass('x') && $('#5').hasClass('x') && $('#6').hasClass('x') ||
$('#7').hasClass('x') && $('#8').hasClass('x') && $('#9').hasClass('x') ||
$('#1').hasClass('x') && $('#4').hasClass('x') && $('#7').hasClass('x') ||
$('#2').hasClass('x') && $('#5').hasClass('x') && $('#8').hasClass('x') ||
$('#3').hasClass('x') && $('#6').hasClass('x') && $('#9').hasClass('x') ||
$('#1').hasClass('x') && $('#5').hasClass('x') && $('#9').hasClass('x') ||
$('#3').hasClass('x') && $('#5').hasClass('x') && $('#7').hasClass('x'))
{
alert("Player X has won!!!");
xWins++;
turn_counter = 0;
clearBoard();
} else if (
$('#1').hasClass('o') && $('#2').hasClass('o') && $('#3').hasClass('o') ||
$('#4').hasClass('o') && $('#5').hasClass('o') && $('#6').hasClass('o') ||
$('#7').hasClass('o') && $('#8').hasClass('o') && $('#9').hasClass('o') ||
$('#1').hasClass('o') && $('#4').hasClass('o') && $('#7').hasClass('o') ||
$('#2').hasClass('o') && $('#5').hasClass('o') && $('#8').hasClass('o') ||
$('#3').hasClass('o') && $('#6').hasClass('o') && $('#9').hasClass('o') ||
$('#1').hasClass('o') && $('#5').hasClass('o') && $('#9').hasClass('o') ||
$('#3').hasClass('o') && $('#5').hasClass('o') && $('#7').hasClass('o'))
{
alert("Player O has won!!!");
oWins++;
turn_counter = 0;
clearBoard();
}
}
function clearBoard(){
showScores();
$("td").text('')
$("td").removeAttr('class');
$("td").on('click', move);
turn_counter = 0;
}
});
</script>
</head>
<body>
<h1>Welcome!!!!</h1>
<h2>jQuery Tic-Tac-Toe</h2>
<p>Score: <span id="xWins"></span> - <span id="oWins"></span><br>Tie Count: <span id="ties"></span></p>
<table>
<caption>Match Arena</caption>
<tr>
<td id="1"></td>
<td id="2"></td>
<td id="3"></td>
</tr>
<tr>
<td id="4"></td>
<td id="5"></td>
<td id="6"></td>
</tr>
<tr>
<td id="7"></td>
<td id="8"></td>
<td id="9"></td>
</tr>
</table>
</body>
</html>
问题是 move
函数中函数调用的顺序。如果一个玩家赢了,你从 check_board
调用 clearBoard
然后直接通过 move
中的 turn_counter++
增加 turn_counter
即使没有新的移动发生了。
此外,某些字段可能具有双击处理程序,因为您只是在单击的字段上删除它们。如果在上一轮中未单击某个字段,则它会附加两个处理程序。您可以通过在 clearBoard
中调用 off
来防止这种情况
像那样:$("td").off('click').on('click', move);
.
我做了一个 fiddle 并试图解决这些问题:http://jsfiddle.net/qpfc455w/