Kółko i krzyżyk 4x4 w C

0

Do napisania mam jak w temacie gre kólko i krzyżyk na planszy 4x4 i to są kody, które napisałam.
Niestety mam problem z następującymi rzeczami:

  1. Nie wiem jak zabezpieczyć, żeby po wpisaniu liter zamiast liczb, prosiło o inny ruch
  2. Cały czas nie mogę dobrze przypisać gracza do wygranej.
  3. Jak zrobić, żeby po każdym ruchu sprawdzało warunki na wygraną. Teraz np gdy gracz 1 wygra przyjmuje jeszcze ruch gracza 2 i dopiero określa wygraną.

Mógłby ktoś mi pomóc, będę bardzo wdzięczna bo siedzę nad tym już jakiś czas i nie mogę dojść jak poprawić te błędy.


#include <stdio.h>
#define RZEDY 4
#define KOLUMNY 4
#define KOLKO 'O'
#define KRZYZYK 'X'
  
int tablica[4][4] = {
                       {1,2,3,4},
                       {5,6,7,8},         
                       {9,10,11,12}, 
                               {13,14,15,16}                     
                        };

int Plansza()
{
int i,j; 
for( i = 0; i <RZEDY; i++ )
        {
                for(j = 0; j < KOLUMNY; j++ ) 
                {
                if(tablica[i][j] > 16) printf("| %c|",tablica[i][j]);
                else printf("|%02d|", tablica[i][j]);
                } 
        printf("\n----------------\n");
        }
}
int Ruch(int gracz, int ruch)
{
int rzad = --ruch/4;
int kolumna = ruch%4;
switch (tablica[rzad][kolumna]) {
        
        case KRZYZYK: 
                        return 0;
                        break;
        
        default:        tablica[rzad][kolumna]=(gracz==0)?KRZYZYK:KOLKO;
                        return 1;
                        break;
        case KOLKO: 
                        return 0;
                        break;
}}

int wygrana(void)
{
int linia;
if((tablica[0][0] == tablica[1][1] && tablica[1][1]==tablica[2][2])||
(tablica[0][2]==tablica[1][1] && tablica[0][2]==tablica[2][0])||
(tablica[1][1]==tablica[2][2] && tablica[2][2]==tablica[3][3])||
(tablica[0][3]==tablica[1][2] && tablica[1][2]==tablica[2][1])||
(tablica[1][2]==tablica[2][1] && tablica[2][1]==tablica[3][0])||
(tablica[1][0]==tablica[2][1] && tablica[2][1]==tablica[3][2])||
(tablica[0][1]==tablica[1][2] && tablica[1][2]==tablica[2][3])||
(tablica[0][2]==tablica[1][1] && tablica[1][1]==tablica[2][0])||
(tablica[1][3]==tablica[2][2] && tablica[2][2]==tablica[3][1]))

return 1;
      else
        for(linia = 0; linia <= 3; linia ++)
          if((tablica[linia][0] == tablica[linia][1] && tablica[linia][0] ==
tablica[linia][2])||
            (tablica[linia][1] == tablica[linia][2] && tablica[linia][1] ==
tablica[linia][3])||
            (tablica[0][linia] == tablica[1][linia] && tablica[0][linia] ==
tablica[2][linia])||
            (tablica[1][linia] == tablica[2][linia] && tablica[1][linia] ==
tablica[3][linia]))
            
            return 1; } 
#include "funkcje.h"

int main(){
int ruch,gracz;
int i;


Plansza();
do {
        gracz=i%2+1;
        do 
                {
                 do {
                        printf("\nGracz %d podaj numer pola \n",gracz);
                         scanf("%d", &ruch);
                        if (ruch<1||ruch>16) printf("\nWpisales zle dane popraw...\n\n");
                }
                while(ruch<1||ruch>16||(Ruch(0, ruch)==Ruch(1, ruch)));
                Ruch(0, ruch);
                Plansza();} 
        while(Ruch(0, ruch)!=0 && wygrana()!=1); 
         gracz++ ;
        do 
        {
                do {
                         printf("\nGracz %d podaj numer pola \n",gracz);
                         scanf("%d", &ruch);
                        if (ruch<1||ruch>16) printf("\nWpisales zle dane, popraw...\n\n");
                } while ((ruch<1||ruch>16)||(Ruch(1, ruch)==Ruch(0, ruch)));                
                Ruch(1, ruch);        
                Plansza();
                } 
        while(Ruch(1, ruch)!=0 && wygrana()!=1);

 
} while (wygrana()!=1);
printf("\nWygral gracz %d \n",gracz--);

Plansza();
}
0

Albo po prostu tak

char znak;
scanf("%c", &znak);
znak -= '0';
if(znak < 0 || znak > 9)
{
     printf("prosze o inny ruch");
     getchar();     // można jeszcze wyczyścić bufor
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1