GIOCO TRIS CON PROGRAMMAZIONE AD OGGETTI

di il
5 risposte

GIOCO TRIS CON PROGRAMMAZIONE AD OGGETTI

Ragazzi ciao a tutti, sto studiando il C++ e nel libro che posseggo "il deitel " mi viene chiesto di realizzare il gioco del Tris utilizzando gli oggetti,
volevo un vostro parere tecnico su come ho strutturato il codice.
Premessa: la mia conoscenza della programmazione ad oggetti è basilare, devo ancora approfondire l'argomento, ecco il codice:
IL MAIN:

#include <iostream>
#include <cstdlib>
#include <conio.h>
#include "tris.h"
using std::cout;
using std::cin;
using std::endl;
using std::string;

 tris tris;
 string giocatore1,giocatore2;

int main(){
   cout << "\nINSERIRE IL NOME DEL PRIMO GIOCATORE: ";
    cin >> giocatore1;
   cout << "\nINSERIRE IL NOME DEL SECONDO GIOCATORE: ";
    cin >> giocatore2;
  for(int i = 0; i < 15; i++){
  tris.get_table();
  tris.player_1(giocatore1);
  tris.get_table();
  tris.setting_point_1();
    if(tris.P_giocatore1 == 1){
      cout << "\nHA VINTO " << giocatore1  << " !!!!" << endl;
      break;
   }
  tris.player_2(giocatore2);
  tris.setting_point_2();
    if(tris.P_giocatore2 == 1){
      cout << "\nHA VINTO " << giocatore2 << " !!!!" << endl;
      break;
    }
  }
return 0;
}

IL file.h:

#ifndef TRIS_H_INCLUDED
#define TRIS_H_INCLUDED
using std::string;
class tris{
   public:
     tris();
     void player_1(string);
     void player_2(string);
     void set_game();
     void get_table();
     void setting_point_1();
     void setting_point_2();
     void controll_game();
     int P_giocatore1;
     int P_giocatore2;



   private:

      char table[3][5] =   {{' ','|',' ','|',' '},
                            {' ','|',' ','|',' '},
                            {' ','|',' ','|',' '}};

};


#endif // TRIS_H_INCLUDED



il CPP:

#include <iostream>
#include <cstdlib>
#include "tris.h"
#include <conio.h>
using std::cout;
using std::cin;
using std::endl;
using std::string;


   tris::tris(){P_giocatore1 = 0, P_giocatore2 = 0;}

   void tris::get_table(){
        cout << "\n";
      for(int x = 0; x < 3; x++){
          cout << "\t\t\t\t";
        for(int y = 0; y < 5; y++){
            cout << table[x][y];
               if(y == 4){
                 cout << endl;
               }
        }
      }
   }

////TURN GIOCATORE1/////////////////////////////////////////
   void tris::player_1(string nome1){
     int assegnazione = 0,flag_full = 0;
      bool flag_scelta = false;

    do{
       for(int x = 0; x < 3; x++){
          for(int y = 0; y < 5; y++){
             if(table[x][y]!=' '){
                ++flag_full;

             }
          }
       }
     if(flag_full == 15){
        cout << " \nPARTITA FINITA IN PARITA!" <<endl;
         getch();
         break;
     }

     cout << "\n" << nome1 << " TOCCA A TE: " << endl;
        cin >> assegnazione;
         switch(assegnazione){
             case 7:
                if(table[0][0] != 'X' && table[0][0] != 'O'){
                    table[0][0] = 'X';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

            case 8:
                if(table[0][2] != 'X' && table[0][2] != 'O'){
                    table[0][2] = 'X';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 9:
                if(table[0][4] != 'X' && table[0][4] != 'O'){
                    table[0][4] = 'X';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 4:
                if(table[1][0] != 'X' && table[1][0] != 'O'){
                    table[1][0] = 'X';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 5:
                if(table[1][2] != 'X' && table[1][2] != 'O'){
                    table[1][2] = 'X';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 6:
                if(table[1][4] != 'X' && table[1][4] != 'O'){
                    table[1][4] = 'X';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 1:
                if(table[2][0] != 'X' && table[2][0] != 'O'){
                    table[2][0] = 'X';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 2:
                if(table[2][2] != 'X' && table[2][2] != 'O'){
                    table[2][2] = 'X';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 3:
                if(table[2][4] != 'X' && table[2][4] != 'O'){
                    table[2][4] = 'X';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             default:
                cout << "\nSCELTA NON VALIDA RIPROVA!" <<endl;
            }

    }while(flag_scelta == false);

   system("cls");
   }
////TURNO SECONDO GIOCATORE////////////////////////////////////
   void tris::player_2(string nome2){
     int assegnazione = 0, flag_full = 0;
     bool flag_scelta = false;
     do{
       for(int x = 0; x < 3; x++){
          for(int y = 0; y < 5; y++){
             if(table[x][y]!=' '){
                ++flag_full;

             }
          }
       }
     if(flag_full == 15){
        cout << " \nPARTITA FINITA IN PARITA!" <<endl;
         getch();
         break;
     }



     cout << "\n" << nome2 <<" TOCCA A TE: " << endl;
        cin >> assegnazione;
         switch(assegnazione){
             case 7:
                if(table[0][0] != 'X' && table[0][0] != 'O'){
                    table[0][0] = 'O';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

            case 8:
                if(table[0][2] != 'X' && table[0][2] != 'O'){
                    table[0][2] = 'O';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 9:
                if(table[0][4] != 'X' && table[0][4] != 'O'){
                    table[0][4] = 'O';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 4:
                if(table[1][0] != 'X' && table[1][0] != 'O'){
                    table[1][0] = 'O';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 5:
                if(table[1][2] != 'X' && table[1][2] != 'O'){
                    table[1][2] = 'O';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 6:
                if(table[1][4] != 'X' && table[1][4] != 'O'){
                    table[1][4] = 'O';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 1:
                if(table[2][0] != 'X' && table[2][0] != 'O'){
                    table[2][0] = 'O';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 2:
                if(table[2][2] != 'X' && table[2][2] != 'O'){
                    table[2][2] = 'O';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             case 3:
                if(table[2][4] != 'X' && table[2][4] != 'O'){
                    table[2][4] = 'O';
                    flag_scelta = true;
                }
                else
                 cout <<"\nCASELLA OCCUPATA!!" << endl;
             break;

             default:
                cout << "\nSCELTA NON VALIDA RIPROVA!" <<endl;
            }

    }while(flag_scelta == false);

   system("cls");
   }

////////////////////////////CONTROLLO GIOCATORE 1///////////////////////////////////

   void tris::setting_point_1(){
     bool flag_X = false;
     for(int x = 0; x < 3;  x++){
       for(int y = 0; y < 5; y++){
 /////////////////////////////TRIS ORIZZONTALE///////////////////////////////////////
         if(table[0][0] == 'X' && table[0][2] == 'X' && table[0][4] == 'X'){
           flag_X = true;
            break;
         }
          if(table[1][0] == 'X' && table[1][2] == 'X' && table[1][4] == 'X'){
             flag_X = true;
              break;
          }
          if(table[2][0] == 'X' && table[2][2] == 'X' && table[2][4] == 'X'){
           flag_X = true;
            break;
         }
//////////////////////////////////TRIS VERTICALE////////////////////////////////////
          if(table[0][0] == 'X' && table[1][0] == 'X' && table[2][0] == 'X'){
           flag_X = true;
            break;
         }
         if(table[0][2] == 'X' && table[1][2] == 'X' && table[2][2] == 'X'){
           flag_X = true;
            break;
         }
         if(table[0][4] == 'X' && table[1][4] == 'X' && table[2][4] == 'X'){
           flag_X = true;
            break;
         }
////////////////////////////// TRIS OBLIQUO///////////////////////////////////////
         if(table[0][0] == 'X' && table[1][2] == 'X' && table[2][4] == 'X'){
           flag_X = true;
            break;
         }
         if(table[0][4] == 'X' && table[1][2] == 'X' && table[2][0] == 'X'){
           flag_X = true;
            break;
         }
      }
    }
    if(flag_X == true){
       ++P_giocatore1;
    }

}

////////////////////////////CONTROLLO GIOCATORE 2///////////////////////////////////

   void tris::setting_point_2(){
     bool flag_X = false;
     for(int x = 0; x < 3;  x++){
       for(int y = 0; y < 5; y++){
 /////////////////////////////TRIS ORIZZONTALE///////////////////////////////////////
         if(table[0][0] == 'O' && table[0][2] == 'O' && table[0][4] == 'O'){
           flag_X = true;
            break;
         }
          if(table[1][0] == 'O' && table[1][2] == 'O' && table[1][4] == 'O'){
             flag_X = true;
              break;
          }
          if(table[2][0] == 'O' && table[2][2] == 'O' && table[2][4] == 'O'){
           flag_X = true;
            break;
         }
//////////////////////////////////TRIS VERTICALE////////////////////////////////////
          if(table[0][0] == 'O' && table[1][0] == 'O' && table[2][0] == 'O'){
           flag_X = true;
            break;
         }
         if(table[0][2] == 'O' && table[1][2] == 'O' && table[2][2] == 'O'){
           flag_X = true;
            break;
         }
         if(table[0][4] == 'O' && table[1][4] == 'O' && table[2][4] == 'O'){
           flag_X = true;
            break;
         }
////////////////////////////// TRIS OBLIQUO///////////////////////////////////////
         if(table[0][0] == 'O' && table[1][2] == 'O' && table[2][4] == 'O'){
           flag_X = true;
            break;
         }
         if(table[0][4] == 'O' && table[1][2] == 'O' && table[2][0] == 'O'){
           flag_X = true;
            break;
         }
      }
    }
    if(flag_X == true){
       ++P_giocatore2;
    }

}



5 Risposte

  • Re: GIOCO TRIS CON PROGRAMMAZIONE AD OGGETTI

    Nessuno degli esperti puo darmi quache "dritta", parere, critica o consiglio?
  • Re: GIOCO TRIS CON PROGRAMMAZIONE AD OGGETTI

    Come ho sottolineato ad altri utenti in altri thread simili, chi risponde qui (e in genere in forum simili) non ha il tempo di fare "revisioni" di codici (come se fosse un tutor in una università/corso). Si preferisce intervenire su problemi specifici e malfunzionamenti, per poter fare andare avanti chi è bloccato su un errore.

    Quindi non ti attendere che ci sia la fila per esaminare il tuo codice finché non hai errori.

    Velocemente, ti posso dire che, quando leggo cose del genere

    tris tris;

    già ho i miei dubbi. Secondo te è chiara e leggibile questa linea?
  • Re: GIOCO TRIS CON PROGRAMMAZIONE AD OGGETTI

    Oregon prima di tutto ti ringrazio per la risposta! , sto studiando da autodidatta, so che posso attribuire ad un oggetto di una determinata classe il nome che voglio, ma ero convinto che era preferibile mettere all oggetto il nome della classe stessa...
    per maggiore chiarezza del codice lo potrei chiamare "azione" o qualcosa di similare..
    PS: il giochino funziona a dovere e fa ciò che mi aspettavo...chiedevo solo qualche parere per migliorarmi in quanto non ho la possibilita di confrontarmi con un prof o con un compagno di corso..
  • Re: GIOCO TRIS CON PROGRAMMAZIONE AD OGGETTI

    No, comincia a differenziare il nome della classe (che userai ovunque ti serva istanziare oggetti di quella classe) e nome di oggetti.

    Sarebbe meglio scrivere

    CTris per la classe

    e

    game per l'oggetto.

    Avrai

    CTris game;

    e poi

    game.player1

    e così via, solo per migliorare la leggibilità.

    Poi esistono altre cose ma, come ti dicevo, il tempo ...
  • Re: GIOCO TRIS CON PROGRAMMAZIONE AD OGGETTI

    Grazie Oregon chiarissimo!
Devi accedere o registrarti per scrivere nel forum
5 risposte