Описание метода проверки на выигрыш в игре крестики нолики
Добрый день всем! Первый раз обращаюсь на форум, по этому если сделал что то не так не ругайтесь, всегда готов исправиться. Есть метод по проверке на выигрыш для поля неопределённого размера. Метод рабочий, проблема только в том что я не понимаю как он работает.
Конкретно интересует метод checkline();
Помогите пожалуйста разобраться.
// проверка на победу
private static boolean checkWin(char c) {
for (int i = 0; i < fieldSizeX; i++) { // ползём по всему полю
for (int j = 0; j < fieldSizeY; j++) {
if (checkLine(i, j, 1, 0, toWin, c)) return true; // проверим линию по х
if (checkLine(i, j, 1, 1, toWin, c)) return true; // проверим по диагонали х у
if (checkLine(i, j, 0, 1, toWin, c)) return true; // проверим линию по у
if (checkLine(i, j, 1, -1, toWin, c)) return true; // проверим по диагонали х -у
}
}
return false;
}
// проверка линии
private static boolean checkLine(int x, int y, int vx, int vy, int len, char c) {
final int far_x = x + (len - 1) * vx; // посчитаем конец проверяемой линии
final int far_y = y + (len - 1) * vy;
if (!isValidCell(far_x, far_y)) return false; // проверим не выйдет-ли проверяемая линия за пределы поля
for (int i = 0; i < len; i++) { // ползём по проверяемой линии
if (field[y + i * vy][x + i * vx] != c) return false; // проверим одинаковые-ли символы в ячейках
}
return true;
}
02 июня 2017 в 20:09