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