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:
- Nie wiem jak zabezpieczyć, żeby po wpisaniu liter zamiast liczb, prosiło o inny ruch
- Cały czas nie mogę dobrze przypisać gracza do wygranej.
- 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();
}