Briscola C++

Riuzaki
ciao ragazzi ho due problemini in questo programma che sto facendo...so perfettamente che non è il massimo a livello di efficienza ma al corso di informatica abbiamo fatto solo le stringhe fino ad ora nemmeno i puntatori siate buoni con i commenti...XD
tornando a noi il primo problema è che non mi calcola il punteggio stranamente (la funzione creata che dovrebbe svolgere questo compito sembra giusta...)
secondo problema alla fine chieda una ulteriore conferma prima di terminare, nonostante le carte siano finite mi chiede di giocare un'altra carta(inesistente) e poi termina...questo è il codice :
//gioco della briscola...
#include <iostream> 
#include <ctime>
#include <cstdlib>
#include <cmath>

using namespace std;

int Score(int, int, int [][6], int);
    
bool controllo(int, int, int [][6], int, int, int);
    
int mescola(int mazzo[][ 10 ]);

int gioca(const char *palo[], const char *carte[], int mazzo[][10], int & cont, int giocatori[][6], int , int, int &, int &);

int distribuisci(const char *palo[], const char *carte[], int mazzo[][10], int & cont, int giocatori[][6], int &, int &, int, int );

int main ()
{    
    cout << "\t\t\t\t***Brown***\n\t\t\t#Il gioco della briscola!!#\n\n\n" << endl;
    
    const char *palo[ 4 ] = {"Spade","Oro","Coppe","Mazze"};//puntatore ad array contenenti i semi
    //puntatore ad array contenenti le carte
    const char *carte[ 10 ] = {"Due","Quattro","Cinque","Sei","Sette","Otto","Nove","Dieci","Tre","Asso"};
    int giocatori[2][6] = {0};//variabile in cui si salvano le carte del giocatore e del pc
    int mazzo[ 4 ][ 10 ] = {0}, cont = 1;
    int briscolaS, briscolaC;//variabili in cui si salvano le briscole
    srand(time(NULL));
    
    int Punti = 0, aux = 0;// variabile di contenimento del punteggio
    
    mescola(mazzo);
    
    distribuisci(palo, carte, mazzo, cont, giocatori, briscolaS, briscolaC, Punti, aux);
    
    cout << "Si comincia a giocare, in bocca al lupo!!\n\n";
    
    distribuisci(palo, carte, mazzo, cont, giocatori, briscolaS, briscolaC, Punti, aux);
    
    gioca(palo, carte, mazzo, cont, giocatori, briscolaS, briscolaC, Punti, aux);
    
    cout << "\n\n\t\t\tLa partita e' terminata!!\n\n";
    
    if(Punti > 60)
    cout << "\nHai Vinto!\n\nIl tuo punteggio e' " << Punti << " mentre il computer ha fatto " << 120 - Punti << endl << endl;
    
    if(Punti < 60)
    cout << "\nHai Perso!\n\nIl tuo punteggio e' " << Punti << " mentre il computer ha fatto " << 120 - Punti << endl << endl;
    
    if(Punti == 60)
    cout << "\nParita'!!!\n\n";
    
    system("pause");
    return 0;
}
//_____________________________________________________________________________________________________________________________________________________
//funzione che mescola il mazzo (array di int 4x10)
int mescola(int mazzo[][ 10 ])
{
     
    int colonna, riga;
    
    for(int i = 1; i <= 40; i++)
    {
         do{
             
            riga = rand()% 4;  
            colonna = rand()% 10;  
           }while(mazzo[ riga ][ colonna ] != 0);
         mazzo[ riga ][ colonna ] = i;
    }
    return 0;
}
//______________________________________________________________________________________________________________________________________________________
//funzione in cui si sviluppa effettivamente il gioco
int gioca(const char *palo[], const char *carte[], int mazzo[][10], int & cont, int giocatori[][6], int briscolaS, int briscolaC, int & Punti, int & aux)
{
    bool Vinto = false;//variabile che controllo chi deve prendere
    
    srand(time(NULL));
    
    int scelta, computer, aux1;//variabile in cui si salva la carta giocata da computer e da giocatore umano
     
    if(giocatori[0][0] == 0 && giocatori[0][1] == 0 && giocatori[0][2] == 0 && giocatori[0][3] == 0 && giocatori[0][4] == 0 && giocatori[0][5] == 0)
     return 0;
    
    computer = rand()% 3 + 3;//genera casualmente un numero da 3 a 5(compresi)
    
    if(giocatori[0][computer] == 0) 
    for(int i = 3; i < 6; i++)
        if(giocatori[0][i] != 0)
           computer = i;
    
    if(Punti == aux)//se il punteggio è rimasto inalterato e quindi ha preso il computer fallo tirare per primo
    {
       cout << "il computer gioca " << carte[giocatori[0][computer]] << " di " << palo[giocatori[1][computer]] << "\n\n";
       aux1 = 0;
    }
    
    do
    {
       cout << "Le tue carte sono: \n";
      if(cont < 41)
        {
          for(int i = 0; i < 3; i++)
                   cout << i + 1 << ") " << carte[giocatori[0][i]] << " di " << palo[giocatori[1][i]] << "\n";
        }
      else
      { 
         for(int i = 0; i < 3; i++)
             if(giocatori[0][i] != 0)  
               cout << i + 1 << ") " << carte[giocatori[0][i]] << " di " << palo[giocatori[1][i]] << "\n";
             else
               cout << i + 1 << ") --------\n";
      }
           cout << "quale delle tre vuoi giocare? 1/2/3\n\n";
       cin >> scelta;
    }while(scelta > 3 || scelta < 1);            
    
    scelta = scelta - 1;
    
    if(Punti > aux)//se il punteggio è aumentato è quindi ha preso l'utente fai giocare il computer per secondo
    {
       cout << "il computer gioca " << carte[giocatori[0][computer]] << " di " << palo[giocatori[1][computer]] << "\n\n";
       aux1 = 1;
    }
    
    Vinto = controllo(scelta, computer, giocatori, briscolaS, briscolaC, aux1);//qua si controlla chi prende
    
    aux = Punti;//poni l'ausiliare uguale al punteggio
    
    switch (Vinto)
    {
           case true://caso in cui prende l'utente
                      cout << "\nPrendi tu!\n\n";
                      Punti = Score(scelta, computer, giocatori, Punti);
                      break;
           case false://caso in cui prende il computer
                      cout << "\nPrende il computer!\n\n";
                      break;
    }     
    
    //azzeramente delle locazioni che ospiteranno le nuove carte pescate
    giocatori[0][scelta] = 0;
    giocatori[1][scelta] = 0;
    giocatori[0][computer] = 0;
    giocatori[1][computer] = 0;
    
     
     //se ancora si è in gioco continua a distribuire le carte ai giocatori
    distribuisci(palo, carte, mazzo, cont, giocatori, briscolaS, briscolaC, Punti, aux);    
}
//_____________________________________________________________________________________________________________________________________________________
//funzione che calcola il punteggio
int Score(int scelta, int computer, int giocatori[][6], int Punti)
{
    switch (giocatori[0][computer])
    {
           case 5:
                Punti += 2;
                break;
           case 6:
                Punti += 3;
                break;
           case 7:
                Punti += 4;
                break;
           case 8:
                Punti += 10;
                break;
           case 9:
                Punti += 11;
                break;
           default:
                   Punti += 0;
     }
    switch (giocatori[0][scelta])
    {
           case 5:
                Punti += 2;
                break;
           case 6:
                Punti += 3;
                break;
           case 7:
                Punti += 4;
                break;
           case 8:
                Punti += 10;
                break;
           case 9:
                Punti += 11;
                break;
           default:
                   Punti += 0;
     }
     return Punti;
                                           
}
//funzione che controlla chi prende nella mano corrispondente..
//_____________________________________________________________________________________________________________________________________________________
bool controllo(int scelta, int computer, int giocatori[][6], int briscolaS, int briscolaC, int aux1) 
{
     switch (aux1)
     {
            case 1:
                 if(giocatori[1][scelta] == briscolaS && giocatori[1][computer] != briscolaS)
                      return true;
                 
                 if(giocatori[1][scelta] != briscolaS && giocatori[1][computer] == briscolaS)
                      return false;
                  
                  if(giocatori[1][scelta] == briscolaS && giocatori[1][computer] == briscolaS)
                    {  
                      if(giocatori[0][scelta] > giocatori[0][computer])
                         return true;
                      else 
                         return false;  
                    }  
                  if(giocatori[1][scelta] != briscolaS && giocatori[1][computer] != briscolaS)
                     {
                       if(giocatori[1][scelta] == giocatori[1][computer])                     
                        {  
                          if(giocatori[0][scelta] > giocatori[0][computer])
                             return true;
                          else 
                             return false;
                        }
                        else
                        return true;    
                    }
                        
            break;
                 
            case 0:
                 if(giocatori[1][scelta] == briscolaS && giocatori[1][computer] != briscolaS)
                      return true;
                 
                 if(giocatori[1][scelta] != briscolaS && giocatori[1][computer] == briscolaS)
                      return false;
                  
                  if(giocatori[1][scelta] == briscolaS && giocatori[1][computer] == briscolaS)
                    {  
                      if(giocatori[0][scelta] > giocatori[0][computer])
                         return true;
                      else 
                      return false;  
                    }
                  if(giocatori[1][scelta] != briscolaS && giocatori[1][computer] != briscolaS)
                     {  
                       if(giocatori[1][scelta] == giocatori[1][computer])                   
                        { 
                          if(giocatori[0][scelta] > giocatori[0][computer])
                             return true;
                          else 
                          return false;
                        }
                        else
                        return false;            
                    }
           break;
     }
    
}
//funzione che distribuisce i volta in volta le carte ai giocatori...
//______________________________________________________________________________________________________________________________________________________
int distribuisci(const char *palo[], const char *carte[], int mazzo[][10], int & cont, int giocatori[][6], int & briscolaS, int & briscolaC, int Punti, int aux)
{
    int esci = 0;
    
    for(int i = cont; i <= 40; i++)
       for(int j = 0; j < 4; j++)
           for(int k = 0; k < 10; k++)
               {
                   
                   if(i == 1 && mazzo[ j ][ k ] == i)
                     {
                      cout << "La briscola per questa partita e' \"" << carte[ k ] << " di " << palo[ j ] << "\"" << endl;
                      cont++;
                      briscolaS = j;
                      briscolaC = k;
                      return 0;
                      
                      }
                   if(mazzo[ j ][ k ] == i && esci < 6 && cont < 8 )
                   {
                    
                       for(int n = 0; n < 6; n++)
                         {
                            if(giocatori[0][n] == 0) 
                            {  
                              giocatori[0][n] = k;
                              giocatori[1][n] = j;
                              cont++;
                              esci++;
                              if(esci == 8)
                              gioca(palo, carte, mazzo, cont, giocatori, briscolaS, briscolaC, Punti, aux);
                              break;
                            } 
                         }
                   } 
                   else if(mazzo[ j ][ k ] == i && esci < 2 && cont >= 8 && cont < 40)
                   {
                    
                       for(int n = 0; n < 6; n++)
                         {
                            if(giocatori[0][n] == 0) 
                            {  
                              giocatori[0][n] = k;
                              giocatori[1][n] = j;
                              cont++;
                              esci++;
                    
                              if(esci == 2 && cont != 40)
                              gioca(palo, carte, mazzo, cont, giocatori, briscolaS, briscolaC, Punti, aux);
                              break;
                            }    
                         }
                   }
                   if(cont == 40)
                   {
                      for(int n = 0; n < 6; n++)
                         {
                            if(giocatori[0][n] == 0) 
                            {  
                              giocatori[0][n] = briscolaC;
                              giocatori[1][n] = briscolaS;
                              cont ++;
                              gioca(palo, carte, mazzo, cont, giocatori, briscolaS, briscolaC, Punti, aux);
                            }    
                         }
                   }
               }
           gioca(palo, carte, mazzo, cont, giocatori, briscolaS, briscolaC, Punti, aux);
       return 0;
}

Risposte
apatriarca
Non mi hai detto il sistema operativo... Comunque se vuoi dare un occhiata a qualche libreria per realizzare interfacce grafiche puoi dare un occhiata a wxWidgets, Qt e GTK+ che credo siano le librerie multi-piattaforma più diffuse.

Riuzaki
Ah scusa non avevo capito, Windows! XD

Umby2
"apatriarca":
Per poter giocare uno contro l'altro è necessario un server e un protocollo di rete o almeno un codice di base che gestisca le partite e una interfaccia da implementare.


Per il server ed il protocollo, si potrebbe chiedere ad Admin.

Inoltre è necessario scrivere del codice che funga da "Croupier" (Mischia le carti, le distribuisce, Conta le prese, e conta il punteggio finale, assegnando il vincitore)

I vari utenti dovrebbero limitarsi a scrivere il codice per:
A) Acquisire le carte che il croupier gli consegna (mediante file testo sarebbe il modo piu semplice)
B) Decidere la carta da giocare

bubu901
come mai nel secondo codice quando prendo io alcune volte gioca prima il pc?

Riuzaki
ci deve essere probabilmente qualche errore nel codice vedo di controllare :)

bubu901
grazie

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.