Войти

Показать полную графическую версию : Игра Гомоку на Си


friter
20-11-2011, 03:04
Доброго времени суток.
Программу написал, есть проверка кто победил при комбинации в 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
вроде так


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

friter
20-11-2011, 14:21
Ну в общем надо чтобы вся доска проверялась по диагонали, вот это я никак не додумаюсь как сделать, пробовал, но мусор выходит




© OSzone.net 2001-2012