C# :: Aufgabe #40 :: Lösung #3
4 Lösungen

#40
4 Gewinnt für die Konsole
Anfänger - C#
von Gustl
- 05.01.2013 um 16:57 Uhr
Es soll 4 Gewinnt für die Konsole programmiert werden.
2 Spieler spielen gegeneinander, ohne Computergegner (ohne künstliche Intelligenz), spielen können.
Optional mit Computergegner, aber bitte in der Beschreibung dann angeben.
2 Spieler spielen gegeneinander, ohne Computergegner (ohne künstliche Intelligenz), spielen können.
Optional mit Computergegner, aber bitte in der Beschreibung dann angeben.
#3

von sasanaf (100 Punkte)
- 03.02.2016 um 11:51 Uhr

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace VierGewinnt { class Program { static void Main(string[] args) { //Standardwerte bool RandomStart = true, GameEnd = false; int Spieler = 0; Spieler = Berechnungen.Spieler(ref RandomStart); //HauptArray int[,] FelderArray = new int[8, 8]; while (!GameEnd) { //Eingabe Für Abwurf Oberflaeche.Anzeige(FelderArray, Spieler); Console.WriteLine("Waehle deinen Spielzug!", Spieler); string Eingabe = Console.ReadLine(); if (Berechnungen.ZahlValid(Eingabe)) { Oberflaeche.Anzeige(FelderArray, Spieler); //Spielerwahl und Abwurfaufruf int xPos = Convert.ToInt32(Eingabe) - 1; int yPos = 0; while (!Berechnungen.Abwurf(FelderArray, ref Spieler, ref xPos, ref yPos, ref GameEnd)) { Oberflaeche.Anzeige(FelderArray, Spieler); System.Threading.Thread.Sleep(20); } } } } class Oberflaeche { public static void Anzeige(int[,] FelderArray, int Spieler) { Console.Clear(); Console.WriteLine("- 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - [[Spieler {0}]]\n", Spieler); for (int x1 = 0; x1 < 8; x1++) { Console.WriteLine("----- ----- ----- ----- ----- ----- ----- ----- "); PrintZeile(FelderArray, x1); Console.WriteLine("\n----- ----- ----- ----- ----- ----- ----- ----- "); } } private static void PrintZeile(int[,] FelderArray, int Spaltennummer) { for (int x2 = 0; x2 < 8; x2++) { PrintZelle(FelderArray[x2, Spaltennummer]); } } private static void PrintZelle(int Value) { if (Value == Convert.ToInt32(Berechnungen.FeldFarbe.Leer)) { Console.Write("| | "); } else if (Value == Convert.ToInt32(Berechnungen.FeldFarbe.Weiss)) { PrintStein(Value, ConsoleColor.White); } else if (Value == Convert.ToInt32(Berechnungen.FeldFarbe.Gelb)) { PrintStein(Value, ConsoleColor.DarkYellow); } else if (Value == Convert.ToInt32(Berechnungen.FeldFarbe.Rot)) { PrintStein(Value, ConsoleColor.Red); } } private static void PrintStein(int Value, ConsoleColor Color) { Console.Write("- "); Console.BackgroundColor = Color; Console.ForegroundColor = Color; Console.Write(Value); Console.ResetColor(); Console.Write(" - "); } public static void TurnRed(int xPos, int yPos, int[,] WinningArray, int[,] FelderArray, int Spieler) { int xPosNew = 0; int yPosNew = 0; FelderArray[xPos, yPos] = (int)Berechnungen.FeldFarbe.Rot; for (int Schleife = 0; Schleife < 8; Schleife++) { xPosNew = WinningArray[Schleife, 0]; yPosNew = WinningArray[Schleife, 1]; FelderArray[xPosNew, yPosNew] = (int)Berechnungen.FeldFarbe.Rot; if (WinningArray[Schleife + 1, 0] == 0 || WinningArray[Schleife + 1, 1] == 0) { break; } } Oberflaeche.Anzeige(FelderArray, Spieler); Console.WriteLine("Spieler {0} hat gewonnen", Spieler); Console.ReadLine(); } class GameOver { public static bool GameOverNeu(int[,] FelderArray, int Spieler, int xPos, int yPos) { int[,] WinningArray = new int[8, 8]; if (SuedWestundNordOst(FelderArray, Spieler, xPos, yPos) || NordundSued(FelderArray, Spieler, xPos, yPos) || NordWestundSuedOst(FelderArray, Spieler, xPos, yPos) || WestundOst(FelderArray, Spieler, xPos, yPos)) { Oberflaeche.Anzeige(FelderArray, Spieler); return true; } return false; ; } public static bool SuedWestundNordOst(int[,] FelderArray, int Spieler, int xPos, int yPos) { int[,] WinningArray = new int[8, 8]; int xPosPruefen = xPos; int yPosPruefen = yPos; int counter = 0; //SuedWest for (int SW = 0; SW < 8; SW++) { xPosPruefen--; yPosPruefen++; if (ExceptionIncoming(xPosPruefen, yPosPruefen)) { break; } if (FelderArray[xPos, yPos] == Spieler && CheckFeldGesetzt(FelderArray, xPosPruefen, yPosPruefen, Spieler)) { WinningArray[counter, 0] = xPosPruefen; WinningArray[counter, 1] = yPosPruefen; counter++; if (counter >= 3) { Oberflaeche.TurnRed(xPos, yPos, WinningArray, FelderArray, Spieler); return true; } } else { break; } } xPosPruefen = xPos; yPosPruefen = yPos; //NordOst for (int NO = 0; NO < 8; NO++) { yPosPruefen--; xPosPruefen++; if (ExceptionIncoming(xPosPruefen, yPosPruefen)) { break; } if (FelderArray[xPos, yPos] == Spieler && CheckFeldGesetzt(FelderArray, xPosPruefen, yPosPruefen, Spieler)) { WinningArray[counter, 0] = xPosPruefen; WinningArray[counter, 1] = yPosPruefen; counter++; if (counter >= 3) { Oberflaeche.TurnRed(xPos, yPos, WinningArray, FelderArray, Spieler); return true; } } else { break; } } return false; } public static bool NordundSued(int[,] FelderArray, int Spieler, int xPos, int yPos) { int[,] WinningArray = new int[8, 8]; int xPosPruefen = xPos; int yPosPruefen = yPos; int counter = 0; //Nord for (int N = 0; N < 8; N++) { yPosPruefen--; if (ExceptionIncoming(xPosPruefen, yPosPruefen)) { break; } if (FelderArray[xPos, yPos] == Spieler && CheckFeldGesetzt(FelderArray, xPosPruefen, yPosPruefen, Spieler)) { WinningArray[counter, 0] = xPosPruefen; WinningArray[counter, 1] = yPosPruefen; counter++; if (counter >= 3) { Oberflaeche.TurnRed(xPos, yPos, WinningArray, FelderArray, Spieler); return true; } } else { break; } } xPosPruefen = xPos; yPosPruefen = yPos; //Sued for (int S = 0; S < 8; S++) { yPosPruefen++; if (ExceptionIncoming(xPosPruefen, yPosPruefen)) { break; } if (FelderArray[xPos, yPos] == Spieler && CheckFeldGesetzt(FelderArray, xPosPruefen, yPosPruefen, Spieler)) { WinningArray[counter, 0] = xPosPruefen; WinningArray[counter, 1] = yPosPruefen; counter++; if (counter >= 3) { Oberflaeche.TurnRed(xPos, yPos, WinningArray, FelderArray, Spieler); return true; } } else { break; } } return false; } public static bool NordWestundSuedOst(int[,] FelderArray, int Spieler, int xPos, int yPos) { int[,] WinningArray = new int[8, 8]; int xPosPruefen = xPos; int yPosPruefen = yPos; int counter = 0; //NordWest for (int NW = 0; NW < 8; NW++) { yPosPruefen--; xPosPruefen--; if (ExceptionIncoming(xPosPruefen, yPosPruefen)) { break; } if (FelderArray[xPos, yPos] == Spieler && CheckFeldGesetzt(FelderArray, xPosPruefen, yPosPruefen, Spieler)) { WinningArray[counter, 0] = xPosPruefen; WinningArray[counter, 1] = yPosPruefen; counter++; if (counter >= 3) { Oberflaeche.TurnRed(xPos, yPos, WinningArray, FelderArray, Spieler); return true; } } else { break; } } xPosPruefen = xPos; yPosPruefen = yPos; //SuedOst for (int SO = 0; SO < 8; SO++) { yPosPruefen++; xPosPruefen++; if (ExceptionIncoming(xPosPruefen++, yPosPruefen)) { break; } if (FelderArray[xPos, yPos] == Spieler && CheckFeldGesetzt(FelderArray, xPosPruefen++, yPosPruefen, Spieler)) { WinningArray[counter, 0] = xPosPruefen++; WinningArray[counter, 1] = yPosPruefen; counter++; if (counter >= 3) { Oberflaeche.TurnRed(xPos, yPos, WinningArray, FelderArray, Spieler); return true; } } else { break; } } return false; } public static bool WestundOst(int[,] FelderArray, int Spieler, int xPos, int yPos) { int[,] WinningArray = new int[8, 8]; int xPosPruefen = xPos; int yPosPruefen = yPos; int counter = 0; //West for (int W = 0; W < 8; W++) { xPosPruefen--; if (ExceptionIncoming(xPosPruefen, yPosPruefen)) { break; } if (FelderArray[xPos, yPos] == Spieler && CheckFeldGesetzt(FelderArray, xPosPruefen, yPosPruefen, Spieler)) { WinningArray[counter, 0] = xPosPruefen; WinningArray[counter, 1] = yPosPruefen; counter++; if (counter >= 3) { Oberflaeche.TurnRed(xPos, yPos, WinningArray, FelderArray, Spieler); return true; } } else { break; } } xPosPruefen = xPos; yPosPruefen = yPos; //Ost for (int O = 0; O < 8; O++) { xPosPruefen++; if (ExceptionIncoming(xPosPruefen, yPosPruefen)) { break; } if (FelderArray[xPos, yPos] == Spieler && CheckFeldGesetzt(FelderArray, xPosPruefen, yPosPruefen, Spieler)) { WinningArray[counter, 0] = xPosPruefen; WinningArray[counter, 1] = yPosPruefen; counter++; if (counter >= 3) { Oberflaeche.TurnRed(xPos, yPos, WinningArray, FelderArray, Spieler); return true; } } else { break; } } return false; } public static bool ExceptionIncoming(int x, int y) { if (x <= -1 || y <= -1 || x >= 8 || y >= 8) { return true; } return false; } public static bool CheckFeldGesetzt(int[,] Felderarray, int x, int y, int Spieler) { if (Felderarray[x, y] == Spieler) return true; return false; } class Berechnungen { public enum FeldFarbe { Leer, Weiss, Gelb, Rot } public static bool ZahlValid(string Eingabe) { if (Eingabe.All(char.IsDigit) && Eingabe != "" && Convert.ToInt32(Eingabe) <= 8 && Convert.ToInt32(Eingabe) >= 1) { return true; } else { Console.WriteLine("Falsche Eingabe"); return false; } } public static bool Abwurf(int[,] FelderArray, ref int Spieler, ref int xPos, ref int yPos, ref bool GameEnd) { { if (FelderArray[xPos, 0] == (int)FeldFarbe.Leer) { FelderArray[xPos, yPos] = Spieler; if (yPos <= 6 && FelderArray[xPos, yPos + 1] == (int)FeldFarbe.Leer) { FelderArray[xPos, yPos] = (int)FeldFarbe.Leer; FelderArray[xPos, yPos + 1] = Spieler; yPos++; } else { GameEnd = GameOver.GameOverNeu(FelderArray, Spieler, xPos, yPos); Spieler = SpieleWechsel(Spieler); return true; } } else { Oberflaeche.Anzeige(FelderArray, Spieler); Console.WriteLine("Zuviele Chips in der Reihe!"); Spieler = SpieleWechsel(Spieler); return true; } return false; } } public static int Spieler(ref bool RandomStart) { int Spieler = Convert.ToInt32(FeldFarbe.Weiss); if (RandomStart) { Random rand = new Random(); Spieler = rand.Next(1, 3); RandomStart = false; } return Spieler; } public static int SpieleWechsel(int Spieler) { if (Spieler == Convert.ToInt32(FeldFarbe.Gelb)) { Spieler = Convert.ToInt32(FeldFarbe.Weiss); } else if (Spieler == Convert.ToInt32(FeldFarbe.Weiss)) { Spieler = Convert.ToInt32(FeldFarbe.Gelb); } return Spieler; } } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1