【发布时间】:2018-12-21 21:52:48
【问题描述】:
我正在尝试在控制台中对蛇进行编程。蛇随机走几步后,会生成一个新的游戏对象(例如,使蛇生长的苹果或使蛇更快的蘑菇)。
我创建了一个随机游戏对象(在随机(左,上)坐标上,然后我需要检查该游戏对象是在一个蛇形主体上还是另一个游戏对象上产生。如果是这样,我创建一个新游戏对象然后再试一次。只有当它不与另一个游戏对象或蛇碰撞时,它才会生成。
snakeElemnts = 一个列表,其中包含所有蛇的身体部位; gameObjects = 包含所有现有游戏对象的列表;
如果 noCollisionAmount ==snakeElements 和 GameObjects 的数量,则应该没有碰撞并且应该生成新的 GameObject。
不幸的是,在某一时刻(早期),蛇只是停止移动,什么都没有发生(没有例外或任何事情)。
我无法调试,因为我有一个 KeyboardWatcher 正在运行,它会检查某个键是否被按下。因此当我按下break时,我只能检查keyboardwatcher。
设置断点没有用,因为问题出现时我从不中断。
if (this.randomStepNumber == 0)
{
int noCollision = 0; // this variable counts the amount of times there was no collision
GameObject validGameObject;
while (true)
{
validGameObject = this.snakeGameObjectFactory.Generate();
foreach (SnakeElements element in snakeElements)
{
if (validGameObject.XPosition != element.XPosition || validGameObject.YPosition != element.YPosition)
{
noCollision++;
}
else
{
break;
}
}
foreach (GameObject gameObject in gameObjects)
{
if (noCollision == snakeElements.Count) // if there was no collision of the new gameobject with an element of the snake, the gameobjects will get checked
{
if (validGameObject.XPosition != gameObject.XPosition || validGameObject.YPosition != gameObject.YPosition)
{
noCollision++;
}
else
{
break;
}
}
else
{
break;
}
}
if (noCollision == snakeElements.Count + gameObjects.Count) // if there was no collision at all, the check is ended
{
break;
}
else
{
noCollision = 0;
}
}
this.gameObjects.Add(validGameObject);
this.randomStepNumber = this.random.Next(10, 30);
}
【问题讨论】:
-
你是在大学写的吗?我
-
是的,先生,您是对的
-
常春藤技术课?
-
我在奥地利的第一学期计算机科学,C#基础
-
什么是
if (randomStepNumber == 0)的else部分因为如果你添加一个游戏对象,你会生成一个新的随机步数,它在 10 到 30 之间,我假设显示的代码正在运行在其他循环中或在循环或事件中被调用的函数中。
标签: c# element gameobject