C/C++ - Игра Гомоку на Си

Ответить
Аватара пользователя
friter

C/C++ - Игра Гомоку на Си

Сообщение friter »

Доброго времени суток.

Программу написал, есть проверка кто победил при комбинации в 4 "шашки" подряд, работает вертикальная и горизонтальная проверки, но вот беда, все никак не додумаюсь как доделать диагональную.

И так о самой игре, в игре 2 игрока по очереди ставят на игральный стол свои "шашки" задача построить цепочку из 4х шашек первым и не дать оппоненту это сделать. (Я сделал саму игру без АИ, то есть 2 игрока играют между собой) в общем игра похожа на крестики-нолики только на площади 10*10.

Использую 4 функции void DeskOut(), Input();

int Turn(), Winner();



Turn - определяет кто по очереди должен делать ход

Winner - определяет победителя, идет ту самую цепочку из шашек

DeskOut - печатает на экран игральный стол

Input - берет от пользователя координаты куда ставить шашку

Мне необходимо построить алгоритм, который бы по диагонали проверял всю доску на наличие цепочки из 4х шашек одного цвета. Я использовал буквы B - Black W - White.

Все голову ломаю, никак не лезет

Вот и исходник:









Код:

Код: Выделить всё

int Winner(){
    int i = 0, j = 0, k = 0, counter = 0;
    char SearchChar;
    if(turn) SearchChar = 'B';
        else SearchChar = 'W';
/*Check HORIZONTAL combination*/
    for(i = 0; i < 10; i++){
        for(j = 0; j < 10; j++){
            if(desk[i][j] == SearchChar)
                counter++;
            else counter = 0;
            if(counter == 4){
                printf("Player %c WINS!\n\a", SearchChar);
                return 1;
            }
        }
    }
/*Check VERTICAL combination*/
    for(i = 0; i < 10; i++){
        for(j = 0; j < 10; j++){
            if(desk[j][i] == SearchChar)
                counter++;
            else counter = 0;
            if(counter == 4){
                printf("Player %c WINS!\n\a", SearchChar);
                return 1;
            }
        }
    }
Аватара пользователя
ferget

Re: C/C++ - Игра Гомоку на Си

Сообщение ferget »

вроде так





Код:

Код: Выделить всё

for(i = 0; i < 10; i++)
      {
            if(desk[i][i] == SearchChar)
                counter++;
            else counter = 0;
            if(counter == 4){
                printf("Player %c WINS!\n\a", SearchChar);
                return 1;
        }
Аватара пользователя
friter

Re: C/C++ - Игра Гомоку на Си

Сообщение friter »

Он проверяет только 1 диагональ, то есть 1*1 2*2 3*3 4*4 и тд... Этот вариант я попробовал с самого начала, однако мне необходимо чтобы проверялась вся площадь доски, не с начала координат, а к примеру с 4*8 5*9 6*10 и тд в таком духе.
Аватара пользователя
friter

Re: C/C++ - Игра Гомоку на Си

Сообщение friter »

Ну в общем надо чтобы вся доска проверялась по диагонали, вот это я никак не додумаюсь как сделать, пробовал, но мусор выходит
Ответить

Вернуться в «Программирование и базы данных»