Tym razem z innej beczki – program dzięki któremu można pograć w kółko i krzyżyk.
AI nieco kuleje, bo komputer wstawia kółka w pierwsze wolne miejsce, więc pojechanie go po skosie to prościzna, ale chodzi raczej o sam fakt jak napisać taką grę.
#include
#include
char macierz[3][3]; /* macierz kolka i krzyzyka */
char sprawdz(void);
void ustaw_macierz(void);
void wykonaj_ruch_gracza(void);
void wykonaj_ruch_komputera(void);
void pokaz_macierz(void);
int main(void)
{
char koniec;
printf("Witaj w grze w kolko i krzyzyk.\n");
printf("Sprawdz czy uda ci sie pokonac komputer.\n");
koniec = ' ';
ustaw_macierz();
do {
pokaz_macierz();
wykonaj_ruch_gracza();
koniec = sprawdz(); /* zobacz czy ktos wygral */
if(koniec!= ' ') break; /* wygrana !*/
wykonaj_ruch_komputera();
koniec = sprawdz(); /* zobacz czy ktos wygral */
} while(koniec== ' ');
if(koniec=='X') printf("Wygrales!\n");
else printf("Hahaha, dales sie pokonac komputerowi!!!!\n");
pokaz_macierz(); /* pokaz X i O */
return 0; //koniec programu
}
/* Ustaw pola macierzy ' '-> puste 'X'->czlowiek ')'->komp. */
void ustaw_macierz(void)
{
int i, j;
for(i=0; i<3; i++)
for(j=0; j<3; j++) macierz[i][j] = ' ';
}
/* pobierz wspolrzedne ruchu gracza. */
void wykonaj_ruch_gracza(void)
{
int x, y;
printf("Podaj pozycje X,Y twojego ruchu: ");
scanf("%d%*c%d", &x, &y);
x--; y--;
if(macierz[x][y]!= ' '){
printf("Nieprawidlowe dane, podaj raz jeszcze.\n");
wykonaj_ruch_gracza();
}
else macierz[x][y] = 'X';
}
/* wykonaj ruch komputeraz */
void wykonaj_ruch_komputera(void)
{
int i, j;
for(i=0; i<3; i++){
for(j=0; j<3; j++)
if(macierz[i][j]==' ') break;
if(macierz[i][j]==' ') break;
}
if(i*j==9) {
printf("remis\n");
exit(0);
}
else
macierz[i][j] = 'O';
}
/* wyswietl macierz komputera. */
void pokaz_macierz(void)
{
int t;
for(t=0; t<3; t++) {
printf(" %c | %c | %c ",macierz[t][0],
macierz[t][1], macierz [t][2]);
if(t!=2) printf("\n---|---|---\n");
}
printf("\n");
}
/* zobacz czy ktos wygral. zwraca X jezeli wygral czlowiek lub 0 jezeli wygral komp*/
char sprawdz(void)
{
int i;
for(i=0; i<3; i++) /* sprawdz wiersze */
if(macierz[i][0]==macierz[i][1] &&
macierz[i][0]==macierz[i][2]) return macierz[i][0];
for(i=0; i<3; i++) /* sprawdz kolumny */
if(macierz[0][i]==macierz[1][i] &&
macierz[0][i]==macierz[2][i]) return macierz[0][i];
/* sprawdz skosy */
if(macierz[0][0]==macierz[1][1] &&
macierz[1][1]==macierz[2][2])
return macierz[0][0];
if(macierz[0][2]==macierz[1][1] &&
macierz[1][1]==macierz[2][0])
return macierz[0][2];
return ' ';
}
Miłego analizowania.