c# палач - как показывать в каждой новой строке буквы, которые пробуются в нужном месте - PullRequest
0 голосов
/ 07 мая 2020

Изображение ниже описывает результат, который я получил до сих пор ... он пропускает старые буквы, которые пробовали. поэтому, если буква угадана правильно, все буквы, включая старые буквы, должны отображаться на точке .......
теперь отображается только данная буква без старых букв

enter image description here

//

// это код, который я получил до сих пор

class Program
    {
        static void Main(string[] args)
        {
            Program myProgam = new Program();
            myProgam.Start();
            Console.ReadKey();


        }
        void Start()
        {
            GalgjeSpel galgje = new GalgjeSpel(); 
            galgje.Init("eetlepel");

            List<string> woordenlijst = WoordenLijst();
           string nieuwwoord= SelecteerWoord(woordenlijst);
            galgje.Init(nieuwwoord);

           ToonWoord(nieuwwoord);Speelgalgje(galgje);

            //Console.WriteLine("Het geheime woord is: " + galgje.geheimWoord);
            //Console.WriteLine("Het geraden woord is: " + galgje.geradenWoord);
        }
        List <string> WoordenLijst()
        {
            List<string> Woordenlijst = new List<string>();
            Woordenlijst.Add("slapen");
            Woordenlijst.Add("poepen");
            Woordenlijst.Add("eten");
            Woordenlijst.Add("vakantie");
            Woordenlijst.Add("reizen");
            return Woordenlijst;
        }
       string SelecteerWoord(List<string> woorden)
        {
            GalgjeSpel gaglje = new GalgjeSpel();

            Random rnd = new Random();
           int randomwoord = rnd.Next(1, 5);
            string nieuwwoord = woorden[randomwoord];
          gaglje.geheimWoord = nieuwwoord;

            return nieuwwoord;
        }

        void ToonWoord(string woord)
        {
            GalgjeSpel galgje = new GalgjeSpel();

            Console.Write($"het geheime woord is: ");
            char[] letter = woord.ToArray();
            for (int i = 0; i< woord.Length; i++)
            {
                galgje.geheimWoord += letter[i];
                Console.Write($"{letter[i]} ");
            }
            Console.WriteLine(); 

            Console.Write("het geraden woord is: ");
            for (int i = 0; i < woord.Length; i++)
            {
                galgje.geradenWoord += (". ");
                Console.Write(". ");
            }
            Console.WriteLine();

        }
        void ToonLetter(List<char> letters)
        {
            int i = 0;
            Console.Write("Ingevoerde letters zijn: ");
            foreach (var element in letters)
            {

                Console.Write($"{letters[i]} ");
                i += 1;
            }
            Console.WriteLine();

        }
        char LeesLetter(List<char> geheimeletters)
        {

            char letter;
            List<char> ingevoerdeletter = new List<char>();
            string tletter ="";

            do
            {  Console.WriteLine();
                Console.Write("voer een letter in: ");
                 letter = char.Parse(Console.ReadLine());

                tletter =tletter + " "+  letter ;
                return letter;

            } while (geheimeletters.Contains(letter));
                {

                }

        }
        bool Speelgalgje(GalgjeSpel galgje)
        {
            //char lijst van ingevoerde letters
            List<char> ingevoerdeLetters = new List<char>();

            // char lijst van geheime letters
            List<char> geheimeletters = new List<char>();

            // zet elke geheime letter in een char array
            char[]geheimewoord = galgje.geheimWoord.ToArray();

            // voeg elke char letter toe aan lijst van geheime letters
            for (int i=0; i<geheimewoord.Length; i++)
            {
                geheimeletters.Add(geheimewoord[i]); 

                if (galgje.geradenWoord == galgje.geheimWoord)
                 {
                      return true;
                 }
                 else
                  {  char letter = LeesLetter(geheimeletters);
                      ingevoerdeLetters.Add(letter);
                      ToonLetter(ingevoerdeLetters);
                      galgje.Raadletter(letter);

                     }

            }return false;





        }
    }


////

namespace galgje2
{
    class GalgjeSpel
    {       

         public string geheimWoord;
        public string geradenWoord;
        public void Init(string geheimwoord)
        {
          this.geheimWoord = geheimwoord;
           this.geradenWoord="";
            char[] letter = new char [geheimwoord.Length];
            for (int i =0; i< letter.Length; i++)
            {
                this.geradenWoord += ".";

            }
        }
        public bool Raadletter(char letter)
        {

            char[] secretword = geradenWoord.ToArray();

            if (geheimWoord.Contains(letter))
            {
                for(int i=0; i<geheimWoord.Length; i++)
                {
                    if (geheimWoord[i]==letter)
                    {
                        secretword[i] = letter;
                        Console.Write($"{letter} ");  
                    }
                    else
                    {
                        Console.Write($". ");
                    }

                }
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("------------------------------");
                Console.ResetColor();
                Console.WriteLine();


            }
            else
            {
                Console.WriteLine("letter does not match secretword");
            }


           return false;
        }
    }
}

1 Ответ

2 голосов
/ 07 мая 2020

Проблема в том, что в функции Raadletter вы показываете только текущую букву в консоли.


if (geheimWoord[i]==letter)
 {
    secretword[i] = letter; // you store the letter in the char array
   //you should print the array
    Console.Write($"{letter} ");  
  }
   else
   {
     Console.Write($". ");
   }

Если вы хотите распечатать все предположения, ваш код должен выглядеть примерно так:

public bool Raadletter(char letter)
        {

            char[] secretword = geradenWoord.ToArray();

            if (geheimWoord.Contains(letter))
            {
                geradenWoord = ""; //clear the sring only if contain letter
                for (int i = 0; i < geheimWoord.Length; i++)
                {
                    if (geheimWoord[i] == letter)
                    {
                        secretword[i] = letter; //store good letter to array
                    }


                }
                foreach (var c in secretword)
                {
                    geradenWoord += c;// save the word
                    // print guesses letters
                        Console.Write($"{c} ");
                }
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("------------------------------");
                Console.ResetColor();
                Console.WriteLine();


            }
            else
            {
                Console.WriteLine("letter does not match secretword");
            }


            return false;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...