Briscola C++
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 :
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
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.
Ah scusa non avevo capito, Windows! XD
"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
come mai nel secondo codice quando prendo io alcune volte gioca prima il pc?
ci deve essere probabilmente qualche errore nel codice vedo di controllare

grazie