Newsgroup: it.comp.lang.c
Titolo: CODICE VIGLIACCO - HELP

qualcuno può dirmi cosa non va in questo programma
grazie
tripod_blee
codice:
/* INCLUDE */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define n 3
#define m 3
/*--------------------------------------------------------------------------
--------------*/
/* PROTOTIPI */
void INIZIALIZZA(int [][m]);
int SORTE (void);
void GIOCO (int [][m],int);
void VISUALIZZA(int [][m]);
char TEST(int [][m]);
/*--------------------------------------------------------------------------
--------------*/
/* MAIN */
main()
{
 int MT[n][m];
 int coin;
 char risp;
 INIZIALIZZA(MT);
 coin=SORTE();
 do
 {
  coin=( coin + 1 ) % 2;
  GIOCO(MT, coin);
  VISUALIZZA(MT);
  risp=TEST(MT);
  }while(risp=='f');
 return 0;
 }
/*--------------------------------------------------------------------------
--------------*/
/* FUNZIONI */
     /* INIZIALIZZA */
void INIZIALIZZA(int M[][m])
{
 int i,j;
 for (i=0;i<n;i++)
   {
  for (j=0;j<m;j++)
   {
  M[i][j]=9;
  }
  }
 }
     /* SORTE */
int SORTE()
{
 int moneta;
 srand(time(NULL));
 moneta=rand() % 2;
 return(moneta);
 }
     /* GIOCO */
void GIOCO(int M[][m], int turno)
{
 int valido=0, colomn, row;
 printf("\t\t\t\tPLAYER %d\n",turno);
 do
 {
  do
  {
 printf("INSERT ROW: (O/1/2)");
 scanf("%d",&row);
 }while(row!=0 && row!=1 && row!=2);
  do
  {
 printf("INSERT COLOMN: (O/1/2)");
 scanf("%d",&colomn);
 }while(colomn!=0 && colomn!=1 && colomn!=2);
  if (M[row][colomn]!=9)      {
     gotoxy(23,23);
     printf("INSERT AGAIN\n");
     valido=1;
      }
  else {
 M[row][colomn]=turno;
 printf("ROW %d COLOMN %d IS: %d\n",row,colomn,M[row][colomn]);
 }
  }while(valido==1);
 }
     /* VISUALIZZA */
void VISUALIZZA(int M[][m])
{
 int i, j;
 for (i = 0; i < n; i++)
   {
  printf (" --- --- ---\n");
  for (j = 0; j < m; j++)
    {
     if (M[i][j]==9) printf("|   ");
     else printf ("| %d ", M[i][j]);
     }
  printf ("|");
  printf ("\n");
  }
 printf (" --- --- ---\n\n");
 }
     /* TEST */
char TEST(int M[][m])
{
 int flag;
 char stop;
/* VITTORIA_PLAYER_1 */
 if ((M[0][0] + M[1][0] + M[2][0])==3 ) flag=1;
 if ((M[0][1] + M[1][1] + M[2][1])==3 ) flag=1;
 if ((M[0][2] + M[1][2] + M[2][2])==3 ) flag=1;
 if ((M[0][0] + M[0][1] + M[0][2])==3 ) flag=1;
 if ((M[1][0] + M[1][1] + M[1][2])==3 ) flag=1;
 if ((M[2][0] + M[2][1] + M[2][2])==3 ) flag=1;
 if ((M[0][0] + M[1][1] + M[2][2])==3 ) flag=1;
 if ((M[0][2] + M[1][1] + M[2][0])==3 ) flag=1;
 if (flag==1) {
     printf("PLAYER 1 WINS\n");
     stop='w';
     }
/* VITTORIA_PLAYER_0 */
 if ((M[0][0] + M[1][0] + M[2][0])==0 ) flag=0;
 if ((M[0][1] + M[1][1] + M[2][1])==0 ) flag=0;
 if ((M[0][2] + M[1][2] + M[2][2])==0 ) flag=0;
 if ((M[0][0] + M[0][1] + M[0][2])==0 ) flag=0;
 if ((M[1][0] + M[1][1] + M[1][2])==0 ) flag=0;
 if ((M[2][0] + M[2][1] + M[2][2])==0 ) flag=0;
 if ((M[0][0] + M[1][1] + M[2][2])==0 ) flag=0;
 if ((M[0][2] + M[1][1] + M[2][0])==0 ) flag=0;
 if (flag==0) {
     printf("PALYER 0 WINS\n");
     stop='w';
     }
 if (stop!='w') stop='f';
 return(stop);
 }

   {
qui bisogna inserire una nuova inizializzazione con
valido=0;
altrimenti, dopo il primo errore, non si esce piu' dal ciclo.
Poi non viene mai considerata l'eventualità che il gioco finisca in
parità...
per risolvere questo basta un contatore delle mosse, se ne sono state fatte
m*n senza che ci sia stato un vincitore...
Ciao
Riz