Kółko i krzyżyk w C

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.

Dodaj komentarz