其实是有的,可以参考 Ty Taylor 的 The Art and Science of Procedural Puzzle Generation,https://www.youtube.com/watch?v=RLcMvCS4-gY

《推箱子》游戏中有墙壁、地板、目标点三类不会发生变动的游戏地图数据,以及箱子、推箱子的小人两种可变的对象。

《推箱子》的游戏规则是:玩家控制小人在地图上 上下左右 移动,当小人的移动方向上有箱子时,可以推动箱子向相应的方向移动。但是遇到墙壁,小人不能移动;如果推箱子时箱子前面有墙壁或另一个箱子,则小人不能推动箱子前进。

《推箱子》的胜利条件是所有的箱子都位于目标点之上。失败的条件是没有箱子能够被推动且有箱子没有位于目标点之上。

一个有意义的益智游戏关卡,通常要满足以下要素:关卡要可解:至少有一种推箱子的步骤,能够达到胜利状态。

关卡的解状态空间要大:如果一个关卡只有有限的状态空间,就意味着这个关卡是一个一本道的关卡,过于简单,没有挑战难度。比如下面这个关卡:

▩▩▩▩▩▩▩▩▩▩▩▩

▩@#--------------* ▩

▩▩▩▩▩▩▩▩▩▩▩▩

3. 关卡的求解最短路径要足够长:如果一个关卡的最优解路径过短,说明关卡的解谜程度较弱,玩家看一眼就能看出解法。比如下面这个关卡:

▩▩▩▩▩▩▩▩▩▩▩▩

▩-------------------▩

▩---*---------------▩

▩@#---------------▩

▩-------------------▩

▩-------------------▩

▩▩▩▩▩▩▩▩▩▩▩▩

为此,一个自动关卡生成器,通常由三部分组成:

1. 关卡生成器:采用随机或者过程化的方式增量式地生成关卡。

2. 关卡求解器:输入关卡生成器生成的一个关卡,判断其是否有解。

3. 关卡过滤器:输入一个生成好且有解的关卡,判断其解状态空间与最小求解步数是否满足需求。

三个部分的相互作用如下图所示:关卡生成器的三个部分及它们的关系

下面我们详细阐述一下关卡生成器、求解器与过滤器的具体实现。

关卡生成器

关卡生成器采用增量式随机生成关卡的策略:

关卡求解器

我们采用广度优先搜索的算法来求解推箱子谜题。理由是:

1. 广度优先可以计算出游戏从初始状态到解谜成功状态的最少步骤。

2. 广度优先可以回溯取得解谜过程的状态序列,这些状态序列就是谜题的最短解题步骤。

3. 广度优先搜索的过程中会获得一棵解法树,这棵树的深度与广度可以衡量所生成关卡的解状态空间复杂度。

由于游戏中可变的单位只有箱子和小人的位置,所以状态节点只需要记录箱子与小人的位置即可。需要注意的是,在用广度优先搜索的过程中,会发生状态空间爆炸的情况,必须对每一个状态节点进行剪枝,否则求解一次非常慢。可以考虑从以下几点进行剪枝:去重:将每个状态节点散列到一个Hash临接表上,每次生成新的状态都判断之前是否有同样的游戏状态,如果有,则不添加该状态。

判断死锁:比如以下情况中有箱子没有办法被推动,如果此时箱子没有位于目标点上,则说明该状态之后不可能达到胜利状态,不添加该状态。

死锁情况一:

##

##

死锁情况二:

--▩

▩ #

关卡过滤器

利用广度优先搜索已经能够计算出生成的每个关卡的解状态空间与最短解谜步数。因此过滤器只需要把迭代过程中生成的各有解的关卡的解状态空间与最短解谜步数进行比较与权衡,选出其中状态空间与最短解谜步数均比较多的关卡,作为最终输出的关卡。

结果展示

以下是采用我们的关卡自动生成器生成的一些推箱子关卡。其中迭代次数为广度优先搜索实现的求解器找到该关卡最优解时经过的迭代次数。最小步数为解谜成功所需要的最少推动箱子的步数 + 1(初始状态也被记为1步)。

源代码

java推箱子随机地图的产生_为什么没有人研究推箱子地图自动生成算法?算法随机生成地图,不需要地图库!?...相关推荐

  1. 极光推送 请检查参数合法性_极光小课堂 | 极光推送在人脸识别终端管理系统中的应用...

    项目背景 最近开发的一款人脸识别终端管理系统,主要包括运营平台.企业后台管理系统.APP 端.智能人脸识别终端模块. 下图是系统的架构图: 其中各个模块之间都需要即时通讯,比如: APP 端用户注册完 ...

  2. python地图 两点距离_没学过还真不会!怎样才能画出准确的地图?

    ▼ -文字稿- 怎样画一张地图? 用纸笔勾勒出道路大概的方向.周围建筑物的轮廓,写上路名.这样就得到了一张简单的地图,但是你照着它可能连自己家都找不到. 因为你的地图不能准确地描述道路的长度.方位等信 ...

  3. 高德地图小蓝点_一会晴天一会下雨?夏日想要顺利出行 高德地图这些小功能最实用...

    不同于其他三个季节,夏天总是有很多种烦恼,变化不定的天气就是其中最为影响出行的一项因素.而面对忽晴忽雨的天气,如何才能在夏日顺利出行呢?看看高德地图的这些实用小功能吧. ·实时天气预报 高德地图可以实 ...

  4. java选择题多选题系统小程序_单选题与多选题判断得分(自动考试小程序,入门级)...

    [单选题与多选题判断得分] [核心代码] using System; using System.Collections.Generic; using System.ComponentModel; us ...

  5. java实现掼蛋分组小游戏_基于Ajax技术的掼蛋比赛自动裁判系统设计与实现

    掼蛋比赛时下流行,能丰富人们的生活,受众面广.工会每次组织此项活动参与率都很高,但几百人的比赛,给计分.裁判工作带来困难.传统的手工登分,计算,排名,常常容易出错.掼蛋比赛自动裁判系统能改变这一现状, ...

  6. 扡扫机器人_解放懒人的神器:会自动洗拖布的拖扫机器人

    来源:新浪众测 作者:铁头321 1.前言 家里房子装修完之后就入手了小米一代扫地机器人,也是口碑爆炸的扫地机器人之一.这两年勤勤恳恳任劳任怨,总算是解放了我家的扫地工作.但是随之而来的问题是地板和瓷 ...

  7. python自动抽奖_「懒人必备」用Python自动抽奖

    不知道你们有没有玩过无码科技的小程序抽奖助手,没有玩过的可以在微信小程序入门搜索抽奖助手,首页有很多奖品进行抽奖的,我前几天发现了之后就把那里的所有奖品都点了一次,就突发萌想,能不能用python来实 ...

  8. linux推箱子脚本,【编程例题】标准C语言实现推箱子游戏!附解析!

    今天我来分享一道对于初学C语言的同学非常有启发作用的编程例题,是用C语言实现单张地图推箱子的小游戏. 这个游戏是基于Linux环境下编程的,所用工具为ubuntu.和gcc编译器. 首先推箱子的地图, ...

  9. MIT自动驾驶导航系统,不看地图也能穿梭乡间野路

    方向栗 发自 凹非寺 量子位 出品 | 公众号 QbitAI 此前,Uber发生的致命车祸,似乎在大声地强调,自动驾驶技术还没有做好大规模落地的准备.毕竟,世界上并没有很多地方,可以让自动驾驶汽车放飞 ...

最新文章

  1. c# redis 如何设置过期时间_Redis Hash存储token、及设置过期时间
  2. [BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)
  3. iqooneo5支持鸿蒙系统吗,iqooneo5活力版有双卡双待吗_iqooneo5活力版支持5g吗
  4. 【ElementUI】 table表格尾部的合计行,固定表头却不显示合计行
  5. oledb 获取所有表的名字和列名
  6. 【Azure学习.01】先从账号注册开始
  7. 通过腾讯地图服务获取行政区划信息
  8. Android搜索手机文件
  9. linux mysql2013_linux下MySQL安装
  10. 颜色叠加 java_可绘制Android上的颜色叠加
  11. Flutter拓展 android studio如何连接夜神模拟器(亲测!!!)
  12. crunch 生成密码用例
  13. ajax中GET和POST区别
  14. android画板的实验报告,几何画板实验报告
  15. mbr引导的启动盘制作方法
  16. 【开发工具】MySQL免安装版
  17. java 闰年闰月_什么是闰年,闰年和闰月的区别
  18. linux打印机无法识别usb设备,佳能LBP2900打印机驱动安装使用 USB无法识别的解决方法步骤...
  19. GWT项目创建时遇到的问题
  20. 世界第 3 的滴滴裁员,求职必知独角兽公司排行榜

热门文章

  1. 佳易王试用版会员大众版管理系统#养生馆会员软件使用学习分享
  2. 2022湖南永州市新田县招聘社区专职工作者笔试精选试题及答案
  3. 2021计算机技术考研非全日制,2021考研:考研是选全日制还是非全日制?
  4. Qt获取时间、日期宏定义
  5. 三分钟了解APS系统中生产计划排程模块的基本原理!
  6. 浏览器防关联软件(超兔(TO12345)防关联浏览器)
  7. 欢迎大家my blog in the CSDN RDF instruction for JAVA
  8. EnMp3Player 学习英语口语的好软件(MP3复读机)
  9. 西门子dcs系统组态手册下载_“DCS系统组态”是什么意思?其步骤方法又有哪些?...
  10. 分享几个FTP帐号-来自www.lgm.hk