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