Zdravim, dělám do školy piškvorky o pole 10x10, celkově už to skoro mám, ale nevím si rady s testováním diagonal a sloupců. Test sloupců mi funguje akorát na levé straně pole odshora dolu.
#include <stdio.h>
#include <stdlib.h>
char pole[10][10];
int t;
char kontrola(void);
void init_pole(void);
void tah_hrace(void);
void tah_pocitace(void);
void zobr_pole(void);
char a;
int Q;
char cesta[61];
FILE *f;
int main(void)
{
char done;
done = ' ';
init_pole();
do {
zobr_pole();
tah_hrace();
done = kontrola(); /* see if winner */
if(done!= ' ') break; /* winner!*/
tah_pocitace();
done = kontrola(); /* see if winner */
} while(done== ' ');
zobr_pole();
if(done=='X') printf("\nVyhral jsi!\n");
else printf("\nVyhral PC!\n");
printf("\nChces ulozit?(A, N)");
scanf("%s",&a);
switch (a){
case 'a':
case 'A':
printf("Zadej cestu: ");
scanf("%60s", cesta);
f=fopen(cesta,"a+");
for(t=0; t<10; t++) {
fprintf(f," %c | %c | %c | %c | %c | %c | %c | %c | %c | %c ",pole[t][0],
pole[t][1], pole [t][2], pole [t][3], pole [t][4], pole [t][5], pole [t][6], pole [t][7]
, pole [t][8], pole [t][9]);
if(t!=10) fprintf(f,"\n---|---|---|---|---|---|---|---|---|---\n");
break;
case 'n':
case 'N':
return 1;
break;
}
printf("\n");
}
fclose(f);
getchar();
getchar();
}
/* inicializuje pole */
void init_pole(void)
{
int i, j;
for(i=0; i<10; i++)
for(j=0; j<10; j++) pole[i][j] = ' ';
}
/* Tah hrace */
void tah_hrace(void)
{
int x, y;
printf("Zadej souradnice X,Y pro tvuj krok - napr. 1,1: \n");
scanf("%d%*c%d", &x, &y);
x--; y--;
if(pole[x][y]!= ' '){
printf("Spatny krok, zkus to znova.\n");
tah_hrace();
}
else pole[x][y] = 'X';
}
/* tah pocitace. */
void tah_pocitace(void)
{
int i, j;
for(i=0; i<10; i++){
for(j=0; j<10; j++)
if(pole[i][j]==' ') break;
if(pole[i][j]==' ') break;
}
if(i*j==9) {
printf("Remiza!\n");
exit(0);
}
else
pole[i][j] = 'O';
}
/* Zobrazí pole na obrazovku */
void zobr_pole(void)
{
printf("Y 1 2 3 4 5 6 7 8 9 10\n");
for(t=0; t<10; t++) {
printf(" %c | %c | %c | %c | %c | %c | %c | %c | %c | %c ",pole[t][0],
pole[t][1], pole [t][2], pole [t][3], pole [t][4], pole [t][5], pole [t][6], pole [t][7]
, pole [t][8], pole [t][9]);
if(t!=10) printf("\n---|---|---|---|---|---|---|---|---|---\n");
}
printf("\n");
}
char kontrola(void)
{
int i;
for(i=0; i<3; i++) /* kontroluje radky */
if((pole[i][0]==pole[i][1] && pole[i][0]==pole[i][2] && pole[i][0]==pole[i][3]))
return pole[i][0];
if(pole[i][1]==pole[i][2] && pole[i][1]==pole[i][3] && pole[i][1]==pole[i][4])
return pole[i][0];
if(pole[i][2]==pole[i][3] && pole[i][2]==pole[i][4] && pole[i][2]==pole[i][5])
return pole[i][0];
if(pole[i][3]==pole[i][4] && pole[i][3]==pole[i][5] && pole[i][3]==pole[i][6])
return pole[i][0];
if(pole[i][4]==pole[i][5] && pole[i][4]==pole[i][6] && pole[i][4]==pole[i][7])
return pole[i][0];
if(pole[i][5]==pole[i][6] && pole[i][5]==pole[i][7] && pole[i][5]==pole[i][8])
return pole[i][0];
if(pole[i][6]==pole[i][8] && pole[i][6]==pole[i][9] && pole[i][6]==pole[i][10])
return pole[i][0];
for(i=0; i<3; i++) /* kontroluje sloupce */
if(pole[0][i]==pole[1][i] && pole[0][i]==pole[2][i] && pole[0][i]==pole[3][i])
return pole[0][i];
if(pole[1][i]==pole[2][i] && pole[1][i]==pole[3][i] && pole[1][i]==pole[4][i])
return pole[0][i];
if(pole[2][i]==pole[3][i] && pole[2][i]==pole[4][i] && pole[2][i]==pole[5][i])
return pole[0][i];
if(pole[3][i]==pole[4][i] && pole[3][i]==pole[5][i] && pole[3][i]==pole[6][i])
return pole[0][i];
if(pole[4][i]==pole[5][i] && pole[4][i]==pole[6][i] && pole[4][i]==pole[7][i])
return pole[0][i];
if(pole[5][i]==pole[6][i] && pole[5][i]==pole[7][i] && pole[5][i]==pole[8][i])
return pole[0][i];
if(pole[6][i]==pole[7][i] && pole[6][i]==pole[8][i] && pole[6][i]==pole[9][i])
return pole[0][i];
if(pole[7][i]==pole[8][i] && pole[7][i]==pole[9][i] && pole[7][i]==pole[10][i])
return pole[0][i];
/* testuje diagonaly */
if(pole[0][0]==pole[1][1] && pole[1][1]==pole[2][2] && pole[2][2]==pole[3][3])
return pole[0][0];
if(pole[0][2]==pole[1][1] && pole[1][1]==pole[2][0])
return pole[0][2];
return ' ';
getchar();
getchar();
}