auf array in klasse zugreifen..??



  • halli hallo..
    ich bastel gerade zum c++luft schnuppern ganz originell ein kartenspiel.
    am anfang benoetige ich ein stapel karten.
    ich lege eine klasse karten an diese klassen lege ich in ein array:

    class Karten{
    
    public:
    	Karten(){}
    protected:
    	char bild;
    	char farbe;
    	int wert;
    public:
             char zeige_farbe(){
    
    	return farbe;
    	}
    	char zeige_bild(){
    
    		return bild;
    	}
    	int zeige_wert(){
    
    		return wert;
    	}
    
    	void setze_farbe(char f){
    		farbe = f;
    	}
    	void setze_bild(char b){
    		bild = b;
    	}
    	void setze_wert(int w){
    		wert = w;
    	}
    
    };
    

    okay, das ist die klasse.
    ich brauche ja dei arrays:

    1. der spielkartenstapel
    2. der spielerstapel
    3. ein bankstapel, weil das spiel wird blackjack
      und da spielt mensch gegen die bank

    zu 1) eine spielkarte hat 3 eigenschaften: farbe(herz, karo,etc), bild(bube,dame..) und wert(bube=2,dame=3)..
    diese drei eigenschaften packe ich in jeweils ein statisches array, um aus diesen dann in einer schleife ein array mit dem spielkartenstapel zu erstellen, der dann spaeter noch gemischt wird (uff-luft holen).

    zu 2) spieler und bank stapel sind einfach weil sie
    erstemal leer bleiben und erst im spiel gefuettert werden.

    //erstmal die constanten variablen:
    const ANZAHLKARTEN = 31;
    const 	char bildArray[]= {55,56,57,90,66,68,75,65};//die symbole
    const char farbArray[]= {3,4,5,6};                   //herz. karo. kreuz , pik
    const int wertArray[]= {7,8,9,10,2,3,4,11};       //der wert der einz. karten
    
    int main(){
    
    	Karten KartenStapel[ANZAHLKARTEN];
    	Karten BankStapel[ANZAHLKARTEN];
    	Karten SpielerStapel[ANZAHLKARTEN];
    
    	//alle karten werden erstellt: aus den 3 arrays bild, farbe + wert
    	//und geordnet in das array kartenstalel gelegt
    	for(i=0; i<=ANZAHLKARTEN; ++i){
    		KartenStapel[i].setze_bild(bildArray[k_bild]);
    		KartenStapel[i].setze_farbe(farbArray[k_farbe]);
    		KartenStapel[i].setze_wert(wertArray[k_bild]);
    		if(i%4==3)              //soll alle 4 farben das bild wechseln
    			 k_bild++;
    		          k_farbe++;        soll alle 4 farben den wert wechseln
    		if(k_farbe==4)
    			k_farbe=0;
    	}
    	//mischt den kartenstapel mit shuffel.startwert(seek) wird mit einer 
    	//zufallszeit gesetzt
        time (&sek);     
        srand (sek);     
        random_shuffle(KartenStapel, KartenStapel+ANZAHLKARTEN) ; 
    }
    

    is auch alles schoen soweit.
    ich kann dann zb. mit

    SpielerStapel[y].setze_bild(KartenStapel [i].zeige_bild());
    SpielerStapel[y].setze_farbe(KartenStapel [i].zeige_farbe());
    SpielerStapel[y].setze_wert(KartenStapel [i].zeige_wert());
    

    eine "karte" aus dem spielstapel an den spieler uebergeben,
    und so speichern.

    immer noch alles schoen soweit.
    aber ich moechte das jetzt nicht in der main machen sondern, weill das aussserbalb initialiseiern.
    in einer funktion macht das ja keinen sinn, weil das array ja nur solange lebt wie die funktion.
    also das am besten in eine klasse??

    mir dreht sich nur der kopf:
    eine klasse Karte ist in einem array. dieses array ist wiederum in einer klasse.

    das bekomme ich so rein hirnleistungsmaessig nich hin, aber vielleicht hab ich ja glueck und ein/e nette/r menschIn 🙂 erklaert mir den kleinen unterschied .... oder gibt mir einen tip wo ich anfange

    (richtig knorke waere wenn ichs irgendwie sogar mit zeigern hinbekommen wuerde
    innerhalb der naechsten 12 moante, aber das ist noch wunschkonzert)

    vielen dank fuers lesen zumindest..



  • herpes schrieb:

    halli hallo..
    in einer funktion macht das ja keinen sinn, weil das array ja nur solange lebt wie die funktion.
    ..

    lege die arrays in der main an, übergebe zeiger auf die arrays an eine funktion, dann arbeitest du auf dem original, und kannst ganz einfach eine funktion verwenden und den code aus der main rausnehmen.

    herpes schrieb:

    vielen dank fuers lesen zumindest..

    bitte 😉


Anmelden zum Antworten