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
2090901

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.