| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  04-08-2009, 13:04 | #1 | 
| Senior Member Iscritto dal: Jul 2003 Città: Trieste/Trst 
					Messaggi: 960
				 | 
				
				[C++] gioco Tria
			 
		Ciao a tutti !! Ho un problemino con questo semplice programma  Gioco della tria : si ha una tabella 3 x 3 e si vince se si ha tre pedine in fila ( per riga, per colonna o in diagonale. Codice: #include<Math.h>
#include<iostream.h>
#include<stdio.h>
#include <fstream.h>
#include <string.h>
#include <cstdlib> 
void inizializza( int tab [3][3] );
void scrivi( int tab [3][3]);
void mossa1( int tab[3][3]);
void mossa2( int tab [3][3]);
bool controllaDUEinfila(  int tab[3][3]  );
bool pieno ( int tab [3][3]);
bool finitor ( int tab [3][3]);
bool finitoc ( int tab [3][3]);
bool finitod ( int tab [3][3]);
bool finito( int tab [3][3] );
// programma -  variabili globali:
int casella [3][3];
int ri1, co1; // mossa giocatore
int ri2, co2; // mossa computer
int chi; // variabile posizionata nei test, dice  chi vince
//random 
int random() {        
     int x =  rand()%3 ;
     return x;
  
     
  } 
// inizializza
    void inizializza( int tab [3][3] ) {
    for(int ri = 0; ri < 3; ri++)
     for(int co = 0; co <  3; co++)
          tab[ri][co] = 0;
} 
// scrivi
    void scrivi( int tab [3][3] ){
    cout<<"------------------tabella"<<endl;
    for(int i = 0; i < 3; i++) { // tab.length
       for(int j = 0; j < 3; j++)  // tab[i].length
          {    cout<<" "<<tab[i][j];    }
        cout<<"\n";
     } // for i
     cout<<"-----------------------\n"<<endl;
} 
// mossa1
    void mossa1( int tab[3][3] ){
    // mossa del giocatore, inserita da tastiera
    bool mossaOk;
    do{ //   ripeti
      scrivi(tab);   //scrive tabella
        cout<<("inserisci prima indice riga: ");
        cin>>ri1;
        cout<<("inserisci ora indice colonna: ");
        cin>>co1 ; 
        mossaOk=true;
        if( ri1<0 ||  ri1>2 || co1<0 || co1>2 )
            { cout<<("err in mossa");
              mossaOk=false;
            }
        if ( tab[ri1][co1] != 0 )
           { cout<<("casella occupata\n\n");
              mossaOk=false;
         }
     } while( ! mossaOk );
     // ora mossa ok, memorizza questa mossa:
     tab[ri1][co1]=1; 
} 
// mossa computer
    void mossa2( int tab [3][3] ){
  if ( controllaDUEinfila(tab)) { // due pedine utente in fila 
    if( tab[0][0]==tab[1][1]&& tab[1][1] ==1 && tab[2][2] ==0 ) {
           ri2=2; co2=2;  tab[ri2][co2]=2;
           }//ifd
           
    else if(tab[1][1]==tab[2][2]&& tab[1][1] ==1 && tab[0][0] ==0 ) {
            ri2=0; co2=0; tab[ri2][co2]=2;  }
    else if( tab[0][2]==tab[1][1]&& tab[1][1] ==1 && tab[2][0] ==0) {
           ri2=2; co2=0; tab[ri2][co2]=2; }
   else if(tab[1][1]==tab[2][0]&& tab[1][1] ==1 && tab[0][2] ==0) {
            ri2=0; co2=2; tab[ri2][co2]=2; }
 
            
          } //if controlla        
                   
   if ( controllaDUEinfila(tab)) {  } //  due pedine PC in fila 
       
  do {  
    
         ri2= random();
         co2=random(); 
    } while ( ( tab[ri2][co2]!= 0 ) );
    tab[ri2][co2]=2; // memorizza la scelta computer
} 
 
// finito riga
    bool finitor ( int tab [3][3] ){
    bool fin1,fin2,fin=false;
    for(int r = 0; r < 3; r++) {
      fin1 = tab[r][0]==tab[r][1];
      fin2 = tab[r][1]==tab[r][2];
      if( fin1 && fin2 &&  ( tab[r][1] !=0)) {
         chi = tab[r][1];
         return true; // riga piena
         } // if
     } // for
    return false;
} 
// pieno
    bool pieno ( int tab [3][3] ){
  if ( tab[3][3]>14 ){      return true;
        }
        return  false;
}
// finito colonna
    bool finitoc ( int tab [3][3] ){
    bool fin1,fin2,fin=false;
    for(int c = 0; c < 3; c++) {
      fin1 = tab[0][c]==tab[1][c];
      fin2 = tab[1][c]==tab[2][c];
      if( fin1 && fin2 &&  ( tab[1][c] !=0)) {
         chi = tab[1][c];
         return true; // colonna piena
         } // if
     } // for
  
    return fin;
} 
// finito diagonale 
    bool finitod ( int tab [3][3] ){
    bool fin1,fin2,fin=false;
      fin1 = tab[0][0]==tab[1][1];
      fin2 = tab[1][1]==tab[2][2];
      if( fin1 && fin2 &&  ( tab[1][1] !=0) ) {
          chi = tab[1][1];
          return true; // diagonale piena
      } // if
      if ( ( tab[0][2]==tab[1][1] ) && ( tab[1][1]==tab[2][0] ) && ( tab[1][1] !=0) ) {
      chi = tab[1][1];
          return true; 
          } //if2
   return fin ; 
} 
// CONTROLLO PERICOLO DI TRIA
bool    controllaDUEinfila(  int tab[3][3]  ) {
    if( (tab[0][0]==tab[1][1]) || (tab[1][1]==tab[2][2])&& ( tab[1][1] !=0  )) {
      
          return true; // diagonale 1
      } // if
      if ( ( tab[0][2]==tab[1][1] ) && ( tab[1][1]==tab[2][0] ) && ( tab[1][1] !=0  ) ) {
      
          return true; 
          } //// diagonale 2
    else  return false ;
}
// finito
    bool finito( int tab [3][3]  ){
     bool fi, fip,fir,fic,fid;
     fip = pieno( tab );
     fir = finitor( tab );
     fic = finitoc( tab );
     fid = finitod( tab );
     fi = fip || fir || fic || fid;
     return fi;
} 
//main del programma 
int  main(  ) {
   // crea una matrice  di numeri interi  3 x 3;
   inizializza( casella );
   scrivi( casella );
   do {
    
     mossa1(casella);
     // aspetta mossa del giocatore
     if(finito(casella)) break;
     // fai mossa calcolatore cioe' scegli a caso
     // una casella libera:
   mossa2( casella);
   } while( ! finito( casella)  );
   scrivi( casella );
   if( chi == 0 )    cout<<(" pieno, pari \n");
   else if( chi == 1 )   cout<<(" HAI VINTO !! \n");
   else    cout<<(" HO VINTO IO  !! \n");
   getchar();
   getchar(); 
   return 0;
}e successivamente nella mossa del pc ; Per adesso ho cercato di far controllare solo la diagonale, mi spiego: se la io ( utente ) ho due pedine nella diagonale il pc deve occupare la casella ( se non e già occupata ) cosi da impedirmi di fare tria. Sarà sicuramente un problema stupide però non riesco a venirne a capo   CiauZ 
				__________________ Se ti viene voglia di lavorare, siediti vedrai che ti passa     | 
|   |   | 
|  04-08-2009, 23:13 | #2 | 
| Registered User Iscritto dal: Aug 2006 
					Messaggi: 305
				 | 
		e il problema quale sarebbe? Procedere in questo modo porta ad avere un programma anelastico, e non "intelligente". se stai cercando un algoritmo per risolvere il gioco del tris, ti conviene dare un'occhiata alla teoria dei giochi, un ramo dell'intelligenza artificiale. Ultima modifica di Barbalbero : 04-08-2009 alle 23:16. | 
|   |   | 
|  04-08-2009, 23:42 | #3 | |
| Senior Member Iscritto dal: Jul 2003 Città: Trieste/Trst 
					Messaggi: 960
				 | Quote: 
   CiauZ 
				__________________ Se ti viene voglia di lavorare, siediti vedrai che ti passa     | |
|   |   | 
|  05-08-2009, 00:08 | #4 | 
| Senior Member Iscritto dal: Mar 2007 
					Messaggi: 384
				 | 
		Ora arrivo io e dico l'eresia di turno   ... e se provassi a considerare il problema al rovescio? overo in base a dove hai posizionato il pezzo controlli se su quella riga o quella colonna e casomai le diagonali vi è la possibilità di fare il tris, se si il pc la intercetta... se per caso questi tre controlli risultano falsi gli fai mettere il pezzo in maniera randomica... P.S. no non ho mai toccato l'argomento teoria dei giochi  . | 
|   |   | 
|  05-08-2009, 07:53 | #5 | |
| Junior Member Iscritto dal: Jun 2009 
					Messaggi: 2
				 | 
				
				OT su TdG
			 Quote: 
 Volevo osservare che è riduttivo ritenere la TdG un ramo dell'intelligenza artificiale. Ci sono delle interessanti intersezioni fra TdG e intelligenza artificiale, ma la TdG è anche altro, molto altro: principalmente fornisce un modello chiave per la teoria economica, e in genere per le scienze sociali, ma ci sono anche i giochi evolutivi, e interessanti applicazioni in filosofia, etica e logica. Per non parlare dei "giochi topologici". Ultima modifica di Fioravante Patrone : 05-08-2009 alle 08:12. | |
|   |   | 
|  06-08-2009, 12:06 | #6 | |
| Senior Member Iscritto dal: Jul 2003 Città: Trieste/Trst 
					Messaggi: 960
				 | Quote: 
 mi controlla se ci sono due pedine in fila ( indifferentemente se pedina del pc e pedina del giocatore ) !! E nella void mossa2( int tab [3][3] ){ // ovvero mossa del pc mettevo due if uno mi controllava se cerano due pedine giocatero in fila ( se vero ) metteva la pedina in modo da bloccare il tris ! il secondo if mi controllava se cerano 2 pedine del pc in fila ( se vero ) metteva la pedina in modo da far tris. Il problema e che non so dove sto sbagliando ? sarà un problema di codice ... magari una sciocchezza  ... Se qualche anima pia me lo controlla e mi segnala l'errore o errori gli sarei molto grato   CiauZ 
				__________________ Se ti viene voglia di lavorare, siediti vedrai che ti passa     | |
|   |   | 
|  06-08-2009, 12:55 | #7 | |
| Senior Member Iscritto dal: Feb 2007 Città: Verona 
					Messaggi: 1060
				 | Quote: 
 Dov'è che il tuo programma fallisce? Per tutto il resto, c'è Backtracking 
				__________________ | |
|   |   | 
|  06-08-2009, 13:44 | #8 | |
| Senior Member Iscritto dal: Jul 2003 Città: Trieste/Trst 
					Messaggi: 960
				 | Quote: 
  tnx. Allora il mio programma non riesce a controllare se due pedine sono in fila ovvero se metto due pedine in fila il pc non mi blocca la combinazione per fare tria. Mette rempre a random.   CiauZ 
				__________________ Se ti viene voglia di lavorare, siediti vedrai che ti passa     | |
|   |   | 
|  06-08-2009, 15:55 | #9 | 
| Senior Member Iscritto dal: Feb 2007 Città: Verona 
					Messaggi: 1060
				 | 
		
Ma 'pedine in fila' vuol dire solo in diagonale (cioè quello per cui è scritto il codice) oppure vuoi dire che non funziona per file non in diagonale e quindi vuoi aggiungere questo tipo di controllo?
		 
				__________________ | 
|   |   | 
|  06-08-2009, 16:16 | #10 | |
| Senior Member Iscritto dal: Jul 2003 Città: Trieste/Trst 
					Messaggi: 960
				 | Quote: 
  Ho fatto una piccola modifica alla random !! Codice: int random() {  
    srand(time(0)) ; 
 int x =  rand()%3 ;
     return x;
  
     
  }
				__________________ Se ti viene voglia di lavorare, siediti vedrai che ti passa     | |
|   |   | 
|  06-08-2009, 17:04 | #11 | 
| Senior Member Iscritto dal: Feb 2007 Città: Verona 
					Messaggi: 1060
				 | Codice: bool    controllaDUEinfila(  int tab[3][3]  ) {
    if( (tab[0][0]==tab[1][1]) || (tab[1][1]==tab[2][2])&& ( tab[1][1] !=0  )) {
      
          return true; // diagonale 1
      } // if
      if ( ( tab[0][2]==tab[1][1] ) && ( tab[1][1]==tab[2][0] ) && ( tab[1][1] !=0  ) ) {
      
          return true; 
          } //// diagonale 2
    else  return false ;
}Inoltre io metterei un paio di parentesi in più, non ricordandomi la precedenza degli operatori booleani   
				__________________ | 
|   |   | 
|  06-08-2009, 21:36 | #12 | |
| Senior Member Iscritto dal: Jul 2003 Città: Trieste/Trst 
					Messaggi: 960
				 | Quote: 
 Ci ho smanettato un po e sembra che funzioni ... Codice:  
void inizializza( int tab [3][3] );
void scrivi( int tab [3][3]);
void mossa1( int tab[3][3]);
void mossa2( int tab [3][3]);
bool controllaDUEinfila( int tab[3][3]  );
bool pieno ( int tab [3][3]);
bool finitor ( int tab [3][3]);
bool finitoc ( int tab [3][3]);
bool finitod ( int tab [3][3]);
bool finito( int tab [3][3] );
bool controllaDUEinfila1( int tab[3][3]);
// programma -  variabili globali:
int casella [3][3];
int ri1, co1; // mossa giocatore
int ri2, co2; // mossa computer
int chi; // variabile posizionata nei test, dice  chi vince
//random 
int random() {  
    srand(time(0)) ; 
 int x =  rand()%3 ;
     return x;
  
     
  } 
// inizializza
    void inizializza( int tab [3][3] ) {
    for(int ri = 0; ri < 3; ri++)
     for(int co = 0; co <  3; co++)
          tab[ri][co] = 0;
} 
// scrivi
    void scrivi( int tab [3][3] ){
    cout<<"------------------tabella"<<endl;
    for(int i = 0; i < 3; i++) { // tab.length
       for(int j = 0; j < 3; j++)  // tab[i].length
          {    cout<<" "<<tab[i][j];    }
        cout<<"\n";
     } // for i
     cout<<"-----------------------\n"<<endl;
} 
// mossa1
    void mossa1( int tab[3][3] ){
    // mossa del giocatore, inserita da tastiera
    bool mossaOk;
    do{ //   ripeti
      scrivi(tab);   //scrive tabella
        cout<<("inserisci prima indice riga: ");
        cin>>ri1;
        cout<<("inserisci ora indice colonna: ");
        cin>>co1 ; 
        mossaOk=true;
        if( ri1<0 ||  ri1>2 || co1<0 || co1>2 )
            { cout<<("err in mossa");
              mossaOk=false;
            }
        if ( tab[ri1][co1] != 0 )
           { cout<<("casella occupata\n\n");
              mossaOk=false;
         }
     } while( ! mossaOk );
     // ora mossa ok, memorizza questa mossa:
     tab[ri1][co1]=1; 
} 
// mossa2
    void mossa2( int tab [3][3] ){
  if ( controllaDUEinfila(tab)==true) {
       
if ( (tab[0][0]==tab[0][1] && tab[0][1] ==1) && tab[0][2] ==0  ){ 
      ri2=0;  co2=2; 
           }//ifr1a
     else    if ( (tab[1][0]==tab[1][1] && tab[1][1] ==1) && tab[1][2] ==0  ){ 
      ri2=1;  co2=2; 
           }//ifr1b
      else  if ( (tab[2][0]==tab[2][1] && tab[2][1] ==1) && tab[2][2] ==0  ){ 
      ri2=2;  co2=2; 
           }//ifr1c
  else  if ( (tab[0][1]==tab[0][2] && tab[0][1] ==1) && tab[0][2] ==0  ) { 
         ri2=0; co2=0;  
           }//ifr2a
 else if ( (tab[1][1]==tab[1][2] && tab[1][1] ==1) && tab[1][2] ==0  ) { 
         ri2=1; co2=0;  
           }//ifr2b  
      else   if ( (tab[2][1]==tab[2][2] && tab[2][1] ==1) && tab[2][2] ==0  ) { 
         ri2=2; co2=0;  
           }//ifr2c   
 else   if ( (tab[0][0]==tab[1][0]&& tab[1][0] ==1) && tab[2][0] ==0) {
           ri2=2; co2=0; 
           }//ifc1a
      else   if ( (tab[0][1]==tab[1][1]&& tab[1][1] ==1) && tab[2][1] ==0) {
           ri2=2; co2=1; 
           }//ifc1b
   else   if ( (tab[0][2]==tab[1][2]&& tab[1][2] ==1) && tab[2][2] ==0) {
           ri2=2; co2=2; 
           }//ifc1c
  else  if ( (tab[1][0]==tab[2][0]&& tab[1][0] ==1) && tab[0][0] ==0) {
           ri2=0; co2=0; 
           } //ifc2a
 else if ( (tab[1][1]==tab[2][1]&& tab[1][1] ==1) && tab[0][1] ==0) {
           ri2=0; co2=1; 
           } //ifc2b
 else if ( (tab[1][2]==tab[2][2]&& tab[1][2] ==1) && tab[0][2] ==0) {
           ri2=0; co2=2; 
           } //ifc2c
 else if( (tab[0][0]==tab[1][1]&& tab[1][1] ==1) && tab[2][2] ==0 ) {
           ri2=2; co2=2;  
          }//ifd1       
 else if((tab[1][1]==tab[2][2]&& tab[1][1] ==1) && tab[0][0] ==0 ) {
            ri2=0; co2=0;   }//ifd2
 else if( (tab[0][2]==tab[1][1]&& tab[1][1] ==1) && tab[2][0] ==0) {
           ri2=2; co2=0; }//ifd3
 else if((tab[1][1]==tab[2][0]&& tab[1][1] ==1) && tab[0][2] ==0) {
            ri2=0; co2=2;  }//ifd4
  
             } //if controlla     
 
 
 if ( controllaDUEinfila1(tab)==true) {  //controlla mie pedine   
 
if ( (tab[0][0]==tab[0][1] && tab[0][1] ==2) && tab[0][2] ==0  ){ 
      ri2=0;  co2=2; 
           }//ifr1a
     else    if ( (tab[1][0]==tab[1][1] && tab[1][1] ==2) && tab[1][2] ==0  ){ 
      ri2=1;  co2=2; 
           }//ifr1b
    else    if ( (tab[2][0]==tab[2][1] && tab[2][1] ==2) && tab[2][2] ==0  ){ 
      ri2=2;  co2=2; 
           }//ifr1c
  else  if ( (tab[0][1]==tab[0][2] && tab[0][1] ==2) && tab[0][2] ==0  ) { 
         ri2=0; co2=0;  
           }//ifr2a
       else    if ( (tab[1][1]==tab[1][2] && tab[1][1] ==2) && tab[1][2] ==0  ) { 
         ri2=1; co2=0;  
           }//ifr2b  
      else     if ( (tab[2][1]==tab[2][2] && tab[2][1] ==2) && tab[2][2] ==0  ) { 
         ri2=2; co2=0;  
           }//ifr2c   
            
  else  if ( (tab[0][0]==tab[1][0]&& tab[1][0] ==2) && tab[2][0] ==0) {
           ri2=2; co2=0; 
           }//ifc1a
      else    if ( (tab[0][1]==tab[1][1]&& tab[1][1] ==2) && tab[2][1] ==0) {
           ri2=2; co2=1; 
           }//ifc1b
    else  if ( (tab[0][2]==tab[1][2]&& tab[1][2] ==2) && tab[2][2] ==0) {
           ri2=2; co2=2; 
           }//ifc1c
   else if ( (tab[1][0]==tab[2][0]&& tab[1][0] ==2) && tab[0][0] ==0) {
           ri2=0; co2=0; 
           } //ifc2a
else if ( (tab[1][1]==tab[2][1]&& tab[1][1] ==2) && tab[0][1] ==0) {
           ri2=0; co2=1; 
           } //ifc2b
   else  if ( (tab[1][2]==tab[2][2]&& tab[1][2] ==2) && tab[0][2] ==0) {
           ri2=0; co2=2; 
           } //ifc2c
   else   if( (tab[0][0]==tab[1][1]&& tab[1][1] ==2) && tab[2][2] ==0 ) {
           ri2=2; co2=2;  
          }//ifd1       
  else if(tab[1][1]==tab[2][2]&& tab[1][1] ==2 && tab[0][0] ==0 ) {
            ri2=0; co2=0;   }//ifd2
  else if( tab[0][2]==tab[1][1]&& tab[1][1] ==2 && tab[2][0] ==0) {
           ri2=2; co2=0; }//ifd3
  else if(tab[1][1]==tab[2][0]&& tab[1][1] ==2 && tab[0][2] ==0) {
            ri2=0; co2=2;  }//ifd4     
}
   while ( ( tab[ri2][co2]!= 0 ) ) {  
         ri2= random();
         co2=random(); 
    }  
   tab[ri2][co2]=2; // memorizza la scelta computer
}
 
// finito riga
    bool finitor ( int tab [3][3] ){
    bool fin1,fin2,fin=false;
    for(int r = 0; r < 3; r++) {
      fin1 = tab[r][0]==tab[r][1];
      fin2 = tab[r][1]==tab[r][2];
      if( fin1 && fin2 &&  ( tab[r][1] !=0)) {
         chi = tab[r][1];
         return true; // riga piena
         } // if
     } // for
    return false;
} 
// pieno
    bool pieno ( int tab [3][3] ){
  if ( tab[3][3]>14 ){      return true;
        }
        return  false;
}
// finito colonna
    bool finitoc ( int tab [3][3] ){
    bool fin1,fin2,fin=false;
    for(int c = 0; c < 3; c++) {
      fin1 = tab[0][c]==tab[1][c];
      fin2 = tab[1][c]==tab[2][c];
      if( fin1 && fin2 &&  ( tab[1][c] !=0)) {
         chi = tab[1][c];
         return true; // colonna piena
         } // if
     } // for
  
    return fin;
} 
// finito diagonale 
    bool finitod ( int tab [3][3] ){
    bool fin1,fin2,fin=false;
      fin1 = tab[0][0]==tab[1][1];
      fin2 = tab[1][1]==tab[2][2];
      if( fin1 && fin2 &&  ( tab[1][1] !=0) ) {
          chi = tab[1][1];
          return true; // diagonale piena
      } // if
      if ( ( tab[0][2]==tab[1][1] ) && ( tab[1][1]==tab[2][0] ) && ( tab[1][1] !=0) ) {
      chi = tab[1][1];
          return true; 
          } //if2
   return fin ; 
} 
// CONTROLLO PERICOLO DI TRIA
bool    controllaDUEinfila(  int tab[3][3]  ) {
    
      if( ((tab[0][0]==tab[0][1]) || (tab[0][1]==tab[0][2])) && ( tab[0][1] !=0 ) ) {
         return true; // riga 
         } // if
      if(((tab[1][0]==tab[1][1]) || (tab[1][1]==tab[1][2])) && ( tab[1][1] !=0 ) ) {
         return true; // riga 
         } // if
   if(((tab[2][0]==tab[2][1]) || (tab[2][1]==tab[2][2])) && ( tab[2][1] !=0 ) ) {
         return true; // riga 
         } // if
      if( ((tab[0][0]==tab[1][0]) || (tab[1][0]==tab[2][0])) && ( tab[1][0] !=0  ) ) {
             return true; //colonna
         } // if
    
     if( ((tab[0][1]==tab[1][1]) || (tab[1][1]==tab[2][1])) && ( tab[1][1] !=0  ) ) {
               return true; //colonna
         } // if
  
     if( ((tab[0][2]==tab[1][2]) || (tab[1][2]==tab[2][2])) && ( tab[1][2] !=0  ) ) {
      
         return true; //colonna
         } // if
  if( ((tab[0][0]==tab[1][1]) || (tab[1][1]==tab[2][2])) && ( tab[1][1] !=0  )) {
      
          return true; // diagonale 1
      } // if
    if ( (( tab[0][2]==tab[1][1] ) || ( tab[1][1]==tab[2][0] )) && ( tab[1][1] !=0  ) ) {
      
          return true; 
          } //// diagonale 2
           
   else return false ;
}
bool    controllaDUEinfila1(  int tab[3][3]  ) {
    
      if( ((tab[0][0]==tab[0][1]) || (tab[0][1]==tab[0][2])) && ( tab[0][1] !=0 ) ) {
         return true; // riga 
         } // if
     if(((tab[1][0]==tab[1][1]) || (tab[1][1]==tab[1][2])) && ( tab[1][1] !=0 ) ) {
         return true; // riga 
         } // if
    if(((tab[2][0]==tab[2][1]) || (tab[2][1]==tab[2][2])) && ( tab[2][1] !=0 ) ) {
         return true; // riga 
         } // if
     if( ((tab[0][0]==tab[1][0]) || (tab[1][0]==tab[2][0])) && ( tab[1][0] !=0  ) ) {
             return true; //colonna
         } // if
    
    if( ((tab[0][1]==tab[1][1]) || (tab[1][1]==tab[2][1])) && ( tab[1][1] !=0  ) ) {
               return true; //colonna
         } // if
  
    if( ((tab[0][2]==tab[1][2]) || (tab[1][2]==tab[2][2])) && ( tab[1][2] !=0  ) ) {
      
         return true; //colonna
         } // if
   if( ((tab[0][0]==tab[1][1]) || (tab[1][1]==tab[2][2])) && ( tab[1][1] !=0  )) {
      
          return true; // diagonale 1
      } // if
      if ( (( tab[0][2]==tab[1][1] ) || ( tab[1][1]==tab[2][0] )) && ( tab[1][1] !=0  ) ) {
      
          return true; 
          } //// diagonale 2
           
   else return false ;
}
// finito
    bool finito( int tab [3][3]  ){
     bool fi, fip,fir,fic,fid;
     fip = pieno( tab );
     fir = finitor( tab );
     fic = finitoc( tab );
     fid = finitod( tab );
     fi = fip || fir || fic || fid;
     return fi;
} 
//main del programma 
int  main(  ) {
   // crea una matrice  di numeri interi  3 x 3;
   inizializza( casella );
   scrivi( casella );
   do {
    
     mossa1(casella);
     // aspetta mossa del giocatore
     if(finito(casella)) break;
     // fai mossa calcolatore cioe' scegli a caso
     // una casella libera:
   mossa2( casella);
   } while( ! finito( casella)  );
   scrivi( casella );
   if( chi == 0 )    cout<<(" pieno, pari \n");
   else if( chi == 1 )   cout<<(" HAI VINTO !! \n");
   else    cout<<(" HO VINTO IO  !! \n");
   getchar();
   getchar(); 
   return 0;
}Codice: bool pieno ( int tab [3][3] ){
  if ( tab[3][3]>14 ){      return true;
        }
        return  false;
}CiauZ 
				__________________ Se ti viene voglia di lavorare, siediti vedrai che ti passa     | |
|   |   | 
|  12-08-2009, 18:41 | #13 | 
| Senior Member Iscritto dal: Jul 2003 Città: Trieste/Trst 
					Messaggi: 960
				 | 
		up  [/code] Ho una domanda per tabella piena io ho fatto cosi : Codice: bool pieno ( int tab [3][3] ){
  if ( tab[3][3]>14 ){      return true;
        }
        return  false;
}CiauZ 
				__________________ Se ti viene voglia di lavorare, siediti vedrai che ti passa     | 
|   |   | 
|  13-08-2009, 20:57 | #14 | 
| Senior Member Iscritto dal: Jul 2003 Città: Trieste/Trst 
					Messaggi: 960
				 | 
		Fatto da solo   era una sciocchezza   Codice:    
bool pieno ( int tab [3][3] ){
      for(int r = 0; r < 3; r++) {    
  if ( tab[r][1] ==0 ){      return false;
        }
   else if ( tab[r][2] ==0  ){      return false;
        }
     else   if ( tab[r][3] ==0  ){      return false;
        }    }
        return  true;
}Bye 
				__________________ Se ti viene voglia di lavorare, siediti vedrai che ti passa     | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 16:54.









 
		 
		 
		 
		










 
  
 



 
                        
                        










