02.04.2011, 13:52. Просмотров 497. Ответов 0
Очень нужна помощь! Я пишу крестики нолики на большом поле(там до 5 вряд) и застрял на проверке победы.
У меня проверяет на победу по горизонтали, вертикали и главной диагонали , А ПО ПОБОЧНОЙ ПОЧЕМУ-ТО НЕ РАБОТАЕТ. Никак не могу понять почему. Помогите пожалуйста!! Очень надо.
Мое поле это двумерный массив POLE[15][15]. Где Нулевый столбец и строка заняты нумерацией.
Вот код на проверку по главной(который работает) и по побочной(который не пашет):
Добавлено через 1 минуту
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| //Проверка на победу-----------------------------------------------------
void Win( char POLE[M][N],int hod)
{
switch(hod%2)
{
// для ПЕрвого игрока==============================================================
case 0:
for(int i=1;i<M;i++)
for(int j=1;j<N;j++)
{
if(POLE[i][j]=='X')
{
//ПРоверка по главной диагонали ====================================================================
int Vgran_i=i-4,Ngran_i=i+4; // Границы для проверки по i
int Lgran_j=j-4,Rgran_j=j+4; // Границы для проверки по j
int k=0; // Счетчик определяющий победу
for(Vgran_i,Lgran_j;Vgran_i<=Ngran_i && Lgran_j<=Rgran_j;Vgran_i++,Lgran_j++)
{
if(Vgran_i>0 && Ngran_i<16 && Lgran_j>0 && Rgran_j<16)
{
if(POLE[i][j]==POLE[Vgran_i][Lgran_j])
k++;
else k=0;
if(k==5)
{
cout<<"Plaeyr1 WIN";
getch();exit(2);
}
}
}
//ПРоверка по побочной диагонали ======================================================
for(Vgran_i,Rgran_j;Vgran_i<=Ngran_i && Lgran_j<=Rgran_j; Vgran_i++,Rgran_j-- )
{
if(Vgran_i>0 && Ngran_i<16 && Lgran_j>0 && Rgran_j<16)
{
if(POLE[i][j]==POLE[Vgran_i][Rgran_j])
k++;
else k=0;
if(k==5)
{
cout<<"Plaeyr1 WIN";
getch();exit(2);
}
}
} |
|