我正在制作一款名为 Tic Tac Toe(井字棋)的游戏,连续 5 次。为了确定获胜者,我使用 every()、slice() 和 map() 方法。使用这些方法我比较数组元素。横向和纵向的胜利条件已确定。为什么胜利条件不是沿着对角线确定的?
//Сохраните выбранные координаты
record = [];
var isWin = false;
//Определим неразмещенное состояние шахматной доски как 0.
function recordArray() {
for(var i = 0; i<num; i++){
var arr = [];
for(var j = 0; j < num; j++){
arr.push(0);
}
record.push(arr);
}
}
recordArray();
//Определите, равны ли соседние 5 чисел, если они равны,
//это означает, что победитель был определен
function isEqual(arr){
return arr.every(val => val === arr[0]);
}
//Определяем, соответствует ли отметка на доске
//условию победы
function isVictory(){
var len = record.length;
for(var i = 0; i < record.length; i++){
for(var j=0; j<record[i].length; j++){
if(record[i][j] !==0 ){
if(j < len && i - 1 < len){
//Определяем горизонтальное направление
if (isEqual(record[i].slice(j, j+5))){
isWin = true;
}
//Оценка вертикального направления
if (isEqual(record.slice(i, i+5).map(arr => arr[j]))){
isWin = true;
}
//Определяем направление о диагонали
if (isEqual(record[i].slice(j, j+5)) && isEqual(record.slice(i, i+5).map(arr => arr[j]))){
isWin = true;
}
}
}
}
}
return isWin;
}
isVictory();
您的代码的问题是您错误地检查了对角线方向。您需要添加两个条件来检查对角线:一个对角线从左上到右下,另一个对角线从右上到左下。
对于从左到右的对角线,我们检查从位置 (i, j) 开始并向右下移动一步的元素。对于从右到左的对角线,我们检查从位置 (i, j) 开始并向左向下移动一步的元素。