我一直在编写一个文字冒险游戏。在游戏开始时,调用Menu(字符串Choice,bool takenDump)。有几种其他方法具有用户可能遇到的不同场景,例如口袋妖怪遭遇等。如果用户死亡,则他们在Menu()处重新启动,这意味着它会从内部再次调用。有什么方法可以避免这种情况吗? Source of program
答案 0 :(得分:4)
只要有退出循环的条件,就没有问题。如果没有,你基本上有一个无限循环(直到发生StackoverflowException)。
从纯技术角度来看,只要在发生stackoverflowexception之前中断循环就没有问题。
答案 1 :(得分:3)
不,从自身调用方法是完全正确的 - 名称是“递归”/“递归函数”。
在您的特定情况下,绝对没有必要(也可能是错误的)。顶级游戏代码通常看起来像无限循环而不是递归:
while (continuePlaying)
{
ResetLevels_Lives_AndEverything();
while(notDead)
{
handleInput()
draw()
notDead = ChechStillAlive();
}
continuePlaying = CheckContinuePlaying();
}
答案 2 :(得分:1)
使用递归时应注意的一件事是堆栈溢出。这似乎不是你想要做的事情的问题,但是如果你的方法多次调用自己,并且每个调用再次多次调用它,它将会发生(除非你设置一个合理的限制你走多远的程度)。想想分形,阶乘,斐波那契序列。