C# :: Aufgabe #306 :: Lösung #1

2 Lösungen Lösungen öffentlich
#306

Galgenraten (hangman)

Anfänger - C# von JKooP - 18.04.2020 um 12:18 Uhr
Erstelle ein Konsolenspiel in der Form „Galgenraten“.

Spieler 1 gibt verdeckt ein zu erratenes Wort ein.
Regeln: Buchstaben a-z, keine Zahlen, ä = ae, ö = oe, ü = ue, ß = ss

Spieler 2 muss versuchen die richtigen Buchstaben zu erraten.
Dazu wird am Anfang des Spiels jeder Buchstabe des Lösungsworts als „Unterstrich“ dargestellt.
Errät Spieler 2 einen Buchstaben, wird der Unterstrich an allen Positionen an der sich der gefundene Buchstabe befindet durch den jeweiligen Buchstaben ersetzt.
Es sollen am Ende des Spiels die benötigte Zeit und die Anzahl der Versuche ausgegeben werden.
Die Anzahl der Versuche soll ähnlich wie beim Galgenraten begrenzt werden.

Varianten:
Der Spieler 2 kann auch das Lösungswort eingeben. Ist das Wort falsch, wird es als 2 Fehlversuche gewertet.
Als Hilfe könnten die bereits genutzten Buchstaben angezeigt werden.
Aus der Anzahl der benötigten Versuche und der Zeit könnten Gewinnpunkte generiert werden.

Viel Spaß
#1
vote_ok
von DavidDev024 (250 Punkte) - 18.04.2020 um 18:28 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace Galgenraten
{
    class Program
    {
        
        static void Main(string[] args)
        {
            bool revealed = false;
            int wrongGuesses = 0;
            List<char> guesses = new List<char>();
            Stopwatch timer = new Stopwatch();

            //Input of the secret Word
            Console.WriteLine("Wilkommen zum Galgenraten. Spieler 1 muss sich ein geheimes Wort ausdenken, " +
                              "\nwelches dann von Spieler 2 eraten werden muss. " +
                              "\n Drehen sie nun den Bildschirm so, dass Spieler 2 nicht die Eingabe von Spieler 1 sehen kann.");

            string secretWord = ChooseWord();
            WriteWord(secretWord, guesses, ref revealed);

            //Game Loop
            timer.Start();
            while (!revealed && wrongGuesses <= 15)
            {
                if (!Guess(secretWord, guesses) == false)
                    wrongGuesses++;

                WriteWord(secretWord, guesses, ref revealed);
            }
            timer.Stop();

            //outcome of the game
            Console.Clear();
            if (revealed)
            {
                Console.WriteLine("Geschafft!");
                Console.WriteLine("Versuche: " + guesses.Count);
                Console.WriteLine("Zeit: " + timer.Elapsed);
            }
            else
            {
                Console.WriteLine("Nicht Geschafft.");
                
                Console.WriteLine("Versuche: " + guesses.Count);
                Console.WriteLine("Minuten: " + timer.Elapsed);
            }

            Console.ReadKey();
        }

        private static string ChooseWord()
        {
            string word = "";
            do
            {
                Console.Write("Spieler 1, geben Sie ihr Wort ein (a-z, keine Zahlen): ");
                word = Console.ReadLine();
            } while (word.All(char.IsDigit));
 
            return word.ToLower().Replace("ä", "ae").Replace("ö", "oe").Replace("ü", "ue").Replace("ß", "ss");
        }

        private static bool Guess(string secretWord, List<char> guesses)
        {
            Console.SetCursorPosition(0, 3);
            Console.Write("Spieler 2, rate einen Buchstaben: ");

            char guess = Console.ReadLine().ToLower().ToCharArray()[0];
            guesses.Add(guess);

            if (secretWord.Contains(guess))
            {
                return true;
            }
        
            return false;
        }

        private static void WriteWord(string secretWord, List<char> guesses, ref bool revealed)
        {
            Console.Clear();
            revealed = true;
            foreach (char c in secretWord)
            {
                if (guesses.Contains(c))//Reveale
                    Console.Write(c);
                else
                {
                    Console.Write('_');
                    revealed = false;
                }

                Console.Write(' ');
            }
        }
    }
}

Kommentare:

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

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