C# 如何呼叫main

C# 如何呼叫main,c#,call,main,restart,C#,Call,Main,Restart,我只学了几天C#,我想知道当玩家在switch语句中说“是”时(当他被要求再次播放时),我如何调用Main重新启动程序 publicstaticvoidmain(字符串[]args) { 控制台。WriteLine(“选择枪向烤面包机射击…”); 控制台。写(“火箭/狙击手/步枪/手枪:”); string playersGunChoice=Console.ReadLine(); Random Random WeaponDMG=新随机数(); int weapondmg=0; 开关(player

我只学了几天C#,我想知道当玩家在switch语句中说“是”时(当他被要求再次播放时),我如何调用Main重新启动程序

publicstaticvoidmain(字符串[]args)
{
控制台。WriteLine(“选择枪向烤面包机射击…”);
控制台。写(“火箭/狙击手/步枪/手枪:”);
string playersGunChoice=Console.ReadLine();
Random Random WeaponDMG=新随机数();
int weapondmg=0;
开关(playersGunChoice.ToLower())
{
“火箭”案:
WriteLine(“你选择了火箭。”);
weapondmg=randomweapondmg.Next(75200);
控制台。WriteLine(“你的火箭对烤面包机做“+武器+”);
打破
“狙击手”一案:
WriteLine(“你选择了狙击手”);
weapondmg=randomweapondmg.Next(50150);
控制台。WriteLine(“你的狙击手对烤面包机做“+武器+”);
打破
}
int ToasterHealth=500;
int ToastersLeftHp=ToasterHealth-weapondmg;
Console.WriteLine(“Toaster有”+ToastersLeftHp+“healthpoints left.”);
如果(ToastersLeftHp!=0)
控制台。WriteLine(“又向烤面包机开枪了?”);
控制台。写入(“是/否:”;
字符串playreach=Console.ReadLine();
开关(再次播放.ToLower())
{
案例“是”://我想在这里调用main
打破
案例“否”:
打破
违约:
WriteLine(“这不是一个肯定或否定的答案”);
打破
}
如果(ToastersLeftHp==0)
控制台。WriteLine(“你杀了烤面包机!”);
否则如果(烤面包机FTHP<100)
Console.WriteLine(“烤面包机快死了!他还有”+ToastersLeftHp+“healthpoints”);
}
}
}

调用它的方式与调用任何其他方法的方式相同。编写名称并向其传递所需的参数:

Main(string[]{});
如果您不希望程序在完成调用
Main
后继续执行它正在执行的操作,那么您需要确保它在该点之后停止正常执行


话虽如此,让
Main
递归并不能完全解决我建议的问题。我强烈建议在主方法中应用一个循环,该循环将持续执行您的逻辑,直到您希望它停止为止,并在需要重新启动或完全完成时完成循环的每个迭代。

作为指导,您应该尝试一些在线教程,以帮助您编写正确的代码。 尽量避免调用main方法,因为它是程序的起点,而是使用不同的函数,或者更好地使用不同的类来表示游戏。此函数\类可以将其称为self或添加一个内部循环,直到游戏“完成”为止。
也可以考虑将代码分成更小的函数,它将更易于维护和可读。 你不应该。看看创建更小的方法,了解循环。如果你有新问题,完全重写你的问题是不合适的。如果你有一个新问题,问一个新问题。这部分是我的错(我想你可以看到我对他删除的答案@Servy的评论)。似乎你更改了代码,使递归在GameStart()而不是Main()中。但是方法名不是问题所在。真正的问题是你想用迭代来解决这个问题,而不是递归。@MillieSmith是的,我看到了,但我不能回答说他不应该编辑这个问题,因为帖子已经被删除了。我想补充一点,避免使用主递归的原因是,如果玩家选择“再次播放”足够多的次数,程序将因堆栈溢出异常而崩溃。@phoog我不确定玩家是否真的有可能再玩几百次。大多数情况下,这只会让调试/理解/维护程序变得很痛苦。但是,是的,这个问题确实存在。当然,这是真的。谢谢你的建议,我编辑了我的帖子,因为现在我遇到了一个新问题。谢谢你的建议,我仍在研究,但被随机部分卡住了(你可以看到我的新帖子)
Main(string[]{});