背景

本次作业的程序与代码来源是我在上学期选修的游戏程序设计这门课中上交的大作业,相关工作由我一人完成。

参考资料如下:
1.第三章 地牢吞噬者 《Unity游戏设计与实现》——加藤政树

中国工信出版集团 人民邮电出版社

2.技术支持:《Unity5.x 从入门到精通》——Unity Technologies

中国铁道出版社

3.Unity初级案例 - 吃豆人(Unity2017.2.0)Day 2
https://blog.csdn.net/kouzhuanjing1849/article/details/84979918

要求完成情况

1.向量:游戏中怪物追踪玩家时路径的判断与选择均采用向量间的运算。
2.物理函数库:unity2d实现基础的物体、人物间的物理属性。
3.自治智能体:路径跟随。在怪物与玩家的距离到达一定数值时,怪物会判断玩家移动方向与障碍物,选择最短路径。

内容

摘要:在这款游戏中,主角(玩家操控的角色)一个人在一层又一层的迷宫(代码随机生成)中逐层深入,击败众多敌人,打开宝箱并获得道具强化自己。这款游戏的核心概念来自于伟大的桌游《龙与地下城》系列。在实现上,我参考了近几年出现较多的迷宫冒险游戏,如《不思议迷宫》、《元气骑士》等。游戏中,玩家可控制主角在代码随机生成的迷宫中,通过克服险恶环境(战争迷雾)和打败敌人、获取敌人掉落的道具来提升自己的力量,还可通过打开宝箱的方式不断获取提升,层层深入。

详情可见演示视频

操作介绍
使用键盘与鼠标控制。
移动:方向键或小键盘的8246四个键控制角色上下左右移动
游戏菜单(暂停):esc键,可以暂停游戏,选择是否退出。
物品栏:I键(inventory)可以打开角色物品栏,查看玩家的所有物。
装备栏:C键(character)可以打开角色装备栏,并为角色装备宝物,提升属性。
拾取物品:G键(get)可以拾取敌人掉落的道具,存放在物品栏中。
打开宝箱:L键(lockpick)可以打开宝箱,获取道具,存放在物品栏中。
近战攻击:与敌人发生碰撞(移动方向相反)即可
远程攻击:打开物品栏,鼠标点击获取的几个赋予玩家远程攻击的道具中的任意一个,在点击你想攻击的敌人。

主角与角色界面
玩家控制的人,手持火炬(照亮周围的战争迷雾),在迷宫中冒险。具有成长性,可以打开角色界面与物品栏。
右上角是小地图,可以看到当前在迷宫的位置;左上角为状态栏,显示主角生命、经验和等级;左下角为信息栏,显示游戏信息(是否有敌人追踪、是否有物品可以拾取和宝箱可开、角色造成的伤害和收到的伤害)。

敌人
由代码随机生成的怪物,具有简单AI,可以追踪出现在视野中的玩家。(可以在试玩视频中查看,无法直接展示)。

相关代码逻辑
(1)R_Player.cs
这个脚本用来控制人物的基本属性,移动和基本动作,以及攻击辅助。
玩家的生命,经验值,攻击力,防御力,幸运在此处被定义(包括基本值,成长值与装备增加值)
完成一个基本动作时(包括按下移动键、使用道具),世界时间+1(nextturn),角色移动。
玩家的近战攻击在此处被定义(任意方向上与敌人移动相反且碰撞)。
(2)PlayerHealth.cs
这个脚本用来控制人物的实时生命值。也就是包括了伤害判定、受伤显示和死亡与否。
玩家受到的伤害会经过与防御值的检测,计算出真实数值后反应在屏幕与游戏信息栏,并将实时生命显示在左上角的状态栏。
若玩家实时生命值不足,玩家死亡,摧毁object,game over。
(3)RoguelikeControls.cs
这个脚本用来控制角色的按键响应。
例如I键(inventory)可以打开角色物品栏,C键(character)可以打开角色装备栏,escape键可以暂停或退出游戏等。
(4)Picker.cs
这个是控制人物 拾取 的脚本。
按下G键,允许角色拾取地上存在的可以拾取的道具,并保存。如果没有,则游戏信息栏会显示没有可以拾取的道具。
(5)Container.cs
实现物品栏的脚本。
相关代码参考了个人以前参与的一个cocos做的2D游戏。多出的部分是L键的打开宝箱功能,获得物品会生成游戏信息显示在信息栏。
(6)CharacterSheet.cs
实现角色界面的脚本。
检测角色目前的装备,生成角色目前的几项基本属性(装备加成后),包括攻击、防御和幸运。
(7)XPManager.cs
实现玩家成长性的脚本。
玩家击败敌人会获得相应经验值,显示在状态栏中。获取经验会生成游戏信息显示在信息栏。
玩家经验若达到升级标准,会触发升级界面,相关属性(生命)也会获得提升。
敌人
敌人具有简单的AI,会追逐距离内的主角。
相关代码逻辑
(1)EnemyMove.cs
控制敌人基础的移动、攻击和检测主角位置。
敌人的移动分为两种。一种是没有发现主角时的wander,一种是发现主角后的chase。在chase中,实现了简单的AI。起初代码类似于吃豆人中ghost的方法,在路径点间徘徊,看了《Unity游戏设计与实践》中的相关资料,重写了Chase方法,实现了随机型与追逐型的结合。

(2)EnemyHealth.cs
实现敌人对来自主角的伤害的判定。
类似于PlayerHealth.cs,但更简单。特殊的地方在于多了怪物的生成机制。怪物的生成机制还与玩家的幸运值有关(1/3+1%luck).

其他主要代码
R_Map.cs
实现迷宫的随机生成与产生敌人。
获取一个随机数,根据随机数的不同生成地图种子,并产生地图。生成设置起始点与终点(上一层与下一层)。
ColorCorrectionCurves.cs
迷宫的相关材质的填充。在生成迷宫时自动选择相关材质。
Pickable.cs
OnTriggerEnter()检测是否有物品拾取;拾取后会显示在游戏信息栏。
SpellScroll.cs
与Pickable.cs结合,关于几种道具的使用的调用函数。
AOEBurst.cs、Missile.cs和Targeter.cs
这三者构成了玩家使用的两种魔法道具的效果。分别是爆炸效果,子弹效果和瞄准指令。

主要界面


交互媒体技术—2D迷宫冒险游戏相关推荐

  1. 交互媒体技术——作品推荐

    交互媒体技术--作品推荐 <Gravity>--融入动画技术的交互应用(数技1602-周际翔) <打群架>--模拟<拥挤城市>(数技1604-江峰) Issac S ...

  2. 交互媒体技术大作业 - 桌面台球

    桌面台球 作业要求完成情况 向量:桌面台球系统的台球运动与球杆撞击计算均采用向量方式 物理函数库:利用Java-Box2D实现物理仿真 力:利用物理公式与摩擦力计算台球的运动状态与最终停留状态 以上实 ...

  3. 交互媒体设计作业:Processing射击游戏

    交互媒体设计作业:Processing射击游戏 一.简介 这是一个全年龄向的双人射击游戏,操作简单,容易上手,只需操控四个方向键,就能操控你的小球吐出子弹全屏弹跳,攻击你的对手.这个简单的小游戏通过p ...

  4. 【前端】数字媒体技术专业主要课程及就业方向

    一.什么是数字媒体技术 数媒专业是一个融计算机技术和媒体艺术为一体的交叉学科,属计算机大类专业,授予工学学士学位. 数媒专业的发展方向主要有大Web前端,数字游戏和影视后期这3个方向. 二.技术方向& ...

  5. 计算机交互媒体应用范围,浅析交互媒体设计中的科技与艺术的关系

    颜成宇 孙博 摘 要:科学技术发展带来的影响是多面的,最重要的体现是给生活方式带来的变化.不仅表现在人们的衣食住行,还表现在对人们精神层面的影响.随着数字化时代的到来,交互媒体在实际生活中的应用也越来 ...

  6. 笔记-自媒体技术与软文写作

    自媒体技术与软文写作 软文 概念:是相对于硬性广告而言的软性广告 目的:宣传产品,宣传企业 兴起:医药保健行业(脑白金) 广告是一个大的框架,涉及到文字的部分叫做文案,带有宣传性质的完整的文案称为软文 ...

  7. 北京计算机数字媒体技术大学排名,学习数字媒体技术在北京有哪些好大学,排名?...

    学习数字媒体技术在北京有哪些好大学,排名?,一.学习数字媒体技术在北京有哪些好大学,排名?一.北京大学传媒学院:二.中国传媒大学北京邮电大学.北京工业大学.[2014年全国高校数字媒体技术专业排名(前 ...

  8. 江南大学数字媒体技术大三上作业整理——顾清宇

    文章目录 前言 数字音视频技术 人工智能 互动媒体技术 游戏程序设计 数字图像处理技术 人机交互技术 智能算法专题设计 前言 大三上圆满结束了,想到自己每次做作业都是自己从零开始,还挺痛苦的,所以想着 ...

  9. 互动媒体技术——Processing创意绘画系统

           互动媒体技术--Processing创意绘画系统 总体设计思路 工具:Processing Processing是一个为开发面向图形的应用(visually oriented appli ...

最新文章

  1. 自定义控件详解(六):Paint 画笔MaskFilter过滤
  2. LEB(Leading edge blanking)是什么
  3. 在python中等号前面与后面分别是什么意思-Python中冒号等于(:=)是什么意思?...
  4. Python中通过PyPDF2实现PDF合并
  5. 插件框架实现思路及原理
  6. ALBERT第一作者亲自讲解:词向量、BERT、ALBERT、XLNet全面解析
  7. net 中web.config一个配置文件解决方法 (其他配置文件引入方式)
  8. mysql数据库python基础知识_python学习之Mysql数据库编程基础知识介绍
  9. ffmpeg开源工具的使用_如何使用开源工具和最佳实践提高在线隐私
  10. .NET/Dot Net学习笔记---.net理解,C#.net的基本类型,字符串转义字符处理..
  11. HOWTO:InstallShield的Basic MSI工程中如何增加序列号输入选项
  12. 「leetcode」202. 快乐数:今天你快乐了么?
  13. 100以内的三连加减法JAVA_100以内的加减法巧算(转)
  14. http协议与tcp协议区别
  15. uni-app背景图片全屏
  16. 使用Android Studio打包遇到的问题
  17. 微信支付 postman_支付宝微信刷脸支付系统搭建服务商平台怎么做
  18. 中国通史—春秋战国的学术思想
  19. 将ESXI上的虚拟机导出为OVF模板
  20. JavaScript模拟实现先进先出、先进后出效果

热门文章

  1. 手机可以找出 暗藏的摄像头
  2. 139邮箱smtp地址和端口_快速玩转UNIMIA电子邮箱,不再错过每一封邮件!
  3. NFS挂载出现“mount can‘t find * in /etc/fstab“错误
  4. 让 VS2008 崩溃 的 WinForm 用户控件
  5. 雷凌linux车机升级_丰田雷凌原车高德地图升级方法(附说明)
  6. 线性回归算法(涉及最小二乘法、梯度下降法)
  7. 打印机显示另一台计算机正在使用,惠普打印机显示“由于另一个程序或另一台计算机正在使用联网的HP成像设备因此无法执行”怎么办?...
  8. vmware无法使用nat上网解决方式
  9. 易仔借微信深色模式之风拂面,“撰取”慷慨大彬的半个月奶茶
  10. C语言字符串转换为整数