ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:1.51MB ,
资源ID:8786342      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8786342.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(游戏程序设计报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

游戏程序设计报告.docx

1、游戏程序设计报告 游戏程序设计 课程报告报告题目 太空大战游戏程序设计 学院名称 信息科学与技术学院 专业名称 软件工程 学生姓名 学生学号 任课教师 报告成绩 教务处 制2015年 07 月 04 日第1章 引言1.1 游戏设计背景本次设计游戏为一款飞行射击类游戏,名字为太空大战。该游戏具有普通游戏一样的功能,比如场景设计,纹理贴图,人物移动,碰撞检测,生命值等元素。和团队一起设计并实现该游戏一方面巩固课堂学到的知识,学以致用,加深理论知识的理解,另一方面也锻炼了自己的实际编码能力和团队协作的能力,是一次难得又宝贵的开发经历。目前市面上的飞行射击游戏还算火爆,随着智能手机的普及,人们越来越多

2、的使用手机玩手机游戏,其中以休闲类游戏为代表,比如成绩火爆过的愤怒的小鸟,flappy bird,雷电3D,现代战争等游戏都广受好评。1.2 游戏规则本款太空大战游戏分为两种模式:挑战模式和生存模式。玩家可在游戏主界面进行选择,如下图:其中挑战模式分为4个关卡,每个关卡的难度依次递增,玩家必须消灭一定数量的敌人,得到规定的分数才可以进入下一关。每一关的敌人会有所不同,难度也依次增加。最后一关为挑战终极BOSS,消灭BOSS后即可通关。下图分别为第二关和终极BOSS:生存模式中没有关卡限制,以计分为主,随着玩家分数的增加,游戏难度会逐渐加大,以敌人数量增加和类型增多来表现,玩家每次得到一百分,自

3、己生命值就会增加一,初始生命为10,玩家生命耗尽则游戏结束,如下图:1.3 主要研究内容在本次太空大战游戏设计中,我主要负责编码实现,精确碰撞技术的研究等内容。第2章 游戏开发工具和关键技术简介2.1开发工具本次游戏开发语言使用C#采用Unity3d 4.6游戏引擎开发代码编写使用VS2012模型制作采用3dMax20122.2关键技术游戏中设计的关键技术主要有物体的精确碰撞检测,背景动画的循环播放。精确碰撞检测:物体的精确碰撞实现方法有很多,在这个游戏中使用的是制作模型来达到精确碰撞的目的。首先在3dMax中制作出敌人的模型和一个同模型相接近的骨骼,并依附在模型中一起打包成FBX格式的模型,

4、然后在Unity3d中直接导入该模型,就可以直接使用之前制作好的骨骼来做精确碰撞处理,如下图:背景动画的循环播放:实现背景的循环播放方法也很多,常见的比如直接使用2张可以前后对接的图片,当一张图片播放完成后直接在后面接入另一张图片,重复此过程,即可达到动画循环的目的。在这个有些中,我直接使用的Unity3d中的动画系统来制作UV动画,如下图:第3章 游戏程序总体设计3.1游戏总体流程:首先玩家进入游戏主界面,进行选择,点击退出则直接退出游戏。选择挑战模式则进入游戏,游戏失败可以选择继续或者返回主界面,选择生存模式则当声明值耗尽时显示玩家分数并显示回退按钮退回到主界面,选择游戏帮助,则进入帮助界

5、面。3.2游戏类图:(1)敌人类图:游戏中有4种敌人,如上图所示,其中最原始的敌人是Enemy类,其它3中敌人都继承于Enemy,只是重写了移动方法和少量属性。(2)玩家类图:玩家类中有MovwTo()方法,该方法实现玩家追随鼠标移动的方法,在手机上即让玩家追随手指移动。其中的OnTriggerEnter()方法检测碰撞并作出相应的逻辑计算。(3)子弹类:子弹类分为玩家子弹和敌人子弹,其中敌人子弹继承于玩家子弹,重新了碰撞检测逻辑,由于Unity3d可直接在面板中设置脚本属性的值,因此每种敌人的子弹类不需要再重新写一个类,只需要依附EnemyRocket脚本后再重新设置值即可。第4章 游戏程序

6、实现与测试4.1敌人碰撞逻辑的实现:void OnTriggerEnter(Collider other) if (other.tag.CompareTo(PlayerRocket) = 0)/如果子弹发生碰撞 Rocket rocket = other.GetComponent();/获取子弹对象的引用 if (rocket != null) m_life -= rocket.power; /减少生命值 if (m_life = 0) mplayer.m_life += 1;/增加生命 GlobalPramameters.lifeAddCount += 1; else GameManager

7、.Instance.AddScore(m_point);/消灭敌人后增加分数 Instantiate(m_explosionFX, m_transform.position, Quaternion.identity);/播放爆炸特效 Destroy(this.gameObject); if (other.tag.CompareTo(Player) = 0 & this.gameObject.tag.CompareTo(Model_Helicopters_Apache) != 0) m_life = 0; Instantiate(m_explosionFX, m_transform.positi

8、on, Quaternion.identity);/播放爆炸特效 Destroy(this.gameObject); if (other.tag.CompareTo(bound) = 0) m_life = 0; Instantiate(m_explosionFX, m_transform.position, Quaternion.identity);/播放爆炸特效 Destroy(this.gameObject); 4.2终极BOSS的移动实现: protected override void UpdateMove() m_fireTimer -= Time.deltaTime; if (m

9、_fireTimer = 0) m_fireTimer = 1; if (m_player != null) Vector3 relativePos = m_transform.position - m_player.position;/敌机位置减去玩家位置,得到一个向量差 Vector3 leftPos1 = m_transform.position;/左边发射导弹位置 Vector3 leftPos2 = m_transform.position;/左边发射导弹位置 Vector3 rightPos1 = m_transform.position;/右边发射导弹位置 Vector3 rig

10、htPos2 = m_transform.position;/右边发射导弹位置 leftPos1.x -= 0.9f; leftPos2.x -= 1.3f; rightPos2.x += 0.9f; rightPos1.x += 1.2f; Instantiate(m_rocket, leftPos1, Quaternion.LookRotation(relativePos);/让子弹朝着玩家飞 Instantiate(m_rocket, leftPos2, Quaternion.LookRotation(relativePos);/让子弹朝着玩家飞 Instantiate(m_rocket

11、, rightPos2, Quaternion.LookRotation(relativePos);/让子弹朝着玩家飞 Instantiate(m_rocket, rightPos1, Quaternion.LookRotation(relativePos);/让子弹朝着玩家飞 /前进:Z方向直线往下走 float rx = Mathf.Sin(Time.time-GlobalPramameters.time) * Time.deltaTime * 6.0f;/左右移动 float rz = 0f; int myArray =1,2; float element = myArrayRandom

12、.Range(0, myArray.Length); if (element % 2 = 0) rz = Mathf.Sin(Time.time) * Time.deltaTime * (-1.0f);/上下移动 else rz = Mathf.Sin(Time.time) * Time.deltaTime * (1.0f);/上下移动 m_transform.Translate(new Vector3(rx, 0, rz); 4.3玩家移动逻辑实现 void MoveTo() if (Input.GetMouseButton(0) Vector3 ms = Input.mousePositi

13、on;/获得鼠标屏幕的位置 Ray ray = Camera.main.ScreenPointToRay(ms);/将屏幕位置转为射线 RaycastHit hitinfo;/用来记录射线碰撞信息 bool iscast = Physics.Raycast(ray, out hitinfo, 1000, m_inputMask);/产生射线 if (iscast) m_targetPos = hitinfo.point;/如果射中目标,记录射线碰撞点 Vector3 pos = Vector3.MoveTowards(this.transform.position, m_targetPos,

14、(m_speed+20) * Time.deltaTime);/获得朝目标移动的位置,第三个参数数移动的最大速度 this.m_transform.position = pos;/更新当前的位置 4.4玩家碰撞逻辑实现: void OnTriggerEnter(Collider other) if (other.tag.CompareTo(PlayerRocket) != 0 & other.tag.CompareTo(Quad) !=0) if (other.tag.CompareTo(HelicoptersRocket) = 0) m_life -= 2; else m_life -= 1

15、; if (m_life = 350) canInstance = true; else if (currentScore = 250 & this.gameObject.tag.CompareTo(Model_Helicopters_Apache) != 0) canInstance = true; else if (currentScore = 100 & (this.gameObject.tag.CompareTo(Enemy) = 0 | this.gameObject.tag.CompareTo(SuperEnemy) = 0) canInstance = true; else if

16、 (this.gameObject.tag.CompareTo(Enemy) = 0) canInstance = true; /控制挑战模式下游戏难度 if (GlobalPramameters.currentLevel = 3 & this.m_enemy.tag.CompareTo(Model_Helicopters_Transport) = 0) enemyNumber = 25.0f; else if (GlobalPramameters.enemyCount 20) enemyNumber = 5.0f; else if (GlobalPramameters.enemyCount

17、10) enemyNumber = 10.0f; else enemyNumber = 15.0f; m_timer -= Time.deltaTime; if (m_timer = 0) m_timer = Random.value * enemyNumber;/Random.value随机生成0.0到1.0的数 if (GlobalPramameters.currentLevel = 3 & this.m_enemy.tag.CompareTo(Model_Helicopters_Transport) = 0) m_timer = 17; else if (m_timer 4) m_tim

18、er = 4; if (m_gameModel = SurviveModel & canInstance) Instantiate(m_enemy, m_transform.position, Quaternion.identity); else if (m_gameModel != SurviveModel) Instantiate(m_enemy, m_transform.position, Quaternion.identity); GlobalPramameters.enemyCount += 1; 第五章 收获在这次游戏设计开发中,使用了Unity3d,VS2012,3dMax等开发

19、工具,涉及到的关键技术有UV动画的制作,物体精确碰撞检测的实现,物体追随鼠标移动,需要改进的地方,游戏背景比较单调,战机类型较少,敌机级别种类太少,战机的功能、子弹种类。特效等等。第六章参考文献【1】Unity3D 游戏开发_宣雨松著_人民邮电出版社【2】Unity3D 手机游戏开发 金玺曾著清华大学出版社【3】3ds max总动员Modeling人体建模篇(4DVD)作者: 窦项东 出 版 社: 科学出版社【4】从零开始:3ds max基础培训教程(3ds max7中文版)作者: 詹翔,王海英 出 版 社:人民邮电出版社学生学习心得 通过本次游戏开发,加深了我对游戏设计与实现的理解,增强了对理论知识的运用和理解,同时也发现了自己的很多不足之处,学到了自学到一些其他方面的知识。也锻炼了团队协作能力。同时要感谢技术好的同学和老师对我们帮助和指导。 学生(签名):杨鹤 2015年 07月 04日诚信承诺本人郑重声明所呈交的课程报告是本人在指导教师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标注的地方外,论文中不包含其他人已经发表或撰写过的研究成果。与我一同工作的同学对本文研究所做的贡献均已在报告中作了明确的说明并表示谢意。学生(签名):杨鹤任课教师评语成绩评定:任课教师(签名): 年 月 日

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1