游戏 - 角色集合和随机运动碰撞

时间:2013-11-19 07:20:57

标签: list data-structures collections collision

我正在尝试模拟一只兔子。这些兔子在控制台应用程序上以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

感谢您的时间

1 个答案:

答案 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,如上例所示。这样你就可以保持没有兔子的地方与他们所在的地方相比。