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

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.
#4
vote_ok
von Abedull (40 Punkte) - 27.09.2016 um 15:15 Uhr
Quellcode ausblenden C#-Code
using System;

class Spiel
{

    class Feld
    {
        public string[,] Spielfeld = new string[10, 18];

        public Feld()
        {
            for (int j = 0; j < 10; j++)
            {
                for (int i = 0; i < 18; i += 1)
                {
                    if (i % 2 == 0) Spielfeld[j, i] = "|";
                    else Spielfeld[j, i] = " ";
                }
            }

            for (int j = 0; j < 10; j++)
            {
                for (int i = 0; i < 18; i += 1)
                {
                    Console.Write(Spielfeld[j, i]);
                }
                Console.Write("\n");
			}
			Console.WriteLine(" 1 2 3 4 5 6 7 8");
        }

        public void ausgabe()
        {
            for (int j = 0; j < 10; j++)
            {
                for (int i = 0; i < 18; i += 1)
                {
                    Console.Write(Spielfeld[j, i]);
                }
                Console.Write("\n");
            }
			Console.WriteLine(" 1 2 3 4 5 6 7 8");
        }

        public bool auswerten(string[,] Spiel)
        {
            //prüfen ob 4 gleiche nebeneinander
            
			//array waagerecht
            string[] wg = new string[80];
            int k = 0;

            for (int j = 0; j < 10; j++)
            {
                for (int i = 1; i < 16; i += 2)
                {
                    wg[k] = Spiel[j, i];
                    k += 1;
                }
            }

            //array senkrecht
			string[] sk = new string[80];
            k = 0;
			
            for (int j = 1; j < 16; j+=2)
            {
                for (int i = 0; i < 10; i ++)
                {
                    sk[k] = Spiel[i, j];
                    k += 1;
                }
            }
			
			//array diagonal links nach rechts
			string [] dl = new string[160];
			k = 0;
			
			for (int h = 0; h<9; h++)
			{			
				int i = h;
				int j = 1;
				do 
				{
					dl[k] = Spiel[i, j];
					k++;
					i++;
					j+=2;
				}
				while (i<9);
				dl [k] = " ";
				k++;
			}
			
			for (int h = 3; h<=16; h+=2)
			{			
				int j = h;
				int i = 0;
				do 
				{
					dl[k] = Spiel[i, j];
					k++;
					i++;
					j+=2;
				}
				while (j<=16);
				dl [k] = " ";
				k++;
			}
			
			//rechts nach links
			for (int h = 0; h<9; h++)
			{			
				int i = h;
				int j = 17;
				do 
				{
					dl[k] = Spiel[i, j];
					k++;
					i++;
					j-=2;
				}
				while (i<9);
				dl [k] = " ";
				k++;
			}
			
			for (int h = 15; h<=16; h+=2)
			{			
				int j = h;
				int i = 0;
				do 
				{
					dl[k] = Spiel[i, j];
					k++;
					i++;
					j+=2;
				}
				while (j<=16);
				dl [k] = " ";
				k++;
			}
			
			//prüfen ob vier gleiche nebeneinander
			int Reihewaagerecht = 1;
            int Reihesenkrecht = 1;
			int Reihediagonal = 1;
			Console.WriteLine(wg.Length + " " + sk.Length + " " + dl.Length);
            int s = 0;
            while (s < wg.Length)
            {
                    if ((wg[s] == "O" || wg[s] == "X") && (wg[s] == wg[s + 1])) Reihewaagerecht += 1;
                    else Reihewaagerecht = 1;
                    if ((sk[s] == "O" || sk[s] == "X") && (sk[s] == sk[s + 1])) Reihesenkrecht += 1;
                    else enkrecht = 1;

                    if (Reihewaagerecht == 4 || Reihesenkrecht == 4 )
                    {
                        Console.WriteLine("GEWONNEN");
                        return true;
                    }
                s++;
            }
					
			s = 0;
            while (s < dl.Length)
            {
                    if (dl[s] == "O" || dl[s] == "X")  Reihediagonal += 1;
                    else Reihediagonal = 1;
                    
                    if (Reihediagonal == 4 )
                    {
                        Console.WriteLine("GEWONNEN");
                        return true;
                    }
				s++;
            }
			return false;
        }
    }

    class Spieler
    {
        string Name;
        public string Sign;

        public Spieler(string Name, string Sign)
        {
            this.Name = Name;
            this.Sign = Sign;
        }

        public int amZug()
        {
            Console.WriteLine("Spieler {0}: Spalte?", Name);
            int spal = Int32.Parse(Console.ReadLine());
            return spal;
        }
    }

    static void Main()
    {
        Spieler AA = new Spieler("A", "X");
        Spieler BB = new Spieler("B", "O");
        Feld A = new Feld();
		
		int spalte;
        bool Ende = false;
        
        while (!Ende)
        {
            spalte = AA.amZug()*2-1;

            for (int j = 9; j >= 0; j--)
            {
                if (A.Spielfeld[j, spalte] == "|")
                {
                    Console.WriteLine("ungültig");
                    break;
                }

                else if (A.Spielfeld[j, spalte] == " ")
                {
                    A.Spielfeld[j, spalte] = AA.Sign;
                    break;
                }

                else if (A.Spielfeld[j, spalte] == "X" || A.Spielfeld[j, spalte] == "O")
                {
                    continue;
                }
			}

            A.ausgabe();
            Ende = A.auswerten(A.Spielfeld);
			
			if(!Ende)
			{
				spalte = BB.amZug()*2-1;

				for (int j = 9; j >= 0; j--)
				{
					if (A.Spielfeld[j, spalte] == "|")
					{
						Console.WriteLine("ungültig");
						break;
					}

					if (A.Spielfeld[j, spalte] == " ")
					{
						A.Spielfeld[j, spalte] = BB.Sign;
						break;
					}

					else if (A.Spielfeld[j, spalte] == "X" || A.Spielfeld[j, spalte] == "O")
					{
						continue;
					}

				}
			
				A.ausgabe();
				Ende = A.auswerten(A.Spielfeld);
			}
			else break;
        }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

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