当前位置: 首页 > 知识库问答 >
问题:

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

时经纬
2023-03-14

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

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

我得到的是这条线的两个endpoint——起点x、起点y、终点x和终点y——以及代表玩家的圆圈左上角的当前点。我还有一点建议新的左上角的圆。

我需要知道玩家是否要穿越任何代表墙壁的线。目前,我循环遍历包含所有墙壁的数组。鉴于当前玩家位置和提议的玩家位置,我需要找出这是否涉及穿越墙壁。非常感谢任何提示/提示/帮助。提前谢谢你!

共有2个答案

艾修筠
2023-03-14

您可以构造一个线段(x1,x2),其中x1是播放器的当前位置,x2是播放器试图移动到的位置。通过墙的任何移动都会使该线段与墙线段相交。因此,您可以通过检查(x1,x2)是否与所有迷宫墙相交来验证移动(线性时间任务)。

检查段交集很容易,并且有一个很好的答案来解释如何实现它。

如果您可以添加任何附加信息(例如墙的最大长度),您可以以不必查询所有墙的交叉点的方式存储迷宫。例如,如果墙是水平的或垂直的,并且移动也是如此,您只需要在垂直移动的情况下检查水平墙。

希望这有帮助!

彭烨烁
2023-03-14

假设你的世界是2D的,

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

[] [] [] []

[] [] [] []

和|和---是墙

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

这是新的数组表示:原始行=4,新行=4 3=7。这也将创建墙来检查对角线移动。

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

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

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的冲突检查:移动角色时,缓存角色的位置,以及如果允许移动,角色将移动到的位置,在此基础上构建一个新的墙对象,并检查墙列表是否包含新的墙对象。

 类似资料:
  • 本文向大家介绍C++实现走迷宫小游戏,包括了C++实现走迷宫小游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++实现走迷宫小游戏的具体代码,供大家参考,具体内容如下 源码下载:C++实现走迷宫小游戏 主程序代码: 更多C++精彩小游戏请点击专题:经典游戏 进行学习 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍C++ 迷宫游戏实现代码,包括了C++ 迷宫游戏实现代码的使用技巧和注意事项,需要的朋友参考一下 C++ 迷宫游戏实现代码 题目 通过让游戏角色自动寻找迷宫出口,走出迷宫,来练习C++面向对象之封装的基础知识。迷宫图如下所示,其中X表示墙。   1、程序分析 走出去的原理:遵循右手规则或左手规则。右手扶墙走,就会走出迷宫,反之,亦然。   step1 创建迷宫类,打印出迷宫地图。  

  • 我正在尝试制作我的第一个Pacman游戏,但我遇到了一堵我自己似乎无法打破的墙:( 这是关于如何在我的游戏中检测碰撞,所以步行者不能穿过障碍物/墙壁。我已经使它不能去屏幕外与此代码: ,但如果我在屏幕中间的电路板上有一个矩形,我不知道如何编程,这样它就会在墙前停止。 我需要阻止我的pacman移动到竞技场内的墙上,如你所见(左上方的矩形) 我的Board类代码: 希望有人能告诉我该怎么做...似乎

  • 环境搭建: 安装Python并添加到环境变量,pip安装需要的相关模块即可 游戏规则: 玩家通过↑↓←→键控制主角行动,使主角从出发点(左上角)绕出迷宫,到达终点(右下角)即为游戏胜利。 逐步实现: 首先,当然是创建迷宫啦,为了方便,这里采用随机生成迷宫的方式(人工设计真的费眼睛,弄到一半不想弄了,有兴趣的可以自行尝试。)。思路其实很简单,就是把游戏界面划分成多个cell,类似这样子:

  • 本文向大家介绍Java小项目之迷宫游戏的实现方法,包括了Java小项目之迷宫游戏的实现方法的使用技巧和注意事项,需要的朋友参考一下 项目要求: 一个网格迷宫由n行n列的单元格组成,每个大院个要么是空地(用0表示),要么是障碍物(用1表示),你的任务是找一条从起点到终点的移动序列,其中只能上下左右移动到相邻单元格。任何时候都不能在有障碍物的单元格中,也不能走到迷宫之外,起点为左上角和终点右下角。 项

  • 我的数据挖掘算法库:https://github.com/linyiqun/DataMiningAlgorithm  我的算法库:https://github.com/linyiqun/lyq-algorithms-lib 前言 遗传(GA)算法是一个非常有意思的算法,因为他利用了生物进化理论的知识进行问题的求解。算法的核心就是把拥有更好环境适应度的基因遗传给下一代,这就是其中的关键的选择操作,遗