Das gute alte Kartenspiel



  • Du brauchst ein Objekt der Klasse 'deckOfCards', um dessen Klassenfunktion aufzurufen.



  • deckOfCards ist eine Klasse und keine Instanz davon, d.h. irgendwoher musst du einen Kartenstapel bekommen.



  • Ahh logisch macht sinn danke ich probier es mal 😃



  • hand[i]=deck.dealCard();
    

    Das hier funktioniert aber auch nicht obwohl deck ein array aus der klasse deckOfCards ist



  • Lapa1503 schrieb:

    hand[i]=deck.dealCard();
    

    Das hier funktioniert aber auch nicht obwohl deck ein array aus der klasse deckOfCards ist

    Nein, ist es nicht. Es ist nur ein Name, der frei im Raum schwebt. Du benötigst ein Instanz der Klasse deckOfCars.

    BTW, was ist das für ein merkwürdiger Compiler, der als Fehlermeldung "funktioniert nicht " ausgibt?



  • Zeig lieber mal deine Klassen header, lieber mal beim interface anfangen.



  • Lapa1503 schrieb:

    pieler::aufnehmen() {
        Stapel.austeilen()
        hand = new Karte[8];
        for (int i = 0; i < 8; i++)
            hand[i] = currentCard;
    };
    

    Ich weiß dass das ganze nicht so funktioniert wie ich es vorhabe deshalb bitte ich um Hilfe

    du verwirfst den returnwert von Stapel::austeilen().

    dann stellt sich die frage, wie du den rest implementiert hast. normalerweise solltest du eine klasse "bank", "spiel", "spielleiter" oder was auch immer haben, bei der sich die spieler anmelden, und die dann, wenn die karten verteilt werden, Spieler::aufnehmen() aufruft.



  • wie kann ich denn eine Karte mit der Funktion

    card deckOfCards::dealCard(){
        return (deck[currentCard++]);
    }
    

    an meine

    class Spieler{
    private:
        card *hand;
    };
    

    übergeben?



  • ja ich kann jetzt in der funktion Spieler::aufnehmen eine neue instanz des typs deckOfCards erstellen nur diese wird durch den default konstruktor als neues unsortiertes deck initialisiert. wenn ich mir das ausgeben lasse habe ich zwar meine hand nur nicht mit meinen Karten aus dem zuvor gemischten stapel sondern: Herz-Sieben, Herz-Acht, Herz Neun, Herz Zehn, Herz Bube,Herz Dame, Herz Koenig, Herz Ass. Ich weiß warum es nicht geht aber nicht wie ich das Problem löse 😕



  • So habe es jetzt geschafft. Ich hatte vergessen dass der Aufruf spieler.aufnehmen() das Deck erst übernehmen muss. Danke trotzdem für die hilfe

    void Spieler::aufnehmen(deckOfCards deck) {
        for (int i = 0; i < 8; i++){
            hand[i]=deck.dealCard();       
        }
    }
    

    und die main:

    int main(){
        deckOfCards deck;
        card currentCard;
        deck.printDeck();
        deck.shuffle();
        cout<<endl<<endl;
        deck.printDeck();
        deck.shuffle();
        cout<<endl<<endl;
        Spieler spieler1;
        spieler1.aufnehmen(deck);
        spieler1.printSpieler();
    
        system("PAUSE");
    
    }
    


  • Du weißt schon, dass

    void Spieler::aufnehmen(deckOfCards deck)
    

    eine Kopie von dem Deck in deiner main() erhält, oder? In anderen Worten: Das Deck in Main hat immernoch 52 Karten nach dem Austeilen.


Anmelden zum Antworten