Einführung in C#
Spieleprogrammierung - Tic-Tac-Toe
Tic-Tac-Toe in einer Konsolenanwendung programmieren
Jeder kennt das Spiel Tic-Tac-Toe, welches normalerweise von keinem Spieler gewonnen werden kann.
Das Spiel wurde hier mit Hilfe eines zweidimensionalem Arrays in einer Konsolenanwendung programmiert:
namespace ConsoleApplication_tic_tac_toe_2 { class Program { static void Main(string[] args) { int spieler = 2; // Spieler 1 beginnt int eingabe = 0; int pruefflag = 0; int spielzug = 0; // Ein 3x3-Array mit den Feldnummern initialisieren char[,] spielfeld = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'} }; do { #region /* Spieler abwechseln */ if (spieler == 2) spieler = 1; else if (spieler == 1) spieler = 2; switch (spieler) // Prüfen, welcher Spieler an der Reihe ist { case 1: // Spieler 1 { switch (eingabe) // Dem gewählten Eingabefeld ein X zuweisen { case 1: spielfeld[0, 0] = 'X'; break; case 2: spielfeld[0, 1] = 'X'; break; case 3: spielfeld[0, 2] = 'X'; break; case 4: spielfeld[1, 0] = 'X'; break; case 5: spielfeld[1, 1] = 'X'; break; case 6: spielfeld[1, 2] = 'X'; break; case 7: spielfeld[2, 0] = 'X'; break; case 8: spielfeld[2, 1] = 'X'; break; case 9: spielfeld[2, 2] = 'X'; break; } break; } case 2: // Spieler 2 { switch (eingabe) // Dem gewählten Eingabefeld ein O zuweisen { case 1: spielfeld[0, 0] = 'O'; break; case 2: spielfeld[0, 1] = 'O'; break; case 3: spielfeld[0, 2] = 'O'; break; case 4: spielfeld[1, 0] = 'O'; break; case 5: spielfeld[1, 1] = 'O'; break; case 6: spielfeld[1, 2] = 'O'; break; case 7: spielfeld[2, 0] = 'O'; break; case 8: spielfeld[2, 1] = 'O'; break; case 9: spielfeld[2, 2] = 'O'; break; } break; } } #endregion #region Console.Clear(); /* Das 3x3-Array mit den aktuellen Werten ausgeben */ Console.WriteLine(" | | "); Console.WriteLine(" {0} | {1} | {2}", spielfeld[0, 0], spielfeld[0, 1], spielfeld[0, 2]); Console.WriteLine("_____|_____|_____ "); Console.WriteLine(" | | "); Console.WriteLine(" {0} | {1} | {2}", spielfeld[1, 0], spielfeld[1, 1], spielfeld[1, 2]); Console.WriteLine("_____|_____|_____ "); Console.WriteLine(" | | "); Console.WriteLine(" {0} | {1} | {2}", spielfeld[2, 0], spielfeld[2, 1], spielfeld[2, 2]); Console.WriteLine(" | | "); spielzug ++; // Jeden gültigen Spielzug mitzählen #endregion #region if ( ((spielfeld[0, 0] == 'O') && (spielfeld[0, 1] == 'O') && (spielfeld[0, 2] == 'O')) || ((spielfeld[1, 0] == 'O') && (spielfeld[1, 1] == 'O') && (spielfeld[1, 2] == 'O')) || ((spielfeld[2, 0] == 'O') && (spielfeld[2, 1] == 'O') && (spielfeld[2, 2] == 'O')) || ((spielfeld[0, 0] == 'O') && (spielfeld[1, 0] == 'O') && (spielfeld[2, 0] == 'O')) || ((spielfeld[0, 1] == 'O') && (spielfeld[1, 1] == 'O') && (spielfeld[2, 1] == 'O')) || ((spielfeld[0, 2] == 'O') && (spielfeld[1, 2] == 'O') && (spielfeld[2, 2] == 'O')) || ((spielfeld[0, 0] == 'O') && (spielfeld[1, 1] == 'O') && (spielfeld[2, 2] == 'O')) || ((spielfeld[0, 2] == 'O') && (spielfeld[1, 1] == 'O') && (spielfeld[2, 0] == 'O')) ) { Console.WriteLine("\nSpieler 2 hat gewonnen!"); Console.ReadLine(); break; } else if ( ((spielfeld[0, 0] == 'X') && (spielfeld[0, 1] == 'X') && (spielfeld[0, 2] == 'X')) || ((spielfeld[1, 0] == 'X') && (spielfeld[1, 1] == 'X') && (spielfeld[1, 2] == 'X')) || ((spielfeld[2, 0] == 'X') && (spielfeld[2, 1] == 'X') && (spielfeld[2, 2] == 'X')) || ((spielfeld[0, 0] == 'X') && (spielfeld[1, 0] == 'X') && (spielfeld[2, 0] == 'X')) || ((spielfeld[0, 1] == 'X') && (spielfeld[1, 1] == 'X') && (spielfeld[2, 1] == 'X')) || ((spielfeld[0, 2] == 'X') && (spielfeld[1, 2] == 'X') && (spielfeld[2, 2] == 'X')) || ((spielfeld[0, 0] == 'X') && (spielfeld[1, 1] == 'X') && (spielfeld[2, 2] == 'X')) || ((spielfeld[0, 2] == 'X') && (spielfeld[1, 1] == 'X') && (spielfeld[2, 0] == 'X')) ) { Console.WriteLine("\nSpieler 1 hat gewonnen!"); Console.ReadLine(); break; } else if (spielzug == 10) { Console.WriteLine("\nUnentschieden!"); Console.ReadLine(); break; } #endregion #region /* Prüfen, ob das gewählte Feld bereits vergeben ist */ do { Console.Write("\nSpieler {0}: Feld auswählen! ", spieler); eingabe = Convert.ToInt32(Console.ReadLine()); if ((eingabe == 1) && (spielfeld[0, 0] == '1')) // OK pruefflag = 0; else if ((eingabe == 2) && (spielfeld[0, 1] == '2')) // OK pruefflag = 0; else if ((eingabe == 3) && (spielfeld[0, 2] == '3')) // OK pruefflag = 0; else if ((eingabe == 4) && (spielfeld[1, 0] == '4')) // OK pruefflag = 0; else if ((eingabe == 5) && (spielfeld[1, 1] == '5')) // OK pruefflag = 0; else if ((eingabe == 6) && (spielfeld[1, 2] == '6')) // OK pruefflag = 0; else if ((eingabe == 7) && (spielfeld[2, 0] == '7')) // OK pruefflag = 0; else if ((eingabe == 8) && (spielfeld[2, 1] == '8')) // OK pruefflag = 0; else if ((eingabe == 9) && (spielfeld[2, 2] == '9')) // OK pruefflag = 0; else // Eingabefehler { Console.WriteLine("\nFehlerhafte Eingabe! Bitte wählen Sie ein neues Feld! "); pruefflag = 1; } } while (pruefflag == 1); #endregion } while (true); } } }