更改循环随机字符串中特定字符的颜色

时间:2019-01-05 15:17:34

标签: c# console-application

使用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 :(得分:0)

如果要用不同的颜色写字符,则需要在写每个字符之前更改颜色。举例来说,您可以将最后一个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();