我正在尝试模拟一只兔子。这些兔子在控制台应用程序上以50x50的网格打印。
我有几个问题可以提供帮助。
如果我想记录所有具有各自特征的bunnehs,列表是记录这些数据的最佳方式吗?
对于随机移动,我在x轴和y轴上生成随机移动(-1,0,+ 1)。 如果我想避免与其他现有的兔子碰撞,那么计算新的x,y并将它们与列表进行比较是唯一的方法。
喜欢:
foreach(Bunny bunny2 in lst)
if (bunny2.x == newbunny.x && bunny2.y == newbunny.y)
then move newbunny again
感谢您的时间
答案 0 :(得分:1)
根据你所说的,我会使用2维来容纳你所有的兔子。 e.g。
Bunny[49][49] grid; //make a 2D array of bunny objects
通过这种方式,您可以使您的数据结构完美地代表您的系统。然后你可以使用网格的索引(x,y)来映射到2D数组。例如,这会让你在x = 3,y = 17时获得兔子:
Bunny myBunny = grid[2][16]
这也可以简化碰撞检测,因为你可以检查你想要移动到的相关网格空间中是否有兔子,所以如果上一个例子中的兔子想要去x-1个空格,那么你可以检查该网格坐标是否具有空值:
if(grid[1][16] == null) { //then bunny can go there
//code to move bunny
grid[2][16] = null //remove bunny from old grid space
} else { //buny can't go there
//code
}
NB!为了使其正常工作,您需要确保从正在移动的网格空间中取出兔子OUT,如上例所示。这样你就可以保持没有兔子的地方与他们所在的地方相比。