Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int getAllValidWays(Cell *cell, int humanTurn) {
- if (cell == NULL) return 0; // Если указатель на ячейку NULL, то возвращаем 0
- int eat[4] = {0, 0, 0, 0}; // Данный массив показывает, по каким направлением возможно взятие фигуры противника
- int mustEat = 0; // Должна ли фигура бить другую фигуру
- for (int i = 0; i < 4; i++) {
- Cell **way = cell->ways[i]; // Получение текущего пути
- int wayCount = countWay(way); // Количество ячеек в данном пути
- if (cell->figure != NONE && wayCount > 0) {
- if (cell->figureType == NORMAL) { // Если фигура является обычной
- if (way[0]->figure == NONE) { // То происходит проверка на соседнюю пустую ячейку
- if ((humanTurn && i > 1) || (!humanTurn && i < 2)) clearWay(way); // Если проверяются задние пути для текущего игрока, то они очищаются
- else clearRange(way, 1, wayCount - 1); // Иначе очищается все, кроме найденной соседней ячейки
- } else if (wayCount > 1 && way[0]->figure != cell->figure && way[0]->figure != NONE &&
- way[1]->figure == NONE) { // Если имеется возможность побить вражескую фигуру
- removeHighlight(way, 0, 1); // То у такой фигуры удаляется подсветка, т. к. на занимаемую такой фигурой ячейку нельзя наступить
- clearRange(way, 2, wayCount - 2); // Очищается путь
- eat[i] = 1; // На данном пути нужно есть
- mustEat = 1; // Данная ячейка должна есть
- } else {
- clearWay(way); // Если оба условия не сработали, то путь очищается
- }
- } else if (cell->figureType == KING) { // Если фигура является дамкой
- int stop = 0; // Отвечает за выход из цикла
- int j = 0;
- int rangeCleared = 0; // Показывает, был ли очищен путь
- while (!stop && j < 8) {
- if (way[j] != NULL) { // Если путь существует
- if (way[j]->figure == cell->figure) { // Если встречена своя фигура
- clearRange(way, j, wayCount - j); // То путь очищается до этой фигуры
- stop = 1; // И просиходит выход из цикла
- } else if (j + 1 < 8 && way[j + 1] != NULL && way[j]->figure != NONE &&
- way[j + 1]->figure == NONE) { // Если есть возможность побить другие фигуры
- removeHighlight(way, j, 1); // То на данных фигурах удаляется подсветка
- if (!rangeCleared) { // Если путь не очищен
- clearRange(way, 0, j); // То он очищается
- rangeCleared = 1;
- }
- eat[i] = 1; // На данном пути нужно есть
- mustEat = 1; // Данная ячейка должна есть
- } else if (way[j]->figure != NONE) { // Если встречена любая другая фигура
- clearRange(way, j, wayCount - j); // То часть пути очищается
- stop = 1; // И происходит выход из цикла
- }
- }
- j++;
- }
- }
- }
- if (mustEat) { // Если ячейка должна есть
- for (int j = 0; j <= i; j++) {
- if (!eat[j]) clearWay(cell->ways[j]); // То очищаются все пути, где можно было не есть
- }
- }
- }
- return mustEat; // Возврат значения
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement