Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Алгоритм подсчета очков в игре крестики-нолики на JS

VIktor Ученик (55), на голосовании 1 год назад
есть функция для проверки одинаковых элементов по горизнтоали идущих подряд, val = это крестик или нолик, я их передаю в функцию при клике на ячейку.
такая проблема, считает верно, но когда я например сделал 2 или n идущих подряд эллементов в одном ряду, при первом клике на другой ряд я получаю тоже число(2 или n). Помогите сделать, что бы при клике на другой ряд maxCount сбрасывался до 1.
Вот как на фото ниже, я сделал 3 подряд крестика, получил 3, но если я делаю в ячейке другого ряда еще 1 крестик, то при 1ом клике я получу тоже 3
 function checkHorisontal(matrix, val) { 
let maxCount = 0;
for (let i = 0; i < matrix.length; i++) {
let count = 1;
for (let j = 0; j < matrix.length; j++) {
if (matrix[i][j] == val && matrix[i][j + 1] == val) {
count++;
if (count > maxCount) {
maxCount = count;
} else {
count = 1;
}
}
}
}
console.log(maxCount);
}
Голосование за лучший ответ
Andrew Bryukhov Мудрец (11830) 1 год назад
Проблема заключается в том, что переменная `count` не сбрасывается до 1 для каждого нового ряда. Для решения этой проблемы вам нужно сбросить значение переменной `count` до 1 перед началом проверки следующего ряда. Добавьте строку `count = 1;` перед внутренним циклом `for (let j = 0; j < matrix.length; j++) { ... }`:
 function checkHorisontal(matrix, val) {   

let maxCount = 0;

for (let i = 0; i < matrix.length; i++) {

let count = 1;

for (let j = 0; j < matrix.length; j++) {

if (matrix[i][j] == val && matrix[i][j + 1] == val) {

count++;

if (count > maxCount) {

maxCount = count;

}

} else {

count = 1;

}

}

}

console.log(maxCount);

}


Теперь переменная `count` будет сбрасываться до 1 перед началом проверки следующего ряда.
Максим Искусственный Интеллект (213287) 1 год назад
Ну так твоя функция обходит всё поле и находит максимальную длину по горизонтали, так что всё верно. Я вообще не понимаю, при чем тут куда ты кликаешь. У тебя в функцию не передается, куда ты кликаешь. Это роли не играет. Если тебе нужна конкретная строка, тогда тебе нужно передать её в функцию и убрать второй цикл, который идет по строкам.
Похожие вопросы