/// <summary> /// Spielzug wird auf Ergebnis geprüft. /// Win/Tie/Valid und Invalid sind mögliche Resultate /// Tastatuteingabe wird behandelt /// </summary> /// <param name="s"></param> public static void ValidateInput(Spielfeld s, ConsoleKey key) { ResetHints(); switch (key) { case ConsoleKey.Spacebar: case ConsoleKey.Enter: gameResult = s.Turn(new Point(Lesekopf.X, Lesekopf.Y)); break; case ConsoleKey.LeftArrow: if (Lesekopf.X > 0) { Lesekopf.X--; MoveCursor(); Console.BackgroundColor = ConsoleColor.Blue; OutputSign(Lesekopf.X, Lesekopf.Y); } break; case ConsoleKey.UpArrow: if (Lesekopf.Y > 0) { Lesekopf.Y--; MoveCursor(); Console.BackgroundColor = ConsoleColor.Blue; OutputSign(Lesekopf.X, Lesekopf.Y); } break; case ConsoleKey.RightArrow: if (Lesekopf.X < 2) { Lesekopf.X++; MoveCursor(); Console.BackgroundColor = ConsoleColor.Blue; OutputSign(Lesekopf.X, Lesekopf.Y); } break; case ConsoleKey.DownArrow: if (Lesekopf.Y < 2) { Lesekopf.Y++; MoveCursor(); Console.BackgroundColor = ConsoleColor.Blue; OutputSign(Lesekopf.X, Lesekopf.Y); } break; case ConsoleKey.F1: s.DrawHint(Lesekopf.X, Lesekopf.Y); ResetBoard2(); break; case ConsoleKey.Escape: break; } Console.ResetColor(); }
static void Main() { Console.CursorVisible = false; List <string> logolines = new List <string>(); // erstellen eines lagers für die logo-zeilen string readbuffer; //zwischenlager für eine gelesene Zeile using (var sr = new StreamReader("Logo.txt")) // öffnen der Datei mit lesezugriff while ((readbuffer = sr.ReadLine()) != null) // solange lesen bis NULL (dateiende) erreicht wird { logolines.Add(readbuffer); } // gelesene zeile im lager ablegen Random rndGen = new Random(); for (int counter = 0; counter < logolines.Count; counter++) { // ausgabe zentrieren Console.SetCursorPosition(Console.BufferWidth / 2 - logolines[counter].Length / 2, Console.WindowHeight / 2 - logolines.Count / 2 + counter); Console.ForegroundColor = (ConsoleColor)rndGen.Next(1, 16); // zufällige farbe einstellen Console.Write(logolines[counter]); // zeile ausgeben } Console.ReadKey(true); // auf irgendeinen tastenanschlag warten Console.ResetColor(); // farben zurücksetzen Console.Clear(); // bildschirm leeren string[] userNames = new string[2]; Console.WriteLine("Hallo User, ich bin ein Spiel"); // ausgabe begrüssung Console.WriteLine("Spieler X bitte name eingeben"); // ausgabe Spieler X bitte name eingeben userNames[0] = Console.ReadLine(); // eingabe von tastatur lesen und abspeichern Console.WriteLine("Spieler Y bitte name eingeben"); // ausgabe Spieler Y bitte name eingeben userNames[1] = Console.ReadLine(); // eingabe von tastatur lesen und abspeichern Spielfeld spiel = new Spielfeld(); do // wiederholen { spiel.Reset(); // spiel auf anfangszustand setzen TurnResult result = TurnResult.Invalid; do { // wiederholen Draw(spiel.GetBoard()); // spielfeld anzeigen do { // wiederholen Console.Write("Bitte feld auswählen {0} xy : ", (spiel.GetCurrentPlayer() ? userNames[0] : userNames[1])); // ausgabe Bitte feld auswählen byte X; byte Y; string userInput = Console.ReadLine();// eingabe des feldes lesen und abspeichern if (!byte.TryParse(userInput[0].ToString(), out X) || X > 2) { Console.WriteLine("keine gültige koordinate X"); continue; } if (!byte.TryParse(userInput[1].ToString(), out Y) || Y > 2) { Console.WriteLine("keine gültige koordinate Y"); continue; } result = spiel.Turn(new Point(X, Y)); // zug durchführen und ergebnis abspeichern } while (result == TurnResult.Invalid); // solange Spielerzug ungültig } while (result == TurnResult.Valid); // solange Spielerzug gültig Draw(spiel.GetBoard()); if (result == TurnResult.Tie) // wenn spielerzug unentschieden { Console.WriteLine("Unentschieden!"); } else { Console.WriteLine("Sieg für {0}", (spiel.GetCurrentPlayer() ? userNames[0] : userNames[1])); // ausgabe aktueller spieler hat gewonnen } Console.WriteLine("Möchten sie noch ein Spiel spielen? [y/n]"); // ausgabe möchten sie noch ein spiel? } while (Console.ReadKey(true).Key == ConsoleKey.Y); // solange y von der tastatur gelesen wurde Console.WriteLine("Auf wiedersehen"); }