【问题标题】:Game - collection of characters and random movement collision游戏 - 角色集合和随机运动碰撞
【发布时间】:2013-12-02 15:33:27
【问题描述】:

我正在尝试模拟兔子种群。这些兔子在控制台应用程序上打印在一个网格上,比如 50x50。

我有几个问题真的很有帮助。

如果我想记录所有具有各自特征的兔子,列表是记录这些数据的最佳方式吗?

对于随机移动,我在 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

感谢您的宝贵时间

【问题讨论】:

    标签: list data-structures collections collision


    【解决方案1】:

    根据您所说的,我会使用二维来容纳您所有的兔子。例如

    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
    }
    

    注意!为了让它工作,你需要确保你把兔子从它移动的网格空间中取出,就像前面的例子一样。这样你就可以保持没有兔子的位置和它们所在的位置。

    【讨论】:

    • 感谢您的回答。我可以想到一个关于网格的问题。如果我想让每只兔子每次“转弯”移动一次,我将如何通过每只兔子一次。对 [y] 和 [x] 使用嵌套的 for 循环将再次找到相同的兔子(如果它向下/向右移动)。我认为列表和网格的组合可以工作或将移动的兔子添加到新网格中
    • 当然,我明白你在说什么。只需将兔子的引用也保留在普通数组中,这样您就可以制作兔子,然后将其存储在一维数组(例如“兔子”)中,然后存储在二维数组(“网格”)中。然后你可以遍历一维数组来访问每个兔子,然后使用网格来检查兔子在哪里。它的内存开销比单个兔子列表略高,但提供更快的计算。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2018-05-26
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多