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

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.
#2
vote_ok
von Alucard1766 (930 Punkte) - 11.02.2015 um 13:31 Uhr
straightforward hingeklatscht :D, sollte aber gegen Falscheingaben geschützt sein. AI Integration würde sich schwierig gestalten

Quellcode ausblenden C#-Code
        public static int[][] grid = new int[3][];
        public static Dictionary<int, string> drawingCharacters = new Dictionary<int, string>();
        public static int currentPlayer;
        public static int turn;
        public static bool[] feldBesetzt;

        static void Main(string[] args)
        {
            Initiate();
            DrawGrid();

            while (WhoIsTheWinner() == "nobody" && turn < 9)
            {
                MakeTurn();
                if (currentPlayer == 1)
                    currentPlayer = 2;
                else
                    currentPlayer = 1;
            }

            Console.WriteLine(WhoIsTheWinner() + " Wins!");
            

            Console.ReadLine();
        }

        private static string WhoIsTheWinner()
        {
            if ((grid[0][0] == 1 && grid[0][1] == 1 && grid[0][2] == 1) || (grid[1][0] == 1 && grid[1][1] == 1 && grid[1][2] == 1) || (grid[2][0] == 1 && grid[2][1] == 1 && grid[2][2] == 1) || (grid[0][0] == 1 && grid[1][0] == 1 && grid[2][0] == 1) || (grid[0][1] == 1 && grid[1][1] == 1 && grid[2][1] == 1) || (grid[0][2] == 1 && grid[1][2] == 1 && grid[2][2] == 1) || (grid[0][0] == 1 && grid[1][1] == 1 && grid[2][2] == 1) || (grid[0][2] == 1 && grid[1][1] == 1 && grid[2][0] == 1))
            {
                return "Player 1";
            }
            else if ((grid[0][0] == 2 && grid[0][1] == 2 && grid[0][2] == 2) || (grid[1][0] == 2 && grid[1][1] == 2 && grid[1][2] == 2) || (grid[2][0] == 2 && grid[2][1] == 2 && grid[2][2] == 2) || (grid[0][0] == 2 && grid[1][0] == 2 && grid[2][0] == 2) || (grid[0][1] == 2 && grid[1][1] == 2 && grid[2][1] == 2) || (grid[0][2] == 2 && grid[1][2] == 2 && grid[2][2] == 2) || (grid[0][0] == 2 && grid[1][1] == 2 && grid[2][2] == 2) || (grid[0][2] == 2 && grid[1][1] == 2 && grid[2][0] == 2))
            {
                return "Player 2";
            }
            return "nobody";
        }

        private static void MakeTurn()
        {
            bool inputOk = false;
            string input;
            int chosenField = 0;
            while (!inputOk)
            {
                Console.Write("Player " + currentPlayer + ": ");
                input = Console.ReadLine();
                if ((input == "1" || input == "2" || input == "3" || input == "4" || input == "5" || input == "6" || input == "7" || input == "8" || input == "9"))
                {
                    chosenField = Int32.Parse(input);
                    if (!feldBesetzt[chosenField-1])
                        inputOk = true;
                    else
                        Console.WriteLine("Falsche Eingabe\n");
                    
                }
                else
                {
                    Console.WriteLine("Falsche Eingabe\n");
                }
            }

            AddTurnToGrid(chosenField);
            DrawGrid();
            turn++;

        }

        private static void AddTurnToGrid(int chosenField)
        {
            feldBesetzt[chosenField - 1] = true;
            switch (chosenField)
            {
                case 1:
                    grid[0][0] = currentPlayer;
                    break;
                case 2:
                    grid[0][1] = currentPlayer;
                    break;
                case 3:
                    grid[0][2] = currentPlayer;
                    break;
                case 4:
                    grid[1][0] = currentPlayer;
                    break;
                case 5:
                    grid[1][1] = currentPlayer;
                    break;
                case 6:
                    grid[1][2] = currentPlayer;
                    break;
                case 7:
                    grid[2][0] = currentPlayer;
                    break;
                case 8:
                    grid[2][1] = currentPlayer;
                    break;
                case 9:
                    grid[2][2] = currentPlayer;
                    break;

                default:
                    break;
            }
        }

        private static void Initiate()
        {
            grid[0] = new int[] { 0, 0, 0 };
            grid[1] = new int[] { 0, 0, 0 };
            grid[2] = new int[] { 0, 0, 0 };

            drawingCharacters.Add(1, "X");
            drawingCharacters.Add(2, "O");

            currentPlayer = 1;

            turn = 0;

            feldBesetzt = new bool[9]{false, false, false, false, false, false, false, false, false};
        }

        private static void DrawGrid()
        {
            Console.Clear();
            Console.WriteLine("\n   " + GetString(0, 0) + " | " + GetString(0, 1) + " | " + GetString(0, 2) + " ");
            Console.WriteLine("  ---|---|---");
            Console.WriteLine("   " + GetString(1, 0) + " | " + GetString(1, 1) + " | " + GetString(1, 2) + " ");
            Console.WriteLine("  ---|---|---");
            Console.WriteLine("   " + GetString(2, 0) + " | " + GetString(2, 1) + " | " + GetString(2, 2) + " \n\n");
        }

        private static string GetString(int row, int column)
        {
            if (grid[row][column] == 0)
            {
                return (row * 3 + column + 1).ToString();
            }
            else
            {
                return drawingCharacters[grid[row][column]];
            }
        }

Kommentare:

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

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

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.