Salve a tutti, mi sono appena iscritto e mi piacerebbe mostrarvi questo piccolo pezzo di codice che mi sta dando 2 grattacapi..![]()
Premetto che è un annetto che non uso C++ , lo sto ristudiando ultimamente perchè volevo riprenderci la mano per dare l'esame di C++ della mia facoltà..
Sostanzialmente, per esercizio, volevo creare un programma per giocare a texas holdem heads up contro il pc ma sono ancora all'inizio..vi espongo il problema e vi mostro il codice:
PRIMO PROBLEMA:
Ho definito una classe Card:
Card.cpp non lo riporto (c'è solo l'implementazione di getNumber() { return number; } )codice:#include <iostream> class Card{ public: Card(int n,const char *s,int n1):number(n),seed(*s),numDeck(n1){ std::cout<<"\nCreata nuova carta. Numero: "<<n <<" Seme: "<<s<<" Numero nel mazzo: "<< n1; } int getNumber(); private: int number; char seed; int numDeck; };
Dopodichè ho definito una classe Cards:
Vi mostro anche il costruttore di questa classe Cards:codice:#include "Card.h" class Cards{ public: Cards(); Card* arrayCarte [52]; Card* temp; };
Guardate le ultime righe , dove si va a stampare il numero delle carte . Ecco se questa operazione la faccio con un ciclo for (che ho commentato), il programma smette di funzionare ("Windows: è in corso una ricerca del problema...")..codice:#include "Cards.h" Cards::Cards(){ int n=0; for(int i=0;i<13;i++){ arrayCarte[i] = new Card(i+1,"C",n+1); n++; } for(int i=0;i<13;i++){ arrayCarte[i] = new Card(i+1,"D",n+1); n++; } for(int i=0;i<13;i++){ arrayCarte[i] = new Card(i+1,"F",n+1); n++; } for(int i=0;i<13;i++){ arrayCarte[i] = new Card(i+1,"P",n+1); n++; } //PERCHE' NON SI PUO USARE L'OPERATORE -> IN UN CICLO??? ...E' POSSIBILE USARLO SOLO CON UN BINDING DINAMICO??? //for(int i=0;i<52;i++){ std::cout<<"\n"<<arrayCarte[0]->getNumber(); std::cout<<"\n"<<arrayCarte[1]->getNumber(); std::cout<<"\n"<<arrayCarte[2]->getNumber(); std::cout<<"\n"<<arrayCarte[3]->getNumber(); std::cout<<"\n"<<arrayCarte[4]->getNumber(); //} }
Anziani e saggi programmatori, illuminatemi!!
SECONDO PROBLEMA:
Sostanzialmente credo si tratti del solito problema, in un altro pezzo di codice:
Ecco qui la Classe Mazziere. Questa classe ha una funzione che mescola le carte (che ho trovato qui http://www.fredosaurus.com/notes-cpp...m-shuffle.html e riadattato, molto probabilmente, male, per funzionare con un array di puntatori ad oggetti di tipo Card)
Dealer.cpp:codice:#include "Cards.h" class Dealer{ public: Dealer(); void shuffle(); private: Cards deck; };
codice:#include "Dealer.h" #include <cstdlib> // for srand and rand #include <ctime> #include <iostream> Dealer::Dealer(){ } void Dealer::shuffle(){ std::cout<<"\nIl mazziere mescola le carte..." << std::endl; srand(time(0)); //--- Shuffle elements by randomly exchanging each with one other. for (int i=0; i<(52-1); i++) { int r = i + (rand() % (52-i)); // Random remaining position. //cout di debug std::cout<<"\n\nPRIMA DELLO SWAP:\ndeck.temp= "<<deck.temp<<"\ndeck.arrayCarte["<<i<<"]= "<<deck.arrayCarte[i]<<"\ndeck.arrayCarte["<<r<<"]= "<<deck.arrayCarte[r]; deck.temp = deck.arrayCarte[i]; deck.arrayCarte[i] = deck.arrayCarte[r]; deck.arrayCarte[r] = deck.temp; //cout di debug std::cout<<"\nDOPO LO SWAP:\ndeck.temp= "<<deck.temp<<"\ndeck.arrayCarte["<<i<<"]= "<<deck.arrayCarte[i]<<"\ndeck.arrayCarte["<<r<<"]= "<<deck.arrayCarte[r]; } for(int h=0;h<52;h++){ std::cout << ( deck.arrayCarte[h]->getNumber() ) ; // Just print number } }
Anche qui nelle ultime righe del Dealer.cpp c'è il solito ciclo for che crea il problema.
Inoltre se invece del ciclo for, ci mettiamo:
fino ad arrivare alla posizione 52, il valore del numero della carta è sballato: tipo 3674600 oppure 1076889761...codice:std::cout << ( deck.arrayCarte[0]->getNumber() ) ; // Just print number std::cout << ( deck.arrayCarte[1]->getNumber() ) ; std::cout << ( deck.arrayCarte[2]->getNumber() ) ;
Ora, sicuramente qui avrò sbagliato ad usare i puntatori..perdonate l'incompetenza e , se avete voglia, magari mi dite dov'è l'errore..![]()
Ringrazio in anticipo!![]()

Rispondi quotando
