我试图了解Tic Tac Toe游戏的逻辑,我几乎已经做了一个逻辑,但是在将数据推送到数组时我被困住了。这是我创造的小提琴。
http://jsfiddle.net/afzaal_ahmad_zeeshan/6bgjp/1/
让我向你解释一切!
我正在尝试使用表格的9 td作为可能获胜的8行。为此,我给了一些tds一个className,具体取决于它们在表中的位置。
HTML很简单
<div class="vicvacvoe">
<table>
<tr>
<td class="line1 line4 line7"></td>
<td class="line1 line5"></td>
<td class="line1 line6 line8"></td>
</tr>
<tr>
<td class="line2 line4"></td>
<td class="line2 line5 line7 line8"></td>
<td class="line2 line6"></td>
</tr>
<tr>
<td class="line3 line4 line8"></td>
<td class="line3 line5"></td>
<td class="line3 line6 line7"></td>
</tr>
</table>
</div>
只是一个包含9个tds的简单表格,CSS与此无关,所以请保留它。
jQuery也很简单。但我无法将数据推送到数组。
var vic = $('.vicvacvoe table tr td');
var player = 1;
var tick = '✓';
var cross = 'X';
var user1 = [];
var user2 = [];
vic.click(function () {
var className = $(this).attr('class');
if (className != 'dead') {
// A new board place to write on...
// Now do the processes here...
if (player == 1) {
// First player!
var cArray = className.split(' ');
for (i = 0; i < cArray.length; i++) {
for (j = 0; j < user1.length; j++) {
// check for each class
if (user1[j] != cArray[i]) {
user1.push(cArray[i]);
}
}
}
} else {
/* code for second player, the same */
}
$(this).text('Works!');
$(this).attr('class', 'dead');
}
});
这是整个jQuery脚本。实际上,当我运行代码时,它确实会到达堆栈的末尾(对于类属性更改脚本)并且它会锁定td以进行进一步处理,并且它也会在td中写入 Works!。但我无法为该用户获取Array内的classNames。我想保存每个用户的行号,然后检查他是否填充了3个点。我需要有关Array部分的帮助。
谢谢!
答案 0 :(得分:1)
我更喜欢简单,所以您可以使用indexOf
检查该类是否已经在用户的数组中,如下所示:
if (player == 1) {
// First player!
var cArray = className.split(' ');
for (i = 0; i < cArray.length; i++) {
if(user1.indexOf(cArray[i]) == -1) {
user1.push(cArray[i]);
} else {
// css class is already in the array
}
}
}
答案 1 :(得分:0)
您的问题在这里:
for (j = 0; j < user1.length; j++) {
您添加到user1
数组的唯一位置是在此循环中。现在数组最初是空的,所以很明显这个循环永远不会迭代,因为user1.length
总是为0。
我认为你对这段代码的意图是检查数值是否已经在数组中,我建议使用$.inArray
。