Tic-Tac-Toe in C#

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Tic-Tac-Toe in C#

    Muss derzeit für die Schule das Spiel Tic-Tac-Toe in C# realisieren. Das Spielfeld habe ich dazu über 9 Buttons realisiert und für die Spieler 2 boolsche Variablen festgelegt.
    Soweit so gut, nun habe ich halt eine neue Funktion anglegt

    Quellcode

    1. public void kombinationen ()
    um die Gewinnkombinationen abzufragen, aber ich habe das Gefühl, dass der Inhalt der da drin steht nicht ausgeführt wird. In der Funkton steht eine bzw. mehrere If-Schleifen zum Abfragen der erfüllten Gewinnkombinationen für die Fälle X und O. Beispiel:

    Quellcode

    1. if (button3.Text == "X" && button4.Text == "X" && button5.Text == "X")
    2. { MessageBox.Show("Spieler 1 (X) hat gewonnen", "Game Over",MessageBoxButtons.OK);
    3. }
    4. else if (button6.Text == "X" && button7.Text == "X" && button8.Text == "X")
    5. {
    6. MessageBox.Show("Spieler 1 (X) hat gewonnen", "Game Over", MessageBoxButtons.OK);
    7. }
    Alles anzeigen


    Allerdings geht nie eine Message Box auf, wenn eine der vielen Kombinationen erfüllt ist. Hat jemand eine Idee, was da falsch ist, oder muss ich die Funktion noch irgendwo deklarieren.
  • Warum schreibst du keine neue Klasse? Außerdem würde ich dann die Label-Klasse als Basisklasse benutzen, da die Button-Klasse eigenschaften hat, die du nicht brauchst.

    Und zum Gewinnen: ich denke den Algorithmus dafür, wirst nicht finden. Wirst um Bedingungen nicht rumkommen. Und als kleiner Tipp: um zu Gewinnen, müssen mindestens 2 der linken und oberen Spalte gegeben sein:

    XXO OX_
    _XO OX_
    _OX O__
  • Scheinbar verstehe ich dich nun falsch. Wenn ich jetzt eine neue Kasse erstelle und darein die Abfragen packe, dann kennt er die Buttons nicht, da sie ja in einer anderen Klasse liegen. Prinzipiell sind mir die Funktionen/Eigenschaften total egal, die die Klasse hat. Mir geht es hauptsächlich nur darum, warum die Funktion nicht ausgeführt wird.
  • Sorry für den Doppelpost, aber ich probiere da jetzt schon ewig dran rum und krieg das nicht auf die Reihe und was wirklich hilfreiches finde ich auch nicht im Internet und in der Suchen. Und zwar rufe ich die Funktion wie folgt auf

    Quellcode

    1. private void gewinnkombinationen ()
    2. {
    3. Form1 kombi = new Form1();
    4. if (button3.Text == "X" && button4.Text == "X" && button5.Text == "X")
    5. {
    6. MessageBox.Show("Spieler 1 (X) hat gewonnen", "Game Over", MessageBoxButtons.OK);
    7. }
    8. }

    Dabei ist form1 die Klasse.
    Und aufrufen tue ich die so:

    Quellcode

    1. private void button3_Click(object sender, EventArgs e)
    2. {
    3. if (Spieler1 == true)
    4. {
    5. Spieler1 = true;
    6. button3.Text = "O";
    7. Spieler1 = false;
    8. }
    9. else
    10. {
    11. gegner = true;
    12. button3.Text = "X";
    13. gegner = false;
    14. Spieler1 = true;
    15. }
    16. kombi();
    17. }
    Alles anzeigen


    Allerdings habe ich irgendwie das Gefühl, dass das nicht so richtig funktioniert. Leider findet man in keinem kostenlosen Buch eine vernünftige Erklärung dafür.
    Hoffe die Frage ist jetzt nicht zu doof.
  • "Chris2k" schrieb:

    Quellcode

    1. private void gewinnkombinationen ()
    2. {
    3. if (button3.Text == "X" && button4.Text == "X" && button5.Text == "X")
    4. {
    5. MessageBox.Show("Spieler 1 (X) hat gewonnen", "Game Over", MessageBoxButtons.OK);
    6. }
    7. }

    Quellcode

    1. private void button3_Click(object sender, EventArgs e)
    2. {
    3. if (Spieler1 == true)
    4. {
    5. Spieler1 = true;
    6. button3.Text = "O";
    7. Spieler1 = false;
    8. }
    9. else
    10. {
    11. gegner = true;
    12. button3.Text = "X";
    13. gegner = false;
    14. Spieler1 = true;
    15. }
    16. gewinnkombinationen ();
    17. }
    Alles anzeigen



    So wird schon eher was daraus.
    Bei deinem momentanen Programmaufbau musst du in jeder Button_Click Methode die Methode gewinnkombinationen aufrufen um zu überprüfen ob der Spieler gewonnen hat.
    Was hast du dir davon versprochen dass du in der Methode gewinnkombinationen ein neues Exemplar der Klasse Form1 erstellst?

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)