Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Alexander

Frischling

  • »Alexander« ist der Autor dieses Themas

Beiträge: 1

Wohnort: Salach

Beruf: Berufskolleg Technische Kommunikation (mit Fachhochschulreife)

  • Private Nachricht senden

1

14.03.2006, 14:54

Vergleich von Variablen zwischen zwei Instanzen einer Klasse

Aloha hey,

ich hab mal eine Frage, ich hoffe mal dass ich die Lösung nicht übersehen hab als ich das Forum durchgeforstet hab. Das soll mal am Ende ein Damespiel für meine PA werden aber zunächst mal hier den Quellcode der Klasse um die es geht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class CSpieler
{

private: //Membervariablen

        string m_sSpielername;
        int m_AnzahlSteine;
        int m_SpielFarbe;

public: //Memberfunktionen

        CSpieler(string sSpielername, int SpielFarbe);
        ~CSpieler();
    void Zeige_Daten();
    int Stein_loeschen(int loesche_Anzahl);
    int Vergleiche_Farben(CSpieler *pSpieler1_Temp);//////////hierrauf bezieht sich meine Frage

};


Also mein Ziel ist es in der Funktion Vergleiche_Farbe zu kontrollieren ob bereits eine Instanz der Klasse Spieler gibt und welche Farbe dieser gewählt hat und dann die andere Farbe der neuen Instanz zu zuweißen. Und jetzt suche ich eine Möglichkeit dies zu machen ohne die Variable Public zu machen.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Vergleiche_Farbe

//Aufgabe: Vergleichen ob Spieler 1 bereits eine Farbe hat

int Vergleiche_Farbe(*pSpieler1)
{
    int SpielFarbe=2;

    if (pSpieler1->m_SpielFarbe==0)     //Wenn Spieler1 die Farbe 1 hat

        SpielFarbe=1;                   //dann weiße ihm Farbe 2 zu


    else
        SpielFarbe=0;                   //ansonsten weiße ihm Farbe 1 zu


    return SpielFarbe;
}




C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//Name_einlesen

//Aufgabe: die Namen der Spieler einlesen

CSpieler *Name_einlesen(char *pszPrompt)
{
    string sSpielername;
    int SpielFarbe=2;
    CSpieler *pSpieler = NULL;

    cout<<pszPrompt;
    cin>>sSpielername;
    
    if (SpielFarbe!=2)
        pSpieler->Vergleiche_Farben(*pSpieler);

    else
    {
        cout<<"Welche Farbe wollen Sie sein? (schwarz=0 | weiss=1) ";
        cin>>SpielFarbe;
    }


    if (SpielFarbe>1||SpielFarbe<0)
    {
        cout<<"Falsche Eingabe. Bitte Eingabe wiederholen!"<<endl;
        cin>>SpielFarbe;
    }

    pSpieler = new CSpieler(sSpielername,SpielFarbe);   //Spieler

    
    return pSpieler;

}//Name_einlesen


Ich probier da inzwischen schon seit Freitag dran rum und hab alles was mir eingefallen ist ausprobiert doch leider ohne erfolg. Inzwischen weiß ich noch nicht mal mehr wie mein Ursprünglicher Quelltext mal war :P
Ich hoff mal einer von euch kann mir helfen. Vielen Dank schon mal im Voraus.

MFG Alexander
Wir sind zu allem fähig
aber zu nichts zu gebrauchen.

Anonymous

unregistriert

2

14.03.2006, 15:02

Hi!

Ich halte deinen Ansatz für unlogisch - ich würde eine Klasse "Spiel"
erstellen und dieser eine Methode "addPlayer(Player& p)" geben. Diese
Methode fügt dann den Spieler zu einer internen Liste hinzu und vergibt
beim Einfügen in die Liste die Farbe des Spieler über eine Methode
"setColor(...)" der Player-Klasse.

Übrigends würde ich an der Farbinformation in der Klasse "Player" keine
für das Spiel wichtigen Funktionen festmachen (z.B. wer dran ist etc.). Das
sollte die "Spiel"-Klasse machen. Z.B. über den Index in die Liste der
Spieler.

Grüße
Stefan

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

3

14.03.2006, 17:51

Im Prinzip solltest du dich an scarsens Ansatz orientieren. Mir fallen in deinem Code allerdings einige Fehler auf, die nichts mit dem Ansatz an sich zu tun haben.

C-/C++-Quelltext

1
    void Vergleiche_Farben(CSpieler *pSpieler1);


zum Definieren der Memberfunktion außerhalb der Klasse solltest du folgenden Code verwenden: (CSpieler:: - wichtig!)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
void CSpieler::Vergleiche_Farben(CSpieler *pSpieler1)
{
    if (pSpieler1->m_SpielFarbe==m_SpielFarbe)        //Wenn pSpieler1 die gleiche Farbe hat, wie die aufrufende Instanz von CSpieler

        {
        pSpieler1->m_SpielFarbe=1-m_SpielFarbe; //Es gibt nur Farbe 1 und Farbe 0.

                                                //Also wird pSpieler1->m_SpielFarbe auf den freien Wert gesetzt.

        }
}


Der Aufruf in Main sieht folgendermaßen aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    // Spieler erstellen

    CSpieler *Spieler1, Spieler2;
    Spieler1 = new CSpieler;
    Spieler2 = new CSpieler;
    // Farbe von Spieler2 auf die freie Farbe setzen

    Spieler1->Vergleiche_Farben(Spieler2);
    delete Spieler1;
    delete Spieler2;
    return 0;
}


Das mal als Denkanstoß^^

// edit: Code nicht getestet - also keine Garantie auf Fehlerfreiheit.
// edit2: In Vergleiche_Farben kann die if-Anweisung auch weggelassen werden und stattdessen pauschal die freie Farbe zugewiesen werden.

Werbeanzeige