It seems to me that you are doing things the hard way.
for (int i = 0; i < WordLength; i++)
{
for (int p = 0; p < WordLength; p++)
{
if (GuessChar[i] == ActualChar[p])
{
LetterGuessed++;
}
}
}
Can be replaced by
foreach (char c in GuessChar)
{
LetterGuessed = ActualChar.Contains(c) ? LetterGuessed+=1: LetterGuessed;
}
And this
var duplicateDict = new Dictionary<char, int>();
foreach (var ch in GuessChar)
{
if (duplicateDict.ContainsKey(ch))
{
duplicateDict[ch]++;
}
else
{
duplicateDict.Add(ch, 1);
}
}
foreach (var ch in duplicateDict.Where(x => x.Value > 1))
{
repeated++;
}
Can be refracted to
var letters = GuessChar.GroupBy(c => c, (k, x) => (Letter:k, DuplicateCount:x.Count()-1));
foreach(var letter in letters)
{
repeated += letter.DuplicateCount;
}
Not sure why you are setting repeated
to 0 if it is 1 but you can remove the if
statement by doing this
repeated= repeated==1?0:repeated;
This loop should have an early exit option
for (int i = 0; i < WordLength; i++)
{
if (ActualChar[i] == GuessChar[i]) Victory = true;
}
for (int i = 0; i < WordLength; i++)
{
if (ActualChar[i] == GuessChar[i])
{
Victory = true;
break;
}
Finally, the last else if
statement
else if (GuessChar.Length > WordLength)
{
Console.WriteLine("Wrong Length, Actual Lenght is : Shorter");
}
else if (GuessChar.Length > WordLength)
{
Console.WriteLine("Wrong Length, Actual Lenght is : Longer");
}
Can be replaced by
else
{
string substring = GuessChar.Length > WordLength ? "Shorter" : "Longer";
Console.WriteLine($"Wrong Length, Actual Length is : {substring}");
}