Java迷宫游戏--如何不穿墙

标签 java collision maze

因此,对于一个类(class)项目,我正在制作一个可解决的迷宫游戏(用 Java 语言)。我可以毫无问题地随机生成和显示迷宫,用户/玩家的表示也是如此。然而,我遇到的问题是迷宫的各个墙壁。

我需要确保玩家无法穿过墙壁。我环顾四周,似乎很多人都有类似的问题,但他们使用网格结构来制作迷宫。我不是——我的迷宫的墙壁只是线条,所以我不能做其他人正在做的事情,(只是看看迷宫中的某个单元格是否已经被占用——我没有单元格要检查)。

我所拥有的是线的两个端点——起始x、起始y、结束x和结束y——以及代表玩家的圆圈左上角的当前点。我也有建议的新左上角的圆点。

我需要知道玩家是否会跨越任何代表墙壁的线。目前,我循环遍历包含所有墙壁的数组。考虑到当前的玩家位置和建议的玩家位置,我需要查明这是否涉及越墙。任何提示/提示/帮助将不胜感激。预先感谢您!

最佳答案

假设你的世界是 2D,

[] [] []|[]
      -----
[] [] [] []

[] [] [] []

[] [] [] []

和|和 --- 是墙

方法#1:扩大网格以包含墙壁交叉点。因此行和列的大小将为 row+(row-1),col+(col-1)

这是您的新数组表示形式: 原始行 = 4,新行 = 4+3 = 7。这还将创建墙壁以检查对角线移动。

[ ][ ][ ][ ][ ][|][ ]
[ ][ ][ ][ ][-][-][-]
[ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ]

方法#2:使用 4x4 表示,创建一个存储相邻图 block 坐标的墙类。然后创建一个列表来存储墙壁列表。

Wall(Point x,Point y); // constructor
Wall wall1 = new Wall(new Point(0,2),new Point(0,3));
Wall wall2 = new Wall(new Point(0,2),new Point(1,2));
Wall wall3 = new Wall(new Point(0,3),new Point(1,3));

此表示允许您创建规则,使 0,0 可以到 1,1,但 0,1 不能到 1,0。 如果你想要一堵单向墙,这可能听起来很愚蠢,但谁知道呢?您可以修改您的墙类构造函数:

Wall(Point from,Point to);

方法 1 的碰撞检查: 移动角色时,移动后,如果它落在墙上,则不允许移动。

方法2的碰撞检查: 移动角色时,缓存角色来自哪里,如果允许移动,角色将移动到哪里,在此基础上构造一个新的 Wall 对象,并检查 Wall 列表是否包含新的 Wall 对象。

关于Java迷宫游戏--如何不穿墙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22902406/

相关文章:

Java : my program "sometimes" wont store the smallest element per row of a 2d array

javascript - JSONLoader 光线转换器和碰撞网格 - three.js

Sprite 之间的 C++ SDL 碰撞

java - Libgdx box2d ContactListener 非常有问题

algorithm - 迷宫问题和递归回溯算法

algorithm - 解决迷宫的最佳算法?

java - 动态添加到 lambda 表达式

带有嵌入式 Jetty 和 Jersey(无 GAE)的 java.lang.IncompatibleClassChangeError

java - 在 Spring MVC 中返回 NoSuchRequestHandlingMethodException 404 错误的自定义 View

java - 用坐标寻找迷宫中的最短路径