thecarmy97
29-01-2017, 18:02
#include <iostream>
#include <stdlib.h>
#include <ctime>
using namespace std;
struct carta{
char *seme;
int valore;
char *nome;
int punteggio;
};
char seme[4][20] = {"Mazze", "Spade", "Coppe","Denari"};
char nome[10][20] = {"Asso", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Donna", "Cavallo", "Re"};
int valore[10] = {12, 2, 11, 4, 5, 6, 7, 8, 9, 10};
int punteggio[10] = {11, 0, 10, 0, 0, 0, 0, 2, 3, 4};
void crea_mazzo(carta mazzo[]){
int c=0;
for(int i = 0; i<4; i++){
for(int j = 0; j<10; j++){
mazzo[c].seme = seme[i];
mazzo[c].valore = valore[j];
mazzo[c].punteggio = punteggio[j];
mazzo[c].nome = nome[j];
c++;
}
}
}
void mischia_mazzo(carta mazzo[]){
int primacarta, secondacarta;
carta cartatemp;
srand((unsigned)time(NULL));
for(int i = 0; i<40; i++){
primacarta = rand() % 40;
secondacarta = rand() % 40;
cartatemp = mazzo[primacarta];
mazzo[primacarta] = mazzo[secondacarta];
mazzo[secondacarta] = cartatemp;
}
}
carta crea_briscola(carta labriscola1, carta mazzo[]){
labriscola1 = mazzo[39];
return labriscola1;
}
int distribuisci_carte(carta mazzo[], carta manogioc[], carta manoia[]){
int i, c1, c2;
c1=0;
c2=0;
for(i = 0; i < 6; i++){
if(i < 3){
manogioc[c1++] = mazzo[i];
}
else{
manoia[c2++] = mazzo[i];
}
}
return 6;
}
void mostra_carte_gioc(carta manogioc[]){
for(int i=0; i<3; i++){
if(manogioc[i].seme == nullptr)
cout<<i<<". "<<endl;
else
cout<<i<<". "<<manogioc[i].nome<<" di "<<manogioc[i].seme<<endl;
}
}
int gioca_carta(carta manogioc[], carta campo[]){
int posizione_carta=0;
cout<<"Inserisci la posizione della carta che vuoi giocare: ";
cin>>posizione_carta;
cout<<endl;
while(posizione_carta > 2 || posizione_carta < 0 || manogioc[posizione_carta].seme==nullptr){
cout<<"Seleziona una carta esistente! "<<endl;
cout<<"Inserisci la posizione della carta che vuoi giocare: ";
cin>>posizione_carta;
cout<<endl;
}
cout<<"Hai giocato la carta "<<manogioc[posizione_carta].nome<<" di "<<manogioc[posizione_carta].seme<<endl<<endl;
campo[0] = manogioc[posizione_carta];
return posizione_carta;
}
int gioca_ia(carta manoia[], carta campo[]){
srand((unsigned)time(NULL));
int posizione_cartaia = rand() % 3;
while(manoia[posizione_cartaia].nome==nullptr){
posizione_cartaia = rand() % 3;
}
cout<<"L'IA ha giocato la carta: "<<manoia[posizione_cartaia].nome<<" di "<<manoia[posizione_cartaia].seme<<endl;
campo[1] = manoia[posizione_cartaia];
return posizione_cartaia;
}
int pescacarta(carta mazzo[], carta primamano[], carta secondamano[], int posizionedeck, int primapos, int secondapos){
carta cartavuota = {nullptr};
if(posizionedeck < 40){
primamano[primapos] = mazzo[posizionedeck];
secondamano[secondapos] = mazzo[posizionedeck+1];
}
else{
primamano[primapos] = cartavuota;
secondamano[secondapos] = cartavuota;
}
return posizionedeck + 2;
}
int funzione_presagioc (carta primamano[], carta secondamano[], int primapos, int secondapos, carta briscola, int &presa){
if(primamano[primapos].valore >= secondamano[secondapos].valore && secondamano[secondapos].seme != briscola.seme)
return presa = 1;
else if(primamano[primapos].valore < secondamano[secondapos].valore && primamano[primapos].seme != secondamano[secondapos].seme)
return presa = 1;
else if(primamano[primapos].seme == briscola.seme && secondamano[secondapos].seme != briscola.seme)
return presa= 1;
else if(primamano[primapos].seme == briscola.seme && secondamano[secondapos].seme == briscola.seme && primamano[primapos].valore > secondamano[secondapos].valore)
return presa= 1;
else return presa = 0;
}
int funzione_presaia (carta primamano[], carta secondamano[], int primapos, int secondapos, carta briscola, int &presa){
if(primamano[primapos].valore >= secondamano[secondapos].valore && secondamano[secondapos].seme != briscola.seme)
return presa = 0;
else if(primamano[primapos].valore < secondamano[secondapos].valore && primamano[primapos].seme != secondamano[secondapos].seme)
return presa = 0;
else if(primamano[primapos].seme == briscola.seme && secondamano[secondapos].seme != briscola.seme)
return presa= 0;
else if(primamano[primapos].seme == briscola.seme && secondamano[secondapos].seme == briscola.seme && primamano[primapos].valore > secondamano[secondapos].valore)
return presa= 0;
else return presa = 1;
}
int main(){
carta mazzo[40];
int mazzogioc[40];
int mazzoia[40];
carta mano_gioc[3]={nullptr};
carta campo[2];
carta mano_ia[3]={nullptr};
int manofinale=0;
int pos_gioc;
int pos_ia;
int presa=1;
int c1 = 0;
int c2 = 0;
int puntigioc=0;
int puntiia=0;
carta labriscola;
crea_mazzo(mazzo);
int posizione_mazzo;
mischia_mazzo(mazzo);
cout<<"Benvenuto a Briscola!"<<endl<<endl;
system("PAUSE");
cout<<endl;
labriscola = crea_briscola(labriscola, mazzo);
posizione_mazzo = distribuisci_carte(mazzo, mano_gioc, mano_ia);
while(posizione_mazzo < 46){
system("CLS");
cout<<"La briscola in questa partita e': "<<labriscola.nome<<" di "<<labriscola.seme<<endl<<endl;
if(presa == 1){
cout<<"La tua mano e': "<<endl;
cout<<endl;
mostra_carte_gioc(mano_gioc);
cout<<endl;
pos_gioc = gioca_carta(mano_gioc, campo);
pos_ia = gioca_ia(mano_ia, campo);
funzione_presagioc(mano_gioc, mano_ia, pos_gioc, pos_ia, labriscola, presa);
posizione_mazzo = pescacarta(mazzo, mano_gioc, mano_ia, posizione_mazzo, pos_gioc, pos_ia);
mazzogioc[c1] = campo[0].punteggio;
mazzogioc[c1+1] = campo[1].punteggio;
c1+=2;
}
else if(presa == 0){
cout<<"La tua mano e': "<<endl;
cout<<endl;
mostra_carte_gioc(mano_gioc);
cout<<endl;
gioca_ia(mano_ia, campo);
gioca_carta(mano_gioc, campo);
cout<<endl;
funzione_presaia(mano_ia, mano_gioc, pos_ia, pos_gioc, labriscola, presa);
posizione_mazzo = pescacarta(mazzo, mano_ia, mano_gioc, posizione_mazzo, pos_ia, pos_gioc);
mazzoia[c2] = campo[0].punteggio;
mazzoia[c2+1] = campo[1].punteggio;
c2+=2;
}
if(presa == 1)
cout<<"Hai preso la mano!"<<endl;
else if(presa == 0)
cout<<"L'IA ha preso la mano!"<<endl;
system("PAUSE");
}
for(int i = 0; i<c1; i++){
puntigioc+=mazzogioc[i];
}
for(int j = 0; j<c2; j++){
puntiia+=mazzoia[j];
}
cout<<"Hai totalizzato "<<puntigioc<<" ."<<endl;
cout<<"L'IA ha totalizzato "<<puntiia<<" ."<<endl;
if(puntigioc > puntiia)
cout<<"HAI VINTO!"<<endl;
else if(puntiia > puntigioc)
cout<<"HAI PERSO!"<<endl;
else if(puntiia == puntigioc)
cout<<"HAI PAREGGIATO!";
return 0;
system("PAUSE");
cout<<"\n\n";
}
Salve, premetto che non sono molto esperto del linguaggio. Ho scritto questo programma che simula la briscola per un esame universitario. Il compilatore non mi da errori, ma il gioco soffre di qualche problema: il conteggio dei voti non è sempre perfetto, e sopratutto la pesca ad ogni turno è spesso buggata, e mi vengono pescate carte nella posizione sbagliata. Qualcuno che può eseguire il programma e mi dia una mano? Ve ne sarei molto grato, vi ringrazio.
#include <stdlib.h>
#include <ctime>
using namespace std;
struct carta{
char *seme;
int valore;
char *nome;
int punteggio;
};
char seme[4][20] = {"Mazze", "Spade", "Coppe","Denari"};
char nome[10][20] = {"Asso", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Donna", "Cavallo", "Re"};
int valore[10] = {12, 2, 11, 4, 5, 6, 7, 8, 9, 10};
int punteggio[10] = {11, 0, 10, 0, 0, 0, 0, 2, 3, 4};
void crea_mazzo(carta mazzo[]){
int c=0;
for(int i = 0; i<4; i++){
for(int j = 0; j<10; j++){
mazzo[c].seme = seme[i];
mazzo[c].valore = valore[j];
mazzo[c].punteggio = punteggio[j];
mazzo[c].nome = nome[j];
c++;
}
}
}
void mischia_mazzo(carta mazzo[]){
int primacarta, secondacarta;
carta cartatemp;
srand((unsigned)time(NULL));
for(int i = 0; i<40; i++){
primacarta = rand() % 40;
secondacarta = rand() % 40;
cartatemp = mazzo[primacarta];
mazzo[primacarta] = mazzo[secondacarta];
mazzo[secondacarta] = cartatemp;
}
}
carta crea_briscola(carta labriscola1, carta mazzo[]){
labriscola1 = mazzo[39];
return labriscola1;
}
int distribuisci_carte(carta mazzo[], carta manogioc[], carta manoia[]){
int i, c1, c2;
c1=0;
c2=0;
for(i = 0; i < 6; i++){
if(i < 3){
manogioc[c1++] = mazzo[i];
}
else{
manoia[c2++] = mazzo[i];
}
}
return 6;
}
void mostra_carte_gioc(carta manogioc[]){
for(int i=0; i<3; i++){
if(manogioc[i].seme == nullptr)
cout<<i<<". "<<endl;
else
cout<<i<<". "<<manogioc[i].nome<<" di "<<manogioc[i].seme<<endl;
}
}
int gioca_carta(carta manogioc[], carta campo[]){
int posizione_carta=0;
cout<<"Inserisci la posizione della carta che vuoi giocare: ";
cin>>posizione_carta;
cout<<endl;
while(posizione_carta > 2 || posizione_carta < 0 || manogioc[posizione_carta].seme==nullptr){
cout<<"Seleziona una carta esistente! "<<endl;
cout<<"Inserisci la posizione della carta che vuoi giocare: ";
cin>>posizione_carta;
cout<<endl;
}
cout<<"Hai giocato la carta "<<manogioc[posizione_carta].nome<<" di "<<manogioc[posizione_carta].seme<<endl<<endl;
campo[0] = manogioc[posizione_carta];
return posizione_carta;
}
int gioca_ia(carta manoia[], carta campo[]){
srand((unsigned)time(NULL));
int posizione_cartaia = rand() % 3;
while(manoia[posizione_cartaia].nome==nullptr){
posizione_cartaia = rand() % 3;
}
cout<<"L'IA ha giocato la carta: "<<manoia[posizione_cartaia].nome<<" di "<<manoia[posizione_cartaia].seme<<endl;
campo[1] = manoia[posizione_cartaia];
return posizione_cartaia;
}
int pescacarta(carta mazzo[], carta primamano[], carta secondamano[], int posizionedeck, int primapos, int secondapos){
carta cartavuota = {nullptr};
if(posizionedeck < 40){
primamano[primapos] = mazzo[posizionedeck];
secondamano[secondapos] = mazzo[posizionedeck+1];
}
else{
primamano[primapos] = cartavuota;
secondamano[secondapos] = cartavuota;
}
return posizionedeck + 2;
}
int funzione_presagioc (carta primamano[], carta secondamano[], int primapos, int secondapos, carta briscola, int &presa){
if(primamano[primapos].valore >= secondamano[secondapos].valore && secondamano[secondapos].seme != briscola.seme)
return presa = 1;
else if(primamano[primapos].valore < secondamano[secondapos].valore && primamano[primapos].seme != secondamano[secondapos].seme)
return presa = 1;
else if(primamano[primapos].seme == briscola.seme && secondamano[secondapos].seme != briscola.seme)
return presa= 1;
else if(primamano[primapos].seme == briscola.seme && secondamano[secondapos].seme == briscola.seme && primamano[primapos].valore > secondamano[secondapos].valore)
return presa= 1;
else return presa = 0;
}
int funzione_presaia (carta primamano[], carta secondamano[], int primapos, int secondapos, carta briscola, int &presa){
if(primamano[primapos].valore >= secondamano[secondapos].valore && secondamano[secondapos].seme != briscola.seme)
return presa = 0;
else if(primamano[primapos].valore < secondamano[secondapos].valore && primamano[primapos].seme != secondamano[secondapos].seme)
return presa = 0;
else if(primamano[primapos].seme == briscola.seme && secondamano[secondapos].seme != briscola.seme)
return presa= 0;
else if(primamano[primapos].seme == briscola.seme && secondamano[secondapos].seme == briscola.seme && primamano[primapos].valore > secondamano[secondapos].valore)
return presa= 0;
else return presa = 1;
}
int main(){
carta mazzo[40];
int mazzogioc[40];
int mazzoia[40];
carta mano_gioc[3]={nullptr};
carta campo[2];
carta mano_ia[3]={nullptr};
int manofinale=0;
int pos_gioc;
int pos_ia;
int presa=1;
int c1 = 0;
int c2 = 0;
int puntigioc=0;
int puntiia=0;
carta labriscola;
crea_mazzo(mazzo);
int posizione_mazzo;
mischia_mazzo(mazzo);
cout<<"Benvenuto a Briscola!"<<endl<<endl;
system("PAUSE");
cout<<endl;
labriscola = crea_briscola(labriscola, mazzo);
posizione_mazzo = distribuisci_carte(mazzo, mano_gioc, mano_ia);
while(posizione_mazzo < 46){
system("CLS");
cout<<"La briscola in questa partita e': "<<labriscola.nome<<" di "<<labriscola.seme<<endl<<endl;
if(presa == 1){
cout<<"La tua mano e': "<<endl;
cout<<endl;
mostra_carte_gioc(mano_gioc);
cout<<endl;
pos_gioc = gioca_carta(mano_gioc, campo);
pos_ia = gioca_ia(mano_ia, campo);
funzione_presagioc(mano_gioc, mano_ia, pos_gioc, pos_ia, labriscola, presa);
posizione_mazzo = pescacarta(mazzo, mano_gioc, mano_ia, posizione_mazzo, pos_gioc, pos_ia);
mazzogioc[c1] = campo[0].punteggio;
mazzogioc[c1+1] = campo[1].punteggio;
c1+=2;
}
else if(presa == 0){
cout<<"La tua mano e': "<<endl;
cout<<endl;
mostra_carte_gioc(mano_gioc);
cout<<endl;
gioca_ia(mano_ia, campo);
gioca_carta(mano_gioc, campo);
cout<<endl;
funzione_presaia(mano_ia, mano_gioc, pos_ia, pos_gioc, labriscola, presa);
posizione_mazzo = pescacarta(mazzo, mano_ia, mano_gioc, posizione_mazzo, pos_ia, pos_gioc);
mazzoia[c2] = campo[0].punteggio;
mazzoia[c2+1] = campo[1].punteggio;
c2+=2;
}
if(presa == 1)
cout<<"Hai preso la mano!"<<endl;
else if(presa == 0)
cout<<"L'IA ha preso la mano!"<<endl;
system("PAUSE");
}
for(int i = 0; i<c1; i++){
puntigioc+=mazzogioc[i];
}
for(int j = 0; j<c2; j++){
puntiia+=mazzoia[j];
}
cout<<"Hai totalizzato "<<puntigioc<<" ."<<endl;
cout<<"L'IA ha totalizzato "<<puntiia<<" ."<<endl;
if(puntigioc > puntiia)
cout<<"HAI VINTO!"<<endl;
else if(puntiia > puntigioc)
cout<<"HAI PERSO!"<<endl;
else if(puntiia == puntigioc)
cout<<"HAI PAREGGIATO!";
return 0;
system("PAUSE");
cout<<"\n\n";
}
Salve, premetto che non sono molto esperto del linguaggio. Ho scritto questo programma che simula la briscola per un esame universitario. Il compilatore non mi da errori, ma il gioco soffre di qualche problema: il conteggio dei voti non è sempre perfetto, e sopratutto la pesca ad ogni turno è spesso buggata, e mi vengono pescate carte nella posizione sbagliata. Qualcuno che può eseguire il programma e mi dia una mano? Ve ne sarei molto grato, vi ringrazio.