Я пытаюсь сделать игру-палач в консольном приложении, но получаю сообщение: индекс вне допустимого диапазона . На изображении ниже показано, что я могу ввести букву. Если я ввожу неправильную букву, я могу ввести новую букву. После ввода новой буквы система сообщений выходит за пределы допустимого диапазона. Я думаю, что ошибку можно найти в методе publi c bool raadletter
(char letter). Эта программа содержит 2 класса, первый класс - это galgjespel
класс (Hangmangame), а второй класс - program
класс.
// Я получил это значение stacktrace ~ сообщение об ошибке на galgje2.GalgjeSpel.Raadletter (символьная буква) в C: \ Users \ surface pro \ source \ repos \ week3opdracht1 \ galgje2 \ Galgjespel.cs: строка 37 на galgje2.Program. Speelgalgje (GalgjeSpel galgje) в C: \ Users \ surface pro \ source \ repos \ week3opdracht1 \ galgje2 \ Program.cs: строка 128 в galgje2.Program.Start () в C: \ Users \ surface pro \ source \ repos \ week3opdracht1 \ galgje2 \ Program.cs: строка 28 в galgje2.Program.Main (String [] args) в C: \ Users \ surface pro \ source \ repos \ week3opdracht1 \ galgje2 \ Program.cs: строка 14 ~
//
class GalgjeSpel
{
public string secretWord;
public string guessedWord;
public void Init(string secretword)
{
this.secretWord = secretword;
this.guessedWord="";
char[] letter = new char [secretword.Length];
for (int i =0; i< letter.Length; i++)
{
this.guessedWord += ".";
}
}
public bool Raadletter(char letter)
{
char[] guesses = guessedWord.ToArray();
guessedWord = "";
if (secretWord.Contains(letter))
{
for(int i=0; i<secretWord.Length; i++)
{
// somewhere on this place i get the index out of range message
if (secretWord[i]==letter)
{
guesses[i] = letter;
}
}
foreach(var element in guesses)
{
guessedWord += element;
if (element!='.')
{
Console.Write($"{element} ");
}
else
{
Console.Write($". ");
}
}
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("------------------------------");
Console.ResetColor();
Console.WriteLine();
// return true;
}
else
{
Console.WriteLine("letter does not match secretword");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("------------------------------");
Console.ResetColor();
}
return false;
}
}
////
class Program
{
static void Main(string[] args)
{
Program myProgam = new Program();
myProgam.Start();
Console.ReadKey();
}
void Start()
{
GalgjeSpel galgje = new GalgjeSpel();
galgje.Init("eetlepel");
List<string> woordenlijst = WoordenLijst();
string nieuwwoord= SelecteerWoord(woordenlijst);
galgje.Init(nieuwwoord);
ToonWoord(nieuwwoord);Speelgalgje(galgje);
//Console.WriteLine("Het geheime woord is: " + galgje.geheimWoord);
//Console.WriteLine("Het geraden woord is: " + galgje.geradenWoord);
}
List <string> WoordenLijst()
{
List<string> Woordenlijst = new List<string>();
Woordenlijst.Add("slapen");
Woordenlijst.Add("poepen");
Woordenlijst.Add("eten");
Woordenlijst.Add("vakantie");
Woordenlijst.Add("reizen");
return Woordenlijst;
}
string SelecteerWoord(List<string> woorden)
{
GalgjeSpel gaglje = new GalgjeSpel();
Random rnd = new Random();
int randomwoord = rnd.Next(1, 5);
string nieuwwoord = woorden[randomwoord];
gaglje.secretWord = nieuwwoord;
return nieuwwoord;
}
void ToonWoord(string woord)
{
GalgjeSpel galgje = new GalgjeSpel();
Console.Write($"The secret word is : ");
char[] letter = woord.ToArray();
for (int i = 0; i< woord.Length; i++)
{
galgje.secretWord += letter[i];
Console.Write($"{letter[i]} ");
}
Console.WriteLine();
Console.Write("the guessed word is : ");
for (int i = 0; i < woord.Length; i++)
{
galgje.guessedWord += (". ");
Console.Write(". ");
}
Console.WriteLine();
}
void ToonLetter(List<char> letters)
{
Console.Write("the letters entered are : ");
foreach (var element in letters)
{
Console.Write($" {element} ");
}
Console.WriteLine();
}
char LeesLetter(List<char> geheimeletters)
{
char letter;
do
{ Console.WriteLine();
Console.Write("enter a letter : ");
letter = char.Parse(Console.ReadLine());
return letter;
} while (geheimeletters.Contains(letter));
{
}
}
bool Speelgalgje(GalgjeSpel galgje)
{
//char lijst van ingevoerde letters
List<char> ingevoerdeLetters = new List<char>();
// char lijst van geheime letters
List<char> geheimeletters = new List<char>();
// zet elke geheime letter in een char array
char[]geheimewoord = galgje.secretWord.ToArray();
// voeg elke char letter toe aan lijst van geheime letters
for (int i=0; i<geheimewoord.Length; i++)
{
geheimeletters.Add(geheimewoord[i]);
if (galgje.guessedWord == galgje.secretWord)
{
return true;
}
else
{ char letter = LeesLetter(geheimeletters);
ingevoerdeLetters.Add(letter);
ToonLetter(ingevoerdeLetters);
galgje.Raadletter(letter);
}
}return false;
}
}