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

4 Lösungen Lösungen öffentlich
#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.
#3
vote_ok
von sasanaf (100 Punkte) - 03.02.2016 um 11:51 Uhr
Quellcode ausblenden C#-Code
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

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben