Я пытаюсь создать игру с палачом на C#, но мне нужно знать о многих вещах. Мне нужно использовать StreamReader, я должен хранить записи пользователя в файле (имя пользователя, сколько раз они пытались выиграть игру и т. д.), И мне нужно создать меню, в котором пользователь может либо выбрать новая тема слов или просто сбросить текущую игру.
Так что пока что у меня есть "шифрование". Буквы слова пишутся через тире, я могу попросить пользователя выбрать имя и выбрать тему.
Но как я должен сообщить программе, когда пользователь найдет письмо?
Я хочу, чтобы это было так:
Word: ----- (яблоко), и если пользователь вводит p, появляется новая строка, но на этот раз она отображает «-pp--». Как мне это сделать?
Код в текущем состоянии:
static void wordLength()
{
StreamReader sr = new StreamReader(@"C:\Users\hardi\Desktop\Programozás\gyumolcsok.txt", Encoding.GetEncoding("iso-8859-2"));
string szo = Convert.ToString(sr.ReadLine());
{
for (int i = 0; i < szo.Length; i++)
{
Console.Write("_");
}
}
}
static void userName()
{
Console.Clear();
Console.WriteLine("What's your name? ");
string user = Console.ReadLine();
}
static void category()
{
Console.Clear();
Console.WriteLine("Choose a number to specify the topic: ");
Console.WriteLine("1: Fruit \n2: Animals");
int caseSwitch = Convert.ToInt32(Console.ReadLine());
switch (caseSwitch)
{
case 1:
Console.WriteLine("Category: Fruit");
StreamReader sr = new StreamReader(@"C:\Users\hardi\Desktop\Programozás\gyumolcsok.txt", Encoding.GetEncoding("iso-8859-2"));
break;
case 2:
Console.WriteLine("Category: Animals");
StreamReader sr1 = new StreamReader(@"C:\Users\hardi\Desktop\Programozás\allatok.txt", Encoding.GetEncoding("iso-8859-2"));
break;
default:
Console.WriteLine("The given number is not an option.");
return;
}
}
static void Main(string[] args)
{
userName();
category();
wordLength();
Console.ReadKey();
}
}
}
Есть много проблем с кодом, которые следует исправить, прежде чем продолжить. Например, вы фактически нигде не сохраняете имя пользователя. Вы создаете экземпляры потоковых ридеров, но никогда их не используете (и вы можете рассмотреть возможность использования класса File для чтения текстовых файлов вместо прямого использования StreamReader). Вы можете подумать о разработке своей программы до того, как начнете писать методы, чтобы знать, какие методы должны быть созданы, как должны выглядеть их подписи, как должно сохраняться состояние программы и т. д.





Один из способов сделать это - рассматривать слово как массив символов и сохранять предположения, сделанные пользователем, в другом массиве символов. Затем для каждого символа в слове, если он существует в массиве «guessedLetters», отобразите его, в противном случае отобразите символ «-».
Например, этот метод принимает слово и список символов, которые пользователь угадал, и отображает только правильно угаданные символы:
private static string GetMaskedWord(string word, List<char> lettersGuessed)
{
if (word == null) return word;
if (lettersGuessed == null) return new string('-', word.Length);
return string.Join("", word.Select(c => lettersGuessed.Contains(c) ? c : '-'));
}
Пример использования:
private static void Main()
{
string word = "apple";
// This stores the guessed characters, currently only a 'p'
var guessedLetters = new List<char> {'p'};
Console.WriteLine(GetMaskedWord(word, guessedLetters));
GetKeyFromUser("\nDone! Press any key to exit...");
}
Выход
Одним из способов было бы отслеживать буквы, которые пользователь угадал или нашел, и когда вы выписываете '_ в wordLength (), проверьте, находится ли текущая буква в скрытом слове в угаданном наборе, и если она тогда напишите букву вместо _.