Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Игра Гомоку на Си (http://forum.oszone.net/showthread.php?t=220991)

friter 20-11-2011 03:04 1799112

Игра Гомоку на Си
 
Доброго времени суток.
Программу написал, есть проверка кто победил при комбинации в 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 20-11-2011 10:31 1799160

вроде так

Код:

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 20-11-2011 13:59 1799233

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

friter 20-11-2011 14:21 1799247

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


Время: 05:10.

Время: 05:10.
© OSzone.net 2001-