Изменение цвета определенных символов в циклической рандомизированной строке - PullRequest
0 голосов
/ 05 января 2019

Использование консольного приложения C #.

Код предназначен для случайного циклического перебора букв, чтобы попытаться найти пароль. Когда буква совпадает с буквой в пароле, она останется до тех пор, пока все буквы не совпадут.

На данный момент я использую "ALGORITHM" в качестве заполнителя.

По умолчанию буквы красные.

Однако я хочу, чтобы определенные символы меняли свой (и только свой) цвет переднего плана на зеленый, когда они совпадают. Цвета, которые еще не совпали, должны оставаться красными.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApp3
{
    class Program
    {

        // let's figure out how to make specific letters a specific colour.
        // if not letter, RED. if letter, CYAN.
        static void Main(string[] args)
        {
            Random r = new Random();
            string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            List<string> dictionary = new List<string>(new string[] {
            "ALGORITHM"
        });

            string word = dictionary[r.Next(dictionary.Count)];
            List<int> indexes = new List<int>();
            Console.ForegroundColor = ConsoleColor.Red;
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < word.Length; i++)
            {
                sb.Append(letters[r.Next(letters.Length)]);
                if (sb[i] != word[i])
                {
                    indexes.Add(i);

                }
            }
            Console.WriteLine(sb.ToString());

            while (indexes.Count > 0)
            {
                int index;

                Thread.Sleep(100);
                Console.Clear();

                for (int i = indexes.Count - 1; i >= 0; i--)
                {
                    index = indexes[i];
                    sb[index] = letters[r.Next(letters.Length)];
                    if (sb[index] == word[index])
                    {

                        indexes.RemoveAt(i);




                    }


                }
                Console.WriteLine(sb.ToString());



            }

            Console.ReadLine();
        }
    }
}

1 Ответ

0 голосов
/ 05 января 2019

Если вы хотите написать символы разных цветов, вам нужно изменить цвет перед написанием каждого символа. В вашем случае, например, вы можете заменить последний Console.WriteLine(sb.ToString()); на:

var output = sb.ToString();

for (int i = 0; i < output.Length; i++)
{
    if (indexes.Contains(i))
    {
        Console.ForegroundColor = ConsoleColor.Red;
    }
    else
    {
        Console.ForegroundColor = ConsoleColor.Green;
    }

    Console.Write(output[i]);
}

Console.WriteLine();
...