Код
делает предположение, а затем избегает его проверки.
Ваш код предполагает, что игрок выиграл, если только вы не можете доказать, что он не выиграл.
Проблема в том, что вы затем замкнули два из тесты, доказывающие ход, не являются выигрышным ходом.
Посмотрите, что делает этот код:
bool foundSequenceDiag1 = true;
if (height == width) {
for (int i = 0; i < 3; i++) {
if (map[i][i] != player) {
foundSequenceDiag1 = false;
}
}
}
Сначала вы говорите, "игрок выиграл" foundSequenceDiag1=true;
. Затем вы говорите: «Был ли ход по диагонали?», И только после этого вы запускаете код, который может установить foundSequenceDiag1
в «ложь».
Если игрок делает ход, который находится не по диагонали, проверка не запустится.
чтобы исправить:
bool foundSequenceDiag1 = (height==width); // true if the player played on diagonal
if (foundSequenceDiag1) { // loop code now only executes if player played on diagonal
for (int i = 0; i < 3; i++) {
if (map[i][i] != player) {
foundSequenceDiag1 = false;
}
}
}
когда вы что-то нашли, перестаньте искать.
Если бы я писал ваши чеки, я бы использовал ключевое слово break
, чтобы перестать искать, как только я найду ответ.
for (int i = 0; i < 3; i++) {
if (map[i][i] != player) {
foundSequenceDiag1 = false;
break; // can't be true now, so stop checking.
}
}