Entwickler-Ecke

C# - Die Sprache - TicTacToe 3 Probleme, Fehlersuche, Schreibweise in Methoden


americanaccounts - Mi 07.05.08 13:31
Titel: TicTacToe 3 Probleme, Fehlersuche, Schreibweise in Methoden
Hallo,

ich weiß es ist nochmal das TicTacToe-Spiel, aber ich wusste nicht, ob ich meine Fragen nochmal in meinen abgeschlossenen Thread stellen sollte oder hier nochmal einen neuen Thread eröffnen sollte, da es sich um andere Probleme handelt.

Ich komm dann auch zur Sache:

Also mein Code zum Abfragen, ob die Zahl zwischen 1-9 ist und ob das Feld besetzt ist, sieht inzwischen so aus:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
while (true)
                {
                    Console.WriteLine("Spieler1: Gib eine Zahl von 1 bis 9 ein:");
                    i = Convert.ToInt32(Console.ReadLine());

                    if (i > 9 || i < 1)
                    {
                        Console.WriteLine("Die eingegebene Zahl ist außerhalb des gültigen Bereichs.");
                        continue;
                    }

                    if (spielfeld[i-1] == 'O' || spielfeld[i-1] == 'X')
                    {
                        Console.WriteLine("Dieses Feld ist bereits besetzt, bitte suche dir ein anderes aus.");
                        continue;
                    }

                    break;
                }


Jetzt wollte ich ganz einfach noch eine Abfrage machen, wann der Spieler1 gewonnen hat, also, dachte ich mir, mach ich das mit 'if'... wenn spielfeldx + spielfeldz +spielfeldy = X sind, dann hat Spieler1 gewonnen.

Sieht bei mir so aus (mit Schleife kombiniert):

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
while (true)
                {
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')))
                    {
                        Console.WriteLine("Spieler1 du hast gewonnen!");
                        break;
                    }
//hier steht der andere Rest (Abfrage Zahl usw.)
                 }


Aber das Programm greift einfach nicht ein.
Es wäre als ob die ganze 'if'-Abfrage nicht da wäre...naja deshalb frag ich euch, habe ich einen offentsichtlichen Fehler in meinem Gedankengang oder woran könnte es dann liegen?

Mein zweites Problem ist, dass ich mein komplettes TicTacToe in Methoden schreiben will.
Z.B. gäbs dann die Methode name();
Diese Methode sieht dann so aus, dass nach dem Spielername von Spieler1 und Spieler2 gefragt wird. Die Methode funktioniert auch soweit, sogut, außer dass ich "außerhalb" der Methode die Namen nicht verwenden kann...bzw. nicht weiß wie ich die Namen für das Programm übergeben kann.

Hier das Live-Beispiel:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
//Methode zum Bestimmen des Namen
 public static void name()
        {
            string name1;
            string name2;

            Console.WriteLine("Spieler1: Bitte geben Sie Ihren Namen an:");
            name1 = Console.ReadLine();

            Console.WriteLine("Spieler2: Bitte geben Sie Ihren Namen an:");
            name2 = Console.ReadLine();

            Console.WriteLine("Hi " + name1 + " und " + name2 + ",\ndas Spiel kann beginnen.");
            Console.WriteLine("Sie können Zahlen zwischen 1-9 eingeben, wenn Sie z.B. eine 1 drücken, wird die 1 durch ein O oder X ersetzte.");
            Console.ReadLine();
        }


Die Methode binde ich durch ein
name();
ein.
Aber wenn ich hinter dem name(); z.B. die Variable name1 verwende (in Console.Write("hallo"+ name1);, kommt ein Fehler (weiß jetzt nicht die genaue Fehlermeldung), aber es war soviel, dass die Variable nicht deklariert ist..oder so.
Ich bin mir ziemlich sicher, dass ich i-was mit return machen muss, würde mich daher über eine direkte Berichtigung meines Codes oder einfach mit paar Stichwörtern für Google freuen.


Meine letzte Frage ist eher nebensächlich und nur spielerei, aber wenn ich meinem TicTacToe ein Design verpassen will, wonach muss ich denn googlen. Finde i-wie nichts bei C# Design usw.

Ich bedanke mich für jede Antwort zu i-einer Frage, wobei die erste mir am wichtigsten ist, dann die zweite, dann die dritte.

Lg

Micha

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Th69 - Mi 07.05.08 14:37

zu 1. dir fehlen bei der Abfrage noch die 3 vertikalen Gewinnmöglichkeiten, ansonsten sieht es aber ok aus, benutze einfach den Debugger und überprüfe die Werte
zu 2. du must die Variablen als Klassenvariablen deklarieren (also außerhalb der Methoden). Außerdem darf die Methode name() dann nicht mehr statisch sein.
zu 3. da du ja eine Konsolenanwendung programmierst, bleiben dir nicht viele Design-Möglichkeiten (außer evtl. Farben setzen o.ä.)
Und bei deinem bisherigen Kenntnisstand kann ich dir auch noch nicht zur GUI-Programmierung empfehlen -)


Christian S. - Mi 07.05.08 17:08

Hallo!

Habe erst jetzt gesehen, dass da mehrere Fragen schlummern. Ich möchte Dich bitten, für jede Frage einen eigenen Thread zu eröffnen, denn sonst weiß hinterher keiner mehr, wer auf welche Frage antwortet. Außerdem kannst Du dann im Titel detaillierter auf das Problem eingehen.

Viele Dank! :-)

Grüße
Christian