[C#]Problem mit Spiel(TicTacToe)

tonikln

Lt. Junior Grade
Registriert
Aug. 2005
Beiträge
314
Hallo zusammen,
nach langer zeit hab ich es geschafft mich mit Programmierung zu beschäftigen.
Nun habe ich auch ein Spile programmiert und leider hab ich ein Problem

Ich wollte es so machen das wenn ein X oder O schon auf dem spielfeld ist, das es nicht überschrieben wird. Ich glaube ich hab das an der falschen Stelle programmiert.
Schaut mal bitte rein.

Code:
/*Programmieren:Toni, Moe
 * Datum: 05.12.2006
 * Programm: TicTacToe
 */




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

namespace TicTacToe01
{
    class Program
    {
        /// <summary>
        /// Hauptmethode
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {            
            string[] spielfeld = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };

            //Namen von Spieler
            Console.WriteLine("****TicTacToe****");
            Console.Write("Spieler 1 bitte Name eingeben: ");
            string Spieler1 = Console.ReadLine();
            Console.Clear();
            Console.WriteLine("****TicTacToe****");
            Console.Write("Spieler 2 bitte Name eingeben: ");
            string Spieler2 = Console.ReadLine();
            Console.WriteLine();
            Console.WriteLine("Möge der bessere Gewinnen!!!!!!");
            Console.WriteLine("Eingabetaste drücken für weiter");
            Console.ReadLine();
            Console.Clear();

            //Hauptschleife
            int zähler = 0;
            do
            {
                //Bildschirminhalt wird gelöscht und das Spilefeld wird ausgegeben
                Console.Clear();
                Console.WriteLine("****TicTacToe****");
                Console.WriteLine();
                Console.WriteLine("   " + spielfeld[0] + " | " + spielfeld[1] + " |  " + spielfeld[2] + "	");
                Console.WriteLine("     |   |           ");
                Console.WriteLine(" -------------	");
                Console.WriteLine("   " + spielfeld[3] + " | " + spielfeld[4] + " |  " + spielfeld[5] + "	");
                Console.WriteLine(" -------------	");
                Console.WriteLine("     |   |        	");
                Console.WriteLine("   " + spielfeld[6] + " | " + spielfeld[7] + " |  " + spielfeld[8] + "	");
                Console.WriteLine();
                Console.WriteLine("-------------------------------------------------------");

                //Hier wird der erste Spielzug eingegeben
                int zahl;                
                    Console.Write("Sie sind dran " + Spieler1 + ":");
                    string eingabe = Console.ReadLine();
                    zahl = Convert.ToInt32(eingabe);
                    zahl = zahl - 1;
                
                //Überprüfung von gültiger Zahl
                while(zahl > 8 || zahl < 0)
                {
                    Console.WriteLine("Geben sie eine gültige Zahl ein:");
                    eingabe = Console.ReadLine();
                    zahl = Convert.ToInt32(eingabe);
                    zahl = zahl - 1;
                }
                    //Überprüfung auf leeres Feld
                    if (spielfeld[zahl] == "X" || spielfeld[zahl] == "O")
                    {
                        Console.WriteLine("Feld besetzt");
                    }
                    spielfeld[zahl] = "X";


                if (MuehlePruefen(spielfeld) == true)
                {
                    Console.WriteLine("Nochmal????");
                    Console.WriteLine();
                    Console.WriteLine("Bitte Eingabetaste für nochmal Drücken");
                    Console.WriteLine();
                    Console.WriteLine("Sonst bitte StrG + C zum beenden");
                    Console.ReadLine();
                    Console.Clear();
                    Main(args);
                }

                //Hier beginnt das Spielfeld für den 2ten spieler
                Console.Clear();
                Console.WriteLine("****TicTacToe****");
                Console.WriteLine();
                Console.WriteLine("   " + spielfeld[0] + " | " + spielfeld[1] + " |  " + spielfeld[2] + "	");
                Console.WriteLine("     |   |           ");
                Console.WriteLine(" -------------	");
                Console.WriteLine("   " + spielfeld[3] + " | " + spielfeld[4] + " |  " + spielfeld[5] + "	");
                Console.WriteLine(" -------------	");
                Console.WriteLine("     |   |        	");
                Console.WriteLine("   " + spielfeld[6] + " | " + spielfeld[7] + " |  " + spielfeld[8] + "	");
                Console.WriteLine();
                Console.WriteLine("-------------------------------------------------------");
                zähler++;

                //Hier wird der erste Spielzug von Spiler 2 eingegeben
                int zahl2;
                    Console.Write("Sie sind dran " + Spieler2 + ":");
                    string eingabe2 = Console.ReadLine();
                    zahl2 = Convert.ToInt32(eingabe2);
                    zahl2 = zahl2 - 1;

                    //Überprüfung von gültiger Zahl
                    while (zahl2 > 8 || zahl2 < 0)
                    {
                        Console.WriteLine("Geben sie eine gültige Zahl ein:");
                        eingabe2 = Console.ReadLine();
                        zahl2 = Convert.ToInt32(eingabe2);
                        zahl2 = zahl2 - 1;
                    }
                    //Überprüfung auf leeres Feld
                    if (spielfeld[zahl2] == "X" || spielfeld[zahl2] == "O")
                    {
                        Console.WriteLine("Feld besetzt");
                    }
                    spielfeld[zahl2] = "O";


                if (MuehlePruefen(spielfeld) == true)
                {
                    Console.WriteLine("Nochmal????");
                    Console.WriteLine();
                    Console.WriteLine("Bitte Eingabetaste für nochmal Drücken");
                    Console.WriteLine();
                    Console.WriteLine("Sonst bitte StrG + C zum beenden");
                    Console.ReadLine();
                    Console.Clear();
                    Main(args);
                }
            } while (zähler < 4);//Bei einem Unentschieden bricht die while-Schleife automatisch ab und starteet das Spiel neu

            Console.WriteLine("Unentschieden!!!!");
            Console.WriteLine();
            Console.WriteLine("Bitte Eingabetaste für nochmal Drücken");
            Console.WriteLine();
            Console.WriteLine("Sonst bitte StrG + C zum beenden");
            Console.ReadLine();
            Console.Clear();
            Main(args);

        }

        //Mühlenprüfung
        private static bool MuehlePruefen(string[] spielfeld)
        {
            //Überprüft ob Spieler mit Spielstein X gewonnen hat
            if (((spielfeld[0] == "X") && (spielfeld[1] == "X") && (spielfeld[2] == "X")) || ((spielfeld[3] == "X") && (spielfeld[4] == "X") && (spielfeld[5] == "X")) || ((spielfeld[6] == "X") && (spielfeld[7] == "X") && (spielfeld[8] == "X")) || ((spielfeld[0] == "X") && (spielfeld[4] == "X") && (spielfeld[8] == "X")) || ((spielfeld[2] == "X") && (spielfeld[4] == "X") && (spielfeld[6] == "X")) || ((spielfeld[0] == "X") && (spielfeld[3] == "X") && (spielfeld[6] == "X")) || ((spielfeld[1] == "X") && (spielfeld[4] == "X") && (spielfeld[7] == "X")) || ((spielfeld[2] == "X") && (spielfeld[5] == "X") && (spielfeld[8] == "X")))
            {
                Console.WriteLine("Spieler mit Spielstein X hat gewonnen!!!!!!");
                return true;
            }
            //Überprüft ob Spieler mit Spielstein O gewonnen hat
            else if (((spielfeld[0] == "O") && (spielfeld[1] == "O") && (spielfeld[2] == "O")) || ((spielfeld[3] == "O") && (spielfeld[4] == "O") && (spielfeld[5] == "O")) || ((spielfeld[6] == "O") && (spielfeld[7] == "O") && (spielfeld[8] == "O")) || ((spielfeld[0] == "O") && (spielfeld[4] == "O") && (spielfeld[8] == "O")) || ((spielfeld[2] == "O") && (spielfeld[4] == "O") && (spielfeld[6] == "O")) || ((spielfeld[0] == "O") && (spielfeld[3] == "O") && (spielfeld[6] == "O")) || ((spielfeld[1] == "O") && (spielfeld[4] == "O") && (spielfeld[7] == "O")) || ((spielfeld[2] == "O") && (spielfeld[5] == "O") && (spielfeld[8] == "O")))
            {
                Console.WriteLine("Spieler mit Spielstein O hat gewonnen!!!!!!");
                return true;
            }

            return false;
        }

    }

}

Freue mich über jeden Tipp, vielen Dank im Voraus ;)
 
HI,

Wenn ich dich richtig verstanden habe, willst du prüfen ob das Feld besetzt ist oder nicht. Wenn es besetzt ist, soll er ein neues Feld eingeben.
Das Problem an deinem Code ist, dass du auf überschreiben prüfst, ne Meldung bei Fehler ausgibst, aber dann doch überschreibst. * Was für ein Satz* ;)

Code:
......

           //Überprüfung von gültiger Zahl
         while(1)
         {
               string eingabe = Console.ReadLine();
               zahl = Convert.ToInt32(eingabe);
               zahl = zahl - 1;

                while(zahl > 8 || zahl < 0)
                {
                    Console.WriteLine("Geben sie eine gültige Zahl ein:");
                    eingabe = Console.ReadLine();
                    zahl = Convert.ToInt32(eingabe);
                    zahl = zahl - 1;
                }
                    //Überprüfung auf leeres Feld
                    if (spielfeld[zahl] == "X" ||  spielfeld[zahl] == "O")
                    {
                        //Feld ist besetzt. Meldung und zurück zu eingabe
                        Console.WriteLine("Feld besetzt. Bitte neue Zahl eingeben:");
                    }
                    else
                   {
                          //Feld ist ok. Feld setzen,  while Schleife beenden und weiter im Programm
                          spielfeld[zahl] = "X";
                          break;
                    }
           }
.....

Wobei eine while(1) nicht so toll ist. Solltest du vielleicht ändern.
Aber so ähnlich würde ich das machen.

Ich hoffe das hilft dir.

MFG gloomyslayer
 
Zuletzt bearbeitet:
was könnt ich denn anstatt der while schleife machen ??

Also welche methode wäre besser ??
 
pro rechtschreibprüfung
(und weniger !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! und ???????????????????????????? - wirkt ein bisschen degeneriert :))
 
HereticNovalis schrieb:
pro rechtschreibprüfung
(und weniger !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! und ???????????????????????????? - wirkt ein bisschen degeneriert :))

Vielen Dank für den Beitrag.
Schön zu wissen, das es Benutzer gibt, die nichts besseres zu tun haben, als sich über Rechtschreibfehler in einem Forum zu beklagen. :freak:

was könnt ich denn anstatt der while schleife machen ??

Also welche methode wäre besser ??

Du müsstest nur in die while- Schleife eine Bedingung packen, da while(1) ja eine Endlosschleife darstellt. Manche fassen das als schlechten Programmierstil auf. ;)

Falls du es ändern möchtest, überlasse ich es dir.
Ich habe dir ja bereits einen Weg aufgezeigt.
Bringt wahrscheinlich mehr, wenn du dich ein bisschen damit auseinandersetzt.

MFG gloomyslayer
 
Zuletzt bearbeitet:
@gloomyslayer

hast du das schon ausprobiert ob es klappt ??

weil bei mir klappt es nämlich nicht
oder ich mach etwas falsch und weiß nicht was :(
 
tonikln schrieb:
hast du das schon ausprobiert ob es klappt ??

weil bei mir klappt es nämlich nicht
oder ich mach etwas falsch und weiß nicht was :(

Habs grad mal ausprobiert.
Wie es aussieht mag mein Compiler unter C#(MS VS 2003) while(1) nicht, beim ändern auf while(true) gehts aber.

MFG gloomyslayer
 
Zuletzt bearbeitet:
Also vielen Danke jetzt läuft mein programm einwandfrei ;)


Gibt es eigentlich sonst noch etwas was ich verkürzen könnte ?
 
Du könntest Funktionen erstellen, damit du nicht alles doppelt (Für Spieler 1 und2) im Quellcode hast.

MFG gloomyslayer
 
Ich glaube ich bin noch nicht soweit mit den funktionen :D

aber ich werde mich damit beschäftigen ;)

Was für ein Spiel könnte ich eigentlich noch programmieren, was nicht so schwer wäre :D??


Vielen Dank nochmal
 
Wir haben damals Nimm und vier gewinnt programmiert.

MFG gloomyslayer
 
Vier gewinnt wäre nicht schlecht
danke für die idee, aber ich denke das ist etwas zu schwer, weil ich noch anfänger bin
am besten wäre noch so konsolenprogramme

aber was ist NIMM ???
das hab ich noch nie gehört
 
Zuletzt bearbeitet:
Vielen Dank

ich werde mich also ma damit beschäftigen ;)
 

Ähnliche Themen

W
  • Geschlossen
  • Frage
2 3
Antworten
45
Aufrufe
2.822
  • Gelöst
2
Antworten
28
Aufrufe
1.671
Antworten
8
Aufrufe
4.968
Zurück
Oben