深圳大学计算机游戏开发实验4-游戏中的人工智能

一、实验目的与要求

1. 理解A*寻路算法原理。

2. 进一步熟悉地图编辑器的使用。

3. 实现游戏中的人工智能。

二、实验内容与方法

1.完成游戏编译(5)

成功编译并运行教材P200“游戏AI实例-迷宫寻宝”。

2.完成修改内容一 5分)

修改游戏代码,实现修改内容一,即修改窗口大小。

3.完成修改内容二 10分)

修改游戏代码,实现修改内容二,即增加DANGEROUS区域。

4.完成修改内容三 10分)

修改游戏代码,实现修改内容三,即增加按键监听。

5.完成修改内容四 10分)

修改游戏代码,实现修改内容四,即增加地图层次。

6.完成Bug修改(5分)

通过更改游戏代码的方式修复BUG,如:点击笑脸出现“No Way” 和“Found Treasure”的叠加。

7.添加配乐、音效(5分)

为游戏添加配乐、音效。

8.增加粒子特效(5分)

为游戏添加粒子特效。

9. 游戏优化升级(5分)

自行发挥想象力,优化游戏功能。

10.完成实验报告 40分)

截图记录关键步骤,分析实验结果,撰写心得体会。

三、实验步骤与过程

1.完成游戏编译

把第11章的code和resource放到游戏目录下进行编译运行。

图1-编译运行

2.完成修改内容一

在AppDelegate.cpp内修改窗口大小为(1024, 768)

图2-更改窗口大小对应代码

同时把标题修改为姓名+学号,关闭左下角FPS显示。

图3-完成修改内容一

3.完成修改内容二

任务:随机增加DANGEROUS(危险)区域,当移动的终点在危险区域或移动路径经过危险区域时,提示DANGEROUS。

3.1 随机增加危险区域

在不是墙的位置(可通行位置)上,随机生成危险区,并更换显示的图片。

图4-添加危险区域

3.2 识别危险区域

在A*算法内,增加对is_Dangerous的识别。如果路径中出现了危险区,则结束搜索并显示失败的动画。(Dangerous! You're Dead!)

首先在生成路径节点的时候加入对危险区域属性的判定。

图5-存储节点危险区域信息

然后如果搜索路径中的当前节点是危险区域,则结束搜索。

图6-发现危险区结束搜索

然后就在屏幕中央展示死亡的提示。

图7-遇到危险死亡提示

图8-死亡提示

4.完成修改内容三

当游戏提示No Way或DANGEROUS后,按下R键,使游戏重新开始。

首先设置一个全局变量is_over表示游戏是否结束(出现No Way或Dangerous),然后设置一个键盘监听器,当按下R键是检查is_over是否为true,若是则使用replaceScene函数重新加载本局游戏。

图9-添加按键监测

5.完成修改内容四

将迷宫地图设置为两层,每层均有楼梯,并且两层地图可以互通。

在第一层设置上行楼梯,在第二层设置下行楼梯。楼梯数量为2个。

对于多层而言,每一层除去首尾层后应该是1个上行楼梯1个下行楼梯,但由于只有2层,也就无所谓了。

首先创建第二层迷宫的地图。

图10-第2层地图

把第二层的墙的gid加入NOT_ACCESS的检测。定义一下#define WALL 222,然后在initMap函数里的判断是否通过里加上m_mapLayer->getTileGIDAt(Vec2(i, j)) == WALL。

接下来就是实现楼层的切换。使用一个全局变量FLOOR记录楼层,每次上下楼(通过楼梯)时改变s的值,然后

图11-第二层地图相关代码

6.完成Bug修改

Bug:点击笑脸时候出现No Way和Found Treasure的叠加。

解决方案:对笑脸位置特判,禁止以笑脸为终点。

图12-特判笑脸位置

现在如果点击笑脸就会出现禁止图标。此处使用m_origin而不是m_destination,因为m_destination要在下面的代码块才赋值,现在只是一个初始值nullptr。就算加入空指针检测,在初始的左上角位置点击笑脸仍然会出现No Way和Found Treasure的叠加,因为此时m_destination是空指针。

图13-修复笑脸bug结果

7.添加配乐、音效

配乐:第一关,第二关bgm,共2首。素材来源于魔塔。其中,上下楼会切换音乐,同一层楼因为No Way和Dead后按R重开则音乐照常播放,保持连续。

音效:移动,上下楼梯,共2个。

图14-背景音乐设置

图15-音效设置

8.增加粒子特效

通过文件创造粒子特效,设置其位置居中,添加到当前场景内。

图16-粒子特效设置

9. 游戏优化升级

9.1 整体美观设计

在地图下方标注当前楼层。更换笑脸素材为流汗黄豆。

图17-显示当前楼层

图18-流汗黄豆素材

四、实验结论或心得体会

心得体会:本次实验整体并不复杂,主体的寻路算法已经实现无需自己做什么,主要就是修修补补一些bug。如果要做的复杂一些,就可以仿照魔塔,设置数值系统。不过在魔塔里,自动寻路不过是一个非常次要的功能,真正复杂的是数值计算。如果把那一套搬到这个实验里,加点怪物,血瓶,不仅工作量太大,感觉也和实验本身的要求不太符合。

演示过程:

  1. 点击自己:出现禁止通行标志,无标签显示。
  2. 点击一个封闭方块:出现No Way,然后按R重启
  3. 点击一个需要穿过危险区的方块:路线在危险区停止,然后出现Dangerous!You’re Dead! 然后按R重启。
  4. 点击楼梯:楼梯处不出现宝箱标志。移动到楼梯后切换楼层,此时播放上下楼音效,切换背景音乐。
  5. 在第2层继续演示一遍
  6. 下楼到第1层
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值