使用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();
}
}
}
答案 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();