所以我有这个freeCodeCamp项目用于构建一个带有JavaScript的Tic-Tac-Toe游戏。代码中的一个函数编写如下:
function searchRegex(list, who) {
var whoRegex = who === 1 ? player1.regex : player2.regex;
return list.findIndex(function(c) {
return whoRegex.test(c) && c.split('').indexOf('-') > -1;
});
}
例如,如果player1选择'X',CPU将使用'O',并且每个玩家对象中的正则表达式为:
player1.regex = /(X-X|XX)/g
player2.regex = /(O-O|OO)/g
每次计算机即将采取行动时,首先要评估它是否即将获胜(因此它会标记并获胜)。如果所有行,列和十字从searchRegex
函数返回-1,它将查找它将要丢失的情况(因此它会标记并避免丢失)。如果第二个条件不成立,那么玩家就不会赢,它会运行其他代码来决定下一步行动。
问题是:有时计算机即将获胜,但函数返回-1,因此代码知道它不是。
它出现的一种情况是我有这样的行数组:
rows = ["O-O","XO-","X-X"];
第一次检查,代码调用searchRegex(rows,0)
,因此它会检查player2.regex匹配的行列表。
在我看来,当searchRegex
函数评估该箭头时,rows[0]
应该匹配,但它返回-1。我想知道为什么......
有人能看到我错过的东西吗?
P.S。:当代码读取行,列和十字时,它会在斑点为空时放置一个连字符。