私はこれまでしばらく取り組んできましたが、ユーザーが推測が終わったときにプログラムをやり直さなければならない問題にぶつかりました。プログラムの先頭に戻る
"Speler" + currentPlayer.PlayerName + "heeft geen gisignen meer!"
私はクラスの束を持っているし、私もここに入れましょう:
class GetalSpel
{
public List<Speler> Spelers { get; set; }
public int numberToGuess { get; set; }
public int MaxAantalGissingen { get; set; }
public int MaxGetal { get; set; }
public bool Gestopt { get; set; }
public GetalSpel()
{
Spelers = new List<Speler>();
//name of variable/property = new Classname();
}
public GetalSpel(int maxAantalGissingen, int maxGetal)
{
Spelers = new List<Speler>();
this.MaxAantalGissingen = maxAantalGissingen;
this.MaxGetal = maxGetal;
Random random = new Random();
numberToGuess = random.Next(1, MaxGetal + 1);
}
public void EnterNewPlayer(string name)
{
if (Spelers.Any(item => item.PlayerName == name))
{
Console.WriteLine("Speler " + name + " is reeds in gebruik!");
}
else
{
Speler player = new Speler();
player.PlayerName = name;
Spelers.Add(player);
Console.WriteLine("Speler " + player + " is ingescreven.");
Console.WriteLine("Druk enter om verder te gaan");
Console.ReadLine();
}
}
public bool GuessNumber(string name, int number)
{
bool guessNumber = false;
Speler currentPlayer = Spelers.Find(item => item.PlayerName == name);
if (number == numberToGuess)
{
guessNumber = true;
Console.WriteLine("Proficiat " + currentPlayer.PlayerName + " het getal was" + numberToGuess + "!");
Gestopt = true;
}
else if (currentPlayer.Gissingen == MaxAantalGissingen)
{
Console.WriteLine("Speler " + currentPlayer.PlayerName + "heeft geen gisignen meer!");
}
else
{
currentPlayer.Gissingen = currentPlayer.Gissingen + 1;
}
return guessNumber;
}
}
class Speler
{
public string PlayerName { get; set; }
public int Gissingen { get; set; }
public Speler()
{
PlayerName = "";
Gissingen = 0;
}
public Speler(string Name)
{
PlayerName = Name;
Gissingen = 0;
}
}
class Program
{
static void Main(string[] args)
{
int maxGetal = 0, maxAantalGissingen = 0;
string input;
Console.WriteLine("Raad het getal spel!");
do
{
Console.Write("Geef het maximum getal in waarnaar kan geraden worden: ");
try
{
maxGetal = int.Parse(Console.ReadLine());
if (maxGetal <= 0)
{
Console.WriteLine("Getal moet positief zijn!");
}
}
catch (FormatException)
{
Console.WriteLine("Moet een getal zijn!");
}
} while (maxGetal <= 0);
do
{
Console.WriteLine("Geef het maximum aantal pogingen in: ");
try
{
maxAantalGissingen = int.Parse(Console.ReadLine());
if (maxAantalGissingen <= 0)
{
Console.WriteLine("Getal moet positief zijn!");
}
}
catch (FormatException)
{
Console.WriteLine("Moet een getal zijn!");
}
} while (maxAantalGissingen <= 0);
GetalSpel game = new GetalSpel(maxAantalGissingen, maxGetal);
Console.Clear();
do
{
Console.WriteLine("1. Schrijf Speler in");
Console.WriteLine("2. Start Spel");
Console.WriteLine("3. Stop");
Console.Write("> ");
input = Console.ReadLine();
switch (input)
{
case "1":
{
try
{
Speler speler = new Speler();
Console.WriteLine("Geeft de naam van de nieuwe speler ");
speler.PlayerName = Console.ReadLine();
game.Spelers.Add(speler);
}
catch (FormatException)
{
Console.WriteLine("Het naam mocht geen nummers bevatten.");
throw;
}
}
break;
case "2":
do
{
Console.WriteLine("Nieuwe gissing");
Console.WriteLine("Geef de naam van de speler: ");
string chosenPlayer = Console.ReadLine();
Console.WriteLine("Geef het getal: ");
int chosenNumber = int.Parse(Console.ReadLine());
try
{
game.GuessNumber(chosenPlayer, chosenNumber);
}
catch (NullReferenceException)
{
Console.WriteLine("Speler " + chosenPlayer + " is niet ingeschreven!");
}
} while (game.Gestopt == false);
Console.WriteLine("Druk op enter om verder te gaan");
Console.ReadLine();
break;
default:
break;
case "3":
{
Environment.Exit(0);
}
break;
}
} while (input != "3");
}
}
簡単な解決策は、別の方法(例えばStartNewGame())にメインメソッドのコードを移動することです。アプリケーションに達するとメソッドの最後の行(while(input!= "3"))は、StartNewGame()を再度呼び出します。 – Odrai
ありがとうございました!それはそれを解決するはずだ、私はそれを考えなかった。私は答えとしてそれを記入することをお勧めします。正しいとマークすることができます:) –
私は助けてくれてうれしいです。 – Odrai