版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
游戏程序设计课程报告报告题目太空大战游戏程序设计学院名称信息科学与技术学院专业名称软件工程学生姓名学生学号任课教师报告成绩教务处制2015年07月04日
目录TOC\o"1-3"\h\u第1章引言 21.1游戏设计背景 21.2游戏规则 31.3主要研究内容 5第2章游戏开发工具和关键技术简介 52.1开发工具 52.2关键技术 5第3章游戏程序总体设计 73.1游戏总体流程: 73.2游戏类图: 8第4章游戏程序实现与测试 104.1敌人碰撞逻辑的实现: 104.2终极BOSS的移动实现: 114.3玩家移动逻辑实现 134.4玩家碰撞逻辑实现: 144.5游戏界面GUI显示逻辑实现: 144.6敌人生成逻辑实现: 18第五章 收获 20第六章 参考文献 20第1章引言1.1游戏设计背景本次设计游戏为一款飞行射击类游戏,名字为太空大战。该游戏具有普通游戏一样的功能,比如场景设计,纹理贴图,人物移动,碰撞检测,生命值等元素。和团队一起设计并实现该游戏一方面巩固课堂学到的知识,学以致用,加深理论知识的理解,另一方面也锻炼了自己的实际编码能力和团队协作的能力,是一次难得又宝贵的开发经历。目前市面上的飞行射击游戏还算火爆,随着智能手机的普及,人们越来越多的使用手机玩手机游戏,其中以休闲类游戏为代表,比如成绩火爆过的《愤怒的小鸟》,《flappybird》,《雷电3D》,《现代战争》等游戏都广受好评。1.2游戏规则本款太空大战游戏分为两种模式:挑战模式和生存模式。玩家可在游戏主界面进行选择,如下图:其中挑战模式分为4个关卡,每个关卡的难度依次递增,玩家必须消灭一定数量的敌人,得到规定的分数才可以进入下一关。每一关的敌人会有所不同,难度也依次增加。最后一关为挑战终极BOSS,消灭BOSS后即可通关。下图分别为第二关和终极BOSS:生存模式中没有关卡限制,以计分为主,随着玩家分数的增加,游戏难度会逐渐加大,以敌人数量增加和类型增多来表现,玩家每次得到一百分,自己生命值就会增加一,初始生命为10,玩家生命耗尽则游戏结束,如下图:1.3主要研究内容在本次太空大战游戏设计中,我主要负责编码实现,精确碰撞技术的研究等内容。第2章游戏开发工具和关键技术简介2.1开发工具本次游戏开发语言使用C#采用Unity3d4.6游戏引擎开发代码编写使用VS2012模型制作采用3dMax20122.2关键技术游戏中设计的关键技术主要有物体的精确碰撞检测,背景动画的循环播放。精确碰撞检测:物体的精确碰撞实现方法有很多,在这个游戏中使用的是制作模型来达到精确碰撞的目的。首先在3dMax中制作出敌人的模型和一个同模型相接近的骨骼,并依附在模型中一起打包成FBX格式的模型,然后在Unity3d中直接导入该模型,就可以直接使用之前制作好的骨骼来做精确碰撞处理,如下图:背景动画的循环播放:实现背景的循环播放方法也很多,常见的比如直接使用2张可以前后对接的图片,当一张图片播放完成后直接在后面接入另一张图片,重复此过程,即可达到动画循环的目的。在这个有些中,我直接使用的Unity3d中的动画系统来制作UV动画,如下图:第3章游戏程序总体设计3.1游戏总体流程:首先玩家进入游戏主界面,进行选择,点击退出则直接退出游戏。选择挑战模式则进入游戏,游戏失败可以选择继续或者返回主界面,选择生存模式则当声明值耗尽时显示玩家分数并显示回退按钮退回到主界面,选择游戏帮助,则进入帮助界面。3.2游戏类图:敌人类图:游戏中有4种敌人,如上图所示,其中最原始的敌人是Enemy类,其它3中敌人都继承于Enemy,只是重写了移动方法和少量属性。玩家类图:玩家类中有MovwTo()方法,该方法实现玩家追随鼠标移动的方法,在手机上即让玩家追随手指移动。其中的OnTriggerEnter()方法检测碰撞并作出相应的逻辑计算。子弹类:子弹类分为玩家子弹和敌人子弹,其中敌人子弹继承于玩家子弹,重新了碰撞检测逻辑,由于Unity3d可直接在面板中设置脚本属性的值,因此每种敌人的子弹类不需要再重新写一个类,只需要依附EnemyRocket脚本后再重新设置值即可。游戏程序实现与测试4.1敌人碰撞逻辑的实现:voidOnTriggerEnter(Colliderother){if(other.tag.CompareTo("PlayerRocket")==0)//如果子弹发生碰撞{Rocketrocket=other.GetComponent<Rocket>();//获取子弹对象的引用if(rocket!=null){m_life-=rocket.power;//减少生命值if(m_life<=0)//敌机生命值用尽就销毁{if(GlobalPramameters.gameModel=="SurviveModel")//如果是生存模式{SurviveModelManage.Instance.AddScore(m_point);if(SurviveModelManage.Instance.GetScore()-100*GlobalPramameters.lifeAddCount>=0){mplayer.m_life+=1;//增加生命GlobalPramameters.lifeAddCount+=1;}}elseGameManager.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.position,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的移动实现:protectedoverridevoidUpdateMove(){m_fireTimer-=Time.deltaTime;if(m_fireTimer<=0){m_fireTimer=1;if(m_player!=null){Vector3relativePos=m_transform.position-m_player.position;//敌机位置减去玩家位置,得到一个向量差Vector3leftPos1=m_transform.position;//左边发射导弹位置Vector3leftPos2=m_transform.position;//左边发射导弹位置Vector3rightPos1=m_transform.position;//右边发射导弹位置Vector3rightPos2=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,rightPos2,Quaternion.LookRotation(relativePos));//让子弹朝着玩家飞Instantiate(m_rocket,rightPos1,Quaternion.LookRotation(relativePos));//让子弹朝着玩家飞}}//前进:Z方向直线往下走floatrx=Mathf.Sin(Time.time-GlobalPramameters.time)*Time.deltaTime*6.0f;//左右移动floatrz=0f;int[]myArray={1,2};floatelement=myArray[Random.Range(0,myArray.Length)];if(element%2==0)rz=Mathf.Sin(Time.time)*Time.deltaTime*(-1.0f);//上下移动elserz=Mathf.Sin(Time.time)*Time.deltaTime*(1.0f);//上下移动m_transform.Translate(newVector3(rx,0,rz));}4.3玩家移动逻辑实现voidMoveTo(){if(Input.GetMouseButton(0)){Vector3ms=Input.mousePosition;//获得鼠标屏幕的位置Rayray=Camera.main.ScreenPointToRay(ms);//将屏幕位置转为射线RaycastHithitinfo;//用来记录射线碰撞信息booliscast=Physics.Raycast(ray,outhitinfo,1000,m_inputMask);//产生射线if(iscast){m_targetPos=hitinfo.point;//如果射中目标,记录射线碰撞点}}Vector3pos=Vector3.MoveTowards(this.transform.position,m_targetPos,(m_speed+20)*Time.deltaTime);//获得朝目标移动的位置,第三个参数数移动的最大速度this.m_transform.position=pos;//更新当前的位置}4.4玩家碰撞逻辑实现:voidOnTriggerEnter(Colliderother){if(other.tag.CompareTo("PlayerRocket")!=0&&other.tag.CompareTo("Quad")!=0){if(other.tag.CompareTo("HelicoptersRocket")==0)m_life-=2;elsem_life-=1;if(m_life<=0){Instantiate(m_explosionFX,m_transform.position,Quaternion.identity);//播放爆炸特效Destroy(this.gameObject);}}}4.5游戏界面GUI显示逻辑实现:voidOnGUI(){//游戏暂停if(Time.timeScale==0){if(nextLevel){switch(GlobalPramameters.currentLevel){case1:GUI.skin.label.fontSize=50;//放大字体GUI.Label(newRect(0,Screen.height*0.2f,Screen.width,60),"通关成功");GUI.skin.label.fontSize=20;//进入下一关按钮if(GUI.Button(newRect(Screen.width*0.5f-50,Screen.height*0.4f,100,30),"进入下一关")){Application.LoadLevel("level_2");//载入下一关}break;case2:GUI.skin.label.fontSize=50;//放大字体GUI.Label(newRect(0,Screen.height*0.2f,Screen.width,60),"通关成功");GUI.skin.label.fontSize=20;//进入下一关按钮if(GUI.Button(newRect(Screen.width*0.5f-50,Screen.height*0.4f,100,30),"进入下一关")){Application.LoadLevel("level_3");//载入下一关}break;case3:GUI.skin.label.fontSize=50;//放大字体GUI.Label(newRect(0,Screen.height*0.2f,Screen.width,60),"通关成功");GUI.skin.label.fontSize=20;//进入下一关按钮if(GUI.Button(newRect(Screen.width*0.5f-50,Screen.height*0.4f,100,30),"挑战终极BOSS")){GlobalPramameters.time=Time.time;Application.LoadLevel("level_4");//载入下一关}break;default:break;}}elseGamePause();}if(m_player!=null){m_life=(int)m_player.m_life;//获得生命值}else//游戏结束{m_life=0;GUI.skin.label.fontSize=50;//放大字体GUI.Label(newRect(0,Screen.height*0.2f,Screen.width,60),"游戏失败");GUI.skin.label.fontSize=20;if(GUI.Button(newRect(Screen.width*0.5f-50,Screen.height*0.5f,100,30),"返回主菜单")){Application.LoadLevel("start");//读取关卡m_score=0;m_life=GlobalPramameters.playerLife;GlobalPramameters.currentLevel=0;}}if(GlobalPramameters.currentLevel==4&&Helicopters_Apache==null){GUI.skin.label.fontSize=50;//放大字体GUI.Label(newRect(0,Screen.height*0.2f,Screen.width,60),"YOUAREWINNER!");GUI.skin.label.fontSize=20;//进入下一关按钮if(GUI.Button(newRect(Screen.width*0.5f-50,Screen.height*0.4f,100,30),"返回主菜单")){Application.LoadLevel("start");//读取关卡m_score=0;m_life=GlobalPramameters.playerLife;GlobalPramameters.currentLevel=0;}}GUI.skin.label.fontSize=15;GUI.Label(newRect(150,5,100,30),"生命值:"+m_life);//显示生命值//显示记录GUI.skin.label.alignment=TextAnchor.LowerCenter;GUI.Label(newRect(0,5,Screen.width,30),"记录:"+m_hisore);//显示当前得分GUI.Label(newRect(0,25,Screen.width,30),"得分:"+m_score);}4.6敌人生成逻辑实现:voidUpdate(){canInstance=false;if(m_gameModel=="SurviveModel"){//控制生成不同敌人的时机currentScore=SurviveModelManage.Instance.GetScore();if(currentScore>=350)canInstance=true;elseif(currentScore>=250&&this.gameObject.tag.CompareTo("Model_Helicopters_Apache")!=0)canInstance=true;elseif(currentScore>=100&&(this.gameObject.tag.CompareTo("Enemy")==0||this.gameObject.tag.CompareTo("SuperEnemy")==0))canInstance=true;elseif((this.gameObject.tag.CompareTo("Enemy")==0))canInstance=true;}//控制挑战模式下游戏难度if(GlobalPramameters.currentLevel==3&&this.m_enemy.tag.CompareTo("Model_Helicopters_Transport")==0)enemyNumber=25.0f;elseif(GlobalPramameters.enemyCount>20)enemyNumber=5.0f;elseif(GlobalPramameters.enemyCount>10)enemyNumber=10.0f;elseenemyNumber=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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版通讯器材购销合同3篇
- 2025年度大型活动场地租赁及服务合同4篇
- 2025年PVC管道产品检测与质量保证服务合同范本3篇
- 2025年消防给水系统设备及工程安全防护合同3篇
- 2025年度餐饮股份合作人力资源合作协议3篇
- 2024版跨国投资风险共保协议版B版
- 二零二五版国有控股企业股权置换与混合所有制改革合同3篇
- 2025年度消防安全通道维护外包服务合同3篇
- 2024移动支付技术服务合同
- 2024版暂定协议总价协议样本版B版
- 苏教版三年级数学下册全单元测试题(加答案)
- 副厂长竞聘演讲稿
- 高二物理题库及答案
- 2024年河北省廊坊市广阳区中考一模道德与法治试题
- 电影项目策划书
- 产业园区金融综合服务创新蓝皮书(2024.1)
- 高一数学单元练习卷
- 国际标准IQ测试题及答案样本
- 美容院管理制度章程
- 职业发展展示园林
- 统编版六年级下册语文1-6单元习作课件
评论
0/150
提交评论