Accedi per seguire   
Seguaci 0
spiug

[c] Esercitazione 6

5 messaggi in questa discussione

Il gioco del Tris (tic-tac-toe)

La scacchiera e’ rappresentata da una matrice 3x3 di

elementi di tipo char che possono assumere uno fra i

seguenti valori dall’ovvio significato: ‘O’ (lettera o

maiuscola), ’X’ e ‘ ‘ (spazio).

Questo è il mio MAIN:

char verifica(char matrice[3][3]) {
int r,c,i;
int n=0;

i=0;
c=0;
for (r=0; r<2; r++) {
	for (c=1; c<2; c++)
		if (matrice[r][c]==matrice[r][c-1]) i=1;	
	if (i=1) return matrice[c][r];
}

r=0;
for (c=0; c<2; c++) {
	for (r=1; r<2; r++)
		if (matrice[r][c]==matrice[r-1][c]) i=1;	
	if (i=1) return matrice[c][r];
}

if (matrice[0][0]==matrice[1][1]==matrice[2][2]) return matrice[1][1];
if (matrice[0][2]==matrice[1][1]==matrice[2][0]) return matrice[1][1];

 for (r=0; r<2; r++)
	 for (c=0; c<2; c++)
		 if (matrice[r] [c]!=' ') n+=1;
 if (n==9) return 'P';   

return 'C';
}

ESERCIZIO 1

Implementare la procedura

void mossa_giocatore(char matrice[3][3]);

che chiede all’utente di inserire le coordinate (interi da 0 a 2)

corrispondenti alla mossa scelta. La procedura deve controllare che la

casella scelta sia libera (ovvero che contenga uno spazio) e, solo in

questo caso, inserirvi il carattere ‘X’. L’uso dell’aritmetica dei puntatori

e’ facoltativo.

void mossa_giocatore(char matrice[3][3]) {
 int i=0;
 int r=-1;
 int c=-1;
 printf("Turno del GIOCATORE. Dimmi in quale riga e in quale colonna , da 0 a 2, vuoi fare la tua mossa.\n",N);
 do {
	 do {
		if ((r<0 || r>2 || c<0 || c>2) && i>0)
		   printf("I dati precedenti non sono corretti!! Reinseriscili :\n");			
		printf("Dammi la riga\n");
		scanf("%d",&r);
		printf("Dammi la colonna\n");
		scanf("%d",&c);
		i+=1;
	 }
	 while (r<0 || r>2 || c<0 || c>2);
 }
 while (matrice[r][c]!=' ');
 matrice[r][c]='X';
}

ESERCIZIO 2

Implementare la procedura

void mossa_computer(char matrice[3][3]);

che scorra gli elementi della matrice e appena trovi una casella libera,

vi inserisca il carattere ‘O’. Se la scacchiera è completa, nessun

simbolo sara’ inserito. L’uso dell’aritmetica dei puntatori e’ facoltativo.

void mossa_computer(char matrice[3][3]) {
 int r;
 int c;
 printf("Turno del COMPUTER. Ora effettuerà una mossa.\n");
 for (r=0; r<2; r++)
	 for (c=0; c<2; c++)
		 if (matrice[r] [c]==' ') {
			matrice[r] [c]='O';
			return;	 
		 }

}

ESERCIZIO 3

Implementare la funzione

char verifica(char matrice[3][3]);

che controlli se c’è un vincitore. In particolare, la funzione deve scorrere

le righe, poi le colonne e poi le diagonali della scacchiera. Appena si

incontrano tre simboli uguali, allineati e diversi da ‘ ‘ (spazio), la funzione

deve restituire il carattere corrispondente al vincitore. Se non c’è ancora

alcun vincitore, la funzione deve restituire il carattere ‘ ‘ (spazio). L’uso

dell’aritmetica dei puntatori e’ facoltativo.

char verifica(char matrice[3][3]) {
int r,c,i;
int n=0;

i=0;
c=0;
for (r=0; r<2; r++) {
	for (c=1; c<2; c++)
		if (matrice[r][c]==matrice[r][c-1]) i=1;	
	if (i=1) return matrice[c][r];
}

r=0;
for (c=0; c<2; c++) {
	for (r=1; r<2; r++)
		if (matrice[r][c]==matrice[r-1][c]) i=1;	
	if (i=1) return matrice[c][r];
}

if (matrice[0][0]==matrice[1][1]==matrice[2][2]) return matrice[1][1];
if (matrice[0][2]==matrice[1][1]==matrice[2][0]) return matrice[1][1];

 for (r=0; r<2; r++)
	 for (c=0; c<2; c++)
		 if (matrice[r] [c]!=' ') n+=1;
 if (n==9) return 'P';   

return 'C';
}

Ovviamente il VERIFICA NON fà il suo dovere... :):P :sigh:

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

for (r=0; r<2; r++) {

r deve essere <= 2 o < 3 ;-)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Fosse solo quello il problema... <_<

...appena ho tempo proverò a stravolgere tutto...e che dio me la mandi buona!! :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Fosse solo quello il problema... <_<

...appena ho tempo proverò a stravolgere tutto...e che dio me la mandi buona!! :)

Altro errore è quello solito dell'assegnazione invece che il controllo d'ugaglianza...

negli if non devi usare l'operatore di assegnazione = ma l'operatore d'uguaglianza ==:

non if (i=1)...

ma if (i==1)...

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

..porca paletta... :ranting2:

...sarà buona norma che mi attacchi un pos-it sulla fronte con scritto NON = MA ==, così ogni qual volta che mi guardo allo specchio almeno me lo ricordo...

...uffi... :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un utente registrato per partecipare

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!


Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.


Accedi Ora
Accedi per seguire   
Seguaci 0