Laden...

Objekt hat plötzlich wieder die Startwerte

Erstellt von DerKölner vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.307 Views
Thema geschlossen
D
DerKölner Themenstarter:in
2 Beiträge seit 2011
vor 13 Jahren
Objekt hat plötzlich wieder die Startwerte

Hallo,

erst mal zu mir: Ich bin Schüler an einer IT Berufsschule. Wir lernen jetzt seit einem halben Jahr C#.
Jetzt wollte ich ein bisschen Learning by Doing betreiben und mit C# und Forms ein Tick Tack Toe Spiel schreiben.
Nur ist jetzt ein Problem mit dem Klassenkonzept aufgetreten.
Erst mal zum Aufbau:
Das Spielfeld besteht hauptsächlich aus 9 Bottons. Wird einer gedrückt, ändert er seine Farbe und setzt in einem bool Array[3,3] seinen Wert auf true. Anschließend wird eine Methode aufgerufen, die 1. den Gegenspieler darstellen soll und 2. eine andere Mathode aufruft, die prüft über if Abfragen ob das Spiel gewonnen wurde. Das Array und die beiden Methoden befinden sich in einer neuen Klasse.

Das Problem:
Er erkennt einfach nicht, dass das Spiel gewonnen wurde. Um das Problem zu finden hab ich dann das Programm Zeile um Zeile ausgeführt und dabei das Array im Lokal Fenster überwacht.
Wenn der Button aktiviert wurde, wird der Wert richtig gesetzt (auch bei den folgenden Buttons). Sobald aber die Methode in der Klasse aufgerufen wird, in der auch das Array ist, sind plötzlich alle Werte auf false.
Ich hab jetzt im Internet, in unserem C# Buch und in einerm Galileo Computing Buch gesucht, komme aber auf keinen grünen Ast.

Woran liegt das und wie kann man das beheben?
Auch ein Tipp wonach man hier lesen muss währe super.

LG
Der Kölner

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo DerKölner,

willkommen bei myCSharp.de

Jetzt wollte ich ein bisschen Learning by Doing betreiben und mit C# und Forms ein Tick Tack Toe Spiel schreiben.

Damit habe ich auch angefangen 😉 Der nächste Schritt ist dann 4 Gewinnt 😃

Woran liegt das und wie kann man das beheben?

Das ist ohne weitere Details sehr schwierig zu sagen.
Kannst du evtl. etwas relevanten Code posten damit wir sehen können wo das Problem ist?

Den Debugger hast du schon verwendet, dann kann man so ohne Details nicht viel zu sagen.

Wie gibst du der anderen Klasse die Daten mit?

Gruß
Michael

D
DerKölner Themenstarter:in
2 Beiträge seit 2011
vor 13 Jahren

willkommen bei myCSharp.de

Danke

Hier erst mal die eine Klasse mit den Buttons:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TickTackToe
{
    public partial class Spielfeld : Form
    {
        Code Objekt = new Code();
        internal int TeSt = new int();

        public Spielfeld()
        {
            InitializeComponent();
        }

        private void Button_1_1_Click(object sender, EventArgs e)
        {
            if (Button_1_1.BackColor != Color.Red || Button_1_1.BackColor != Color.Blue)
            {
                Button_1_1.BackColor = Color.Blue;
                Objekt.Feld[0, 0] = true;
                if(Code.KI())gewonnen();
            }
        }
        public void gewonnen()
        {
            MessageBox.Show("Gewonnen");
            System.Threading.Thread.Sleep(5000);
            this.Close();
        }
    }
}

Und hier die Klasse mit dem Rest:


using System;
using System.Collections.Generic;
using System.Text;

namespace TickTackToe
{
    class Code
    {
        internal bool[,] Feld = new bool[3, 3];

        internal static bool KI()
        {
            bool gewonnen = false;
            gewonnen = gewinnPrüfung();
            return gewonnen;

        }
        private static bool gewinnPrüfung()
        {
            bool gewonnen = false;
            Code Objekt = new Code();

            if (Objekt.Feld[0, 0] && Objekt.Feld[0, 1] && Objekt.Feld[0, 2]) gewonnen = true;
            if (Objekt.Feld[1, 0] && Objekt.Feld[1, 1] && Objekt.Feld[1, 2]) gewonnen = true;
            if (Objekt.Feld[2, 0] && Objekt.Feld[2, 1] && Objekt.Feld[2, 2]) gewonnen = true;
            if (Objekt.Feld[0, 0] && Objekt.Feld[1, 0] && Objekt.Feld[2, 0]) gewonnen = true;
            if (Objekt.Feld[0, 1] && Objekt.Feld[1, 1] && Objekt.Feld[2, 1]) gewonnen = true;
            if (Objekt.Feld[0, 2] && Objekt.Feld[1, 2] && Objekt.Feld[2, 2]) gewonnen = true;
            if (Objekt.Feld[0, 0] && Objekt.Feld[1, 1] && Objekt.Feld[2, 2]) gewonnen = true;
            if (Objekt.Feld[2, 0] && Objekt.Feld[1, 1] && Objekt.Feld[0, 2]) gewonnen = true;

            return gewonnen;
        }
    }
}

In KI() sollte eigentlich noch der Gegenspieler rein.

LG
Der Kölner

A
118 Beiträge seit 2009
vor 13 Jahren

Hallo,

Das liegt daran, dass du ihn gewinnPrüfung ein neues Objekt erzeugst. Das ist dann nicht mehr das gleiche, wie das, welches du geändert hast.

Gruss
Aratar

Hinweis von herbivore vor 13 Jahren

Es ist gut, dass du Learning by Doing betreibst. Bitte beachte trotzdem [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

Thema geschlossen