java - 从文本文件动态生成球和迷宫之间的碰撞检测

标签 java android maze

好吧,我正在创建一个球倾斜游戏,您可以在迷宫中导航球。球工作正常,在该区域一切都很好,但我在迷宫中遇到了一些问题。

迷宫是通过包含 1 和 0 的 .txt 文件以编程方式创建的(1 是墙壁,0 是地板。)我有一个 for 循环,它遍历整个 .txt 文件并放置一个白色(墙壁)或 Canvas 上正确坐标处的黑色(地板)正方形。如果您看过的话,这类似于 apps-for-android Amazed 游戏 link.然而,他并没有在他的图 block 上放置墙壁类型检测,而是重置游戏,并在用户滚到“空”图 block 上时扣除生命点。

但是我希望有“墙”而不是“空隙”。如果球接触到墙壁,它不会超出该点,但仍然可以在另一个轴上自由移动。当然,除非它撞到角落。

我遇到的问题实际上是创建此检测。我尝试了多种方法,但到目前为止还没有成功或有用。

我尝试过: - 拥有一个包含所有墙砖坐标的 ArrayList,并且每次游戏开始时,它都会检查球是否接触到墙砖。然而,这只会让游戏速度变慢,而且非常糟糕。 - 检查球在哪 block 瓷砖上,如果是在墙砖上,将其停在一个轴上,但让它在另一个轴上自由移动,但这仍然不起作用,因为球在移动时出现了一些问题在墙砖的右侧,但也在其下方,它无法向上移动,因为代码检测到它位于球下方。

还有其他一些方法,但我真的记不起来了!有点忙。

所以,我想问,如果有人在这方面有经验,可以帮我朝正确的方向插入吗?我希望在周二之前把迷宫墙整理好,但它看起来很糟糕!

如果您需要更多信息,请询问。

预先感谢您的所有回复。

最佳答案

与其使用必须迭代的 ArrayList,为什么不像存储文本文件一样存储迷宫呢?使用二维 boolean 数组,其中墙壁为 true,地板为 false,反之亦然。

这大大简化了寻找墙的过程。您所要做的就是找出球在网格中的位置。然后你就可以检查它周围的细胞。即使包含对角线(对于全 90 度迷宫来说这可能不是必需的),这也相当于从数组中检查 8 个 boolean 值,基本上是即时的。

至于轴问题,只需停止那个方向的移动即可。无需卡住整个轴。例如,如果墙就在您的右边,则不要让 x 走得更高。没有理由不让它降低,除非左边有一堵墙。

但这只是一个一般想法。因为这是家庭作业,所以没有代码给你;)

编辑:

二维数组就是一个 boolean[][],它在您想要墙所在的每个位置都成立。当您读入文本文件时,只需立即分配它即可。

假设文本中的每一行对应一个 y 行,并且每个 0/1 是该列的 x,当您读取 1,分配map[x][y] = true

老实说,我不确定您还需要详细说明什么。不过,这是制作简单的基于图 block 的 map 的常见格式。如果您在谷歌上搜索“二维数组平铺 map ”,您会找到一些可以帮助您的资源。

关于java - 从文本文件动态生成球和迷宫之间的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15467781/

相关文章:

java - 如何创建特定日期的倒计时?

android - 当抽屉导航滑动任意量时隐藏操作栏菜单项

java - switch 语句和用户输入

将二维数字数组转换为字符

java - 如何展示迷宫?

Java Socket 为传出连接指定特定的网络接口(interface)

java - 将 JSONArray 转换为 JSONObject 时发生 ClassCastException

java - OpenStack Swift 分段上传 jclouds

Android 颜色选择器不适用于 Android 4

android - 更新 android ListView 中的行内容