【发布时间】:2016-09-26 14:31:32
【问题描述】:
我正在开发一款井字游戏,在该游戏中,多种组合可能会产生赢家。我创建了一个包含获胜组合的数组(我使用的是 jquery,因此我将它们存储为与我的 HTML 中的 ID 对应的字符串):
var winningCombos = [
["#0", "#1", "#2"],
["#0", "#4", "#8"],
["#0", "#3", "#6"],
["#1", "#4", "#7"],
["#2", "#4", "#6"],
["#2", "#5", "#8"],
["#3", "#4", "#5"],
["#5", "#6", "#7"]
]
我编写了一些代码,可以成功检查这些组合中的任何一个是否包含全部“x”或全部“y”,当它们包含所有“y”时,就会确定获胜者。但是,我现在要做的是找出一种方法来测试任何组合中的 3 个中的 2 个是否包含“x”或“y”。如果他们这样做了,那么计算机应该尝试通过填充剩余的可以获胜的方格来“阻止”获胜组合。
例如:我想检查每个组合,如果#0和#1都等于“X”,那么计算机应该在#2中放置一个“O”来阻止获胜。
我很难概念化如何做到这一点。我知道其他人已经为这类事情实现了极小极大算法,但我仍然是初学者,还真的不明白它们是如何工作的。
更多信息
有人问我如何代表董事会以及我如何检查当前的获胜情况。
游戏板:
<div class="row" id="row1">
<div class="square" id="0"></div>
<div class="square" id="1"></div>
<div class="square" id="2"></div>
</div>
<div class="row" id="row2">
<div class="square" id="3"></div>
<div class="square" id="4"></div>
<div class="square" id="5"></div>
</div>
<div class="row" id="row3">
<div class="square" id="6"></div>
<div class="square" id="7"></div>
<div class="square" id="8"></div>
</div>
检查胜利
function checkForWin() {
for (var i = 0; i < winningCombos.length; i++) {
//console.log($(winningCombos[i][0]).text().indexOf("X"));
if ($(winningCombos[i][0]).text().indexOf("X") >= 0 && $(winningCombos[i][1]).text().indexOf("X") >= 0 && $(winningCombos[i][2]).text().indexOf("X") >= 0) {
gameOver("x")
} else if ($(winningCombos[i][0]).text().indexOf("O") >= 0 && $(winningCombos[i][1]).text().indexOf("O") >= 0 && $(winningCombos[i][2]).text().indexOf("O") >= 0) {
gameOver("o");
}
}
}
【问题讨论】:
-
所以循环并检查三个中的两个是否相等。 filter
-
代表比赛场地的数据结构是什么样的?或者如果您没有,您目前如何检查获胜者?
-
我实际上会跳过对获胜组合进行硬编码。取而代之的是,水平、垂直、对角线遍历棋盘“网格”,然后计算一行中有多少匹配项。
标签: javascript jquery tic-tac-toe