Klassenvariable enthält falschen Wert

raruk

Grünschnabel
Hallo Miteinander,

Ich programmiere im Moment ein Yahtzee mit Multiplayer-Funktion. Anfangs generiere ich 2 neue Klasseninstanzen der Klasse Player und übergebe ID und Name:
Code:
Player1 = new Player(1, player1);
            Player2 = new Player(2, player2);

Würfeln, Score rechnen usw. funktioniert alles. Wenn ich nun beim Spielerwechsel den Score vom Spieler1 setzen will:
Code:
if (Player1.turn)
{
     setLocZwischenstand() //Diese funktion liest mir alle Textboxen mit den Werten aus und speichert sie in einem LOKALEN string[]
     Player1.ZwischenStand = LocZwischenStand; 
}

wenn ich nun aus der setLocZwischenstand()-Funktion raus komme, sind die ZwischenStand-Variablen der Klasseninstanzen bereits beide gesetzt?! :S (Ich greife in dieser Funktion niemals auf die Klassenvariable zu.)

Ich versuche den Fehler seit gestern Abend zu beheben und finde einfach nichts...

hoffe, dass mir jemand helfen kann.
Vielen Dank im voraus.

Gruss Beni
 
Hey Beni,

es wäre ganz hilfreich, wenn du den Code der setLocZwischenstand()-Methode posten könntest ;)
Ansonsten kann ich dir jetzt auch nicht sagen, an was das liegen könnte.

Gruß Daniel
 
Hier noch der Code von der setLocZwischenstand-Methode

Code:
 private string[] setLocZwischenstand()
{
            LocZwischenStand[0] = txtEiner.Text;
            LocZwischenStand[1] = txtZweier.Text;
            LocZwischenStand[2] = txtDreier.Text;
            LocZwischenStand[3] = txtVierer.Text;
            LocZwischenStand[4] = txtFuenfer.Text;
            LocZwischenStand[5] = txtSechser.Text;
            LocZwischenStand[6] = txtOben.Text;
            LocZwischenStand[7] = txtBonus.Text;
            LocZwischenStand[8] = txtTotalOben.Text;
            LocZwischenStand[9] = txtDreiGleiche.Text;
            LocZwischenStand[10] = txtVierGleiche.Text;
            LocZwischenStand[11] = txtFullhouse.Text;
            LocZwischenStand[12] = txtKleineStrasse.Text;
            LocZwischenStand[13] = txtGrosseStrasse.Text;
            LocZwischenStand[14] = txtChance.Text;
            LocZwischenStand[15] = txtYahtzee.Text;
            LocZwischenStand[16] = txtTotal.Text;
            return LocZwischenStand;
}

folgendermassen sieht meine Player-Klasse aus:

Code:
public Player(int id, string name)
{
            this.ID = id;
            this.Name = name;
}
private string[] zwischenStand;
public string[] ZwischenStand
{
         get
        {
                return zwischenStand;
        }
        set
       {
                zwischenStand = value;
        }
}
public int ID { get; set; }
public string Name { get; set; }
public bool turn { get; set; }
public bool[] buttons { get; set; }

Gruss und Danke
 
Ganz habe ich das Problem nicht verstanden, aber ich denke mal dein problem ist das player2 den gleichen zwischenstand hat wie player1 oder?

Soweit ich das sehe ist ja LocZwischenstand ein Array welches du nur einmal instanziierst und dieses übergibst du dann immer an deine player.

Und genau das scheint mir dein Problem zu sein, Arrays sind referenztypen, das heißt im prinzip gibst du immer nur die speicheradresse des arrays weiter.
Da du immer auf dem gleichen Array arbeitest haben auch beide die gleichen Daten.

Erstell mal in deiner setLocZwischenstand Methode ein neues Array und gibt das an die player.
 
Hey Spyke,
Genau das war das Problem.
Wie dumm von mir, dass ichs nicht gecheckt hab.
Vielen Dank!

Gruss Beni
 
Zuletzt bearbeitet:
Zurück