版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、英速剑笑江湖游戏软件V1.0设计说明书第一章 相关简介1.1剑笑江湖概念和发展历史网游OL一般都有时间限制,特定关卡等。1.2基本要求1.2.1开发软件及硬件要求Intel Pentium 4 2.0GHZ,512内存,80G硬盘。Microsoft Windows 2000 Professional。Microsoft Visual C+ 2008。1.2.2运行环境Intel Pentium 2及以上处理器,32M以上内存,20M以上硬盘空间。Microsoft Windows 2000或XP以上操作系统。800×600或以上的屏幕分辨率。1.2.3测试环境操作系统与硬件配置Mi
2、crosoft Windows 2000 Professional。Microsoft Windows XP Professional。Microsoft Windows 7。有MFC环境的动态库文件,如MFC42.dll等。Intel Pentium 4 2.0GHZ,512内存,100G硬盘剩余空间。1.3横版过关游戏具有的基本功能a)能够显示主菜单和界面游戏需要提供主菜单让玩家进行游戏设置,同时能够把地图文件中的信息转换成为图像显示到主游戏界面上。b)能够实现键盘操作功能能够接收到键盘输入的方向键信息,并根据不同的方向键让人物行走移动。例如,当玩家单击方向键“上”时,如果向上的位置是可移
3、动的,那么游戏人物就向上移动c)能够实现道具功能捡到道具的时候,道具可以有相应功能。 d)游戏胜负判断功能在游戏中,当玩家把所有的敌人都消灭掉时(或者直接杀死BOSS时),玩家胜利通过,进行下一关口的游戏。如果玩家无法在限定时间将所有敌人杀死或者血量为0时,玩家失败。玩家可以选择重新开始游戏,或者是退出游戏。e)支持人物选择功能玩家在游戏中可自行选择挑战人物。当玩家点击菜单中“游戏开始”时候,会弹出选择框供玩家选择,选择完毕后就直接开始游戏。f)游戏支持背景音乐功能通过主菜单,在游戏开始前,可以选择播放背景音乐的音量的大小。默认音量为中。玩家也可以通过修改背景音乐的音量来调整游戏的音量,充分满
4、足玩家的个性化需求。g)游戏提供帮助说明在游戏菜单中,提供一个使用说明项,以方便对本游戏不了解的玩家对游戏进行操作和使用。鉴于本游戏家喻户晓,故在此处只是提供比较简单的说明。1.3.1功能和技术特点功能特点:1,精美画面: 创新双核引擎打造精美的3D游戏画面,完美世界数年磨一剑的心血之作。2,真实天气:淡烟疏雨,电闪雷鸣,真实还原原著中夜雨激斗、黄昏落日等经典场面。3,硬派动作:动作手游的革新,拳拳到肉的畅爽打击,来自于真正武林高手的招式动作捕捉,4:趣味战斗:全新物理引擎打造实时酣畅淋漓的战斗体验,含有浮空、腾空、击飞、击退等主机游戏格斗动作元素,技术特点:1.全面并同等的支持OpenGL和
5、Direct3D2.全面支持Windows,Linux以及Mac OS X平台3.简单并可扩展的对象框架,能方便的插入到已存在的应用程序框架中1.4横版过关游戏相关的技术要点1.4.1数组a)数组的定义数组3是n(n>1)个相同类型数据元素a1,a2,a3,an 构成的有限序列,且该有限序列存储在一块地址连续的内存单元中。数组的定义类似于采用顺序存储结构的线性表。由于数组是存储在连续内存单元中的线性表,所以线性表的顺序存储结构理所当然地采用一维数组来描述。b)数组的性质(1)数组中的数据元素数目固定。一旦定义了一个数组,其数据元素数目不再有增减的变化。(2)数组中的数据元素具有相同的数据
6、类型。(3)数组中的每个数据元素都和一组唯一的下标值对应。(4)数组是一种随机存储结构,可随机存取数组中的任意数据元素。c)对于一个m行n列的二维数组在项目中的表示,如下:公式1-1 数组的表示也可以将Amxn简计为A,那么A是这样的一个一维数组A=(a1,a2,aiam)其中,ai=(ai,1,ai,2,ai,n)(1<=i<=m)。1.4.2碰撞检测a)碰撞检测的基本原理碰撞检测9就是检测游戏虚拟场景中不同物体之间是否发生了碰撞。b)碰撞检测算法分类1)基于空间划分的碰撞检测算法该算法的基本思想是:只有物体之间的距离达到一定近的程度,才有可能发生碰撞。以最简单的圆形包围体与圆形
7、包围体的碰撞检测为例,确定潜在碰撞集的碰撞区域C,如图1-2所示。图1-2潜在碰撞集的碰撞区域C在图1-2中,可以看到,被碰撞物体是半径为,圆心坐标为的圆形,碰撞物体对象是半径为的圆,圆心坐标可为屏幕中任意一点。图1-2中最大圆即为最小的潜在碰撞区域,为了简化计算,本文取该圆形的最小外接正方形 作为潜在碰撞区域。此后,对于圆心落入该区域的物体,都需要进行碰撞检测,确定碰撞状态。2)基于AABB矩形包围盒的碰撞检测算法该算法的基本思想是:轴对齐包围盒AABB的最大特点就是能够实现快速的相交测试,因为只需要执行坐标值间的比较,本文通过AABB包围盒对物体对象进行物理模拟,通过分离轴理论检测物体相交
8、状态。算法流程图如图1-3所示。图1-3基于AABB矩形包围盒的碰撞检测算法流程图矩形是除了三角形之外的最简单的多边形,由AABB矩形包围盒的检测思想,该算法可推广至多边形与多边形之间的碰撞检测。这里需要注意的是多边形的构造,本文也提到凸壳的概念,根据凸壳的一些理论,可以确定包围物体的凸多边形。当然,大家希望这个凸多边形越紧凑越好,可以选择方向包围盒OBB。3)基于几何图形的碰撞检测算法横版过关游戏中的人物类型和道具多种多样,针对不同类型的碰撞,需要设计不同的算法。该类算法的设计主要是通过物理模拟转换为线段与矩形(或者多边形)之间的相交状况,算法的伪代码如下:for(多边形的第一条边到第n条边
9、)if(需检测的线段与该条边各自的端点是否分边包含一条线段的直线的两端)线段与边相交;返回相交状态;else if(需检测的线段的任一端点与多边形的每一条形成的三角形凸包都有相同的检测结果)线段位于多边形内部;返回相交状态; 1.4.3有限状态机(FSM)在游戏 AI 编程界中,没有任何一个数据结构比有限状态机使用的更多。实际上,在计算机科学中,状态机的使用非常普遍。这个简单而强大的组织工具帮助程序员将一个复杂的问题分解为更容易处理的子问题。有限状态机是一种编程思想,简单而言,有限状态机由一组状态、一个初始状态、若干输入条件和根据输入及现有状态转换为下一个状态的转换函数组成。在UML中,将 F
10、SM 归纳为如下 5 部分:a)状态(State):指的是对象在其生命周期中的一种状况,处于某个特定状态中的对象必然会满足某些条件、执行某些动作或者是等待某些事件。 b)事件(Event):指的是在时间和空间上占有一定位置,并且对状态机来讲是有意义的那些事情。事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态。c)转换(Transition):指的是两个状态之间的一种关系,表明对象将在第一个状态中执行一定的动作,并将在某个事件发生同时某个特定条件满足时进入第二个状态。 d)动作(Action):指的是状态机中可以执行的那些原子操作,所谓原子操作指的是它们在运行的过程中不能被其他消息
11、所中断,必须一直执行下去。 f)活动 (Activity) :在状态机中进行的一个非原子的执行,由一系列动作组成。有限状态机是由有限的状态组成的一个机制。考虑一下门:它的“状态”有“开”、“关”以及“锁”、“未锁”。对于一个有限状态机,它应该有“输入”。这个“输入”可以影响“状态转换”。考虑一下门:它的输入有“使用钥匙”、“使用手”。有限状态机应该有一个简单(或复杂)的状态转换函数,这个函数可以决定什么状态可以变成“当前状态”。这个新的当前状态被称为有限状态机的“状态转换”的“输出状态”。总之,有限状态机是一组有限的状态组成的,其中的一个状态是“当前状态”。有限状态机可以接受一个“输入”,这个
12、“输入”的结果将导致一个“状态转换”的发生(即从“当前状态”转换到“输出”状态)。这个“状态转换”是基于“状态转换函数”的。状态转换完成之后,“输出状态”即变成了“当前状态”。1.4.4模式移动和追踪算法(一)模式移动模式移动9是使电脑角色显得有一些智能的最简单方式,他的原理是电脑角色根据一些预先定义的模式来移动,使其看起来好像在执行一些复杂的策略。模式移动的标准算法是使用控制指令,指使计算机控制的角色在每一轮游戏循环中如何移动(二)追踪算法追踪算法9是游戏中最常用的也是最基本的人工智能算法。追踪可以直接根据被追踪者的坐标来修改追踪者的坐标,使两者之间的距离逐渐缩短。也可以使用向量追踪的方法使
13、追踪看起来更真实。闪躲和追踪是算法基本是一样的(闪躲是将两者之间的距离增加,追踪是将两者之间的距离减少。如图1-5所示)。图1-5追踪算法和闪躲算法图像示例a)基本追踪算法假设被追踪者的坐标是preyX和preyY,追踪者的坐标是predatorX和predatorY,基本追踪算法如下:if (predatorX > preyX) predatorX -; else if (predatorX < preyX) predatorX +; if (predatorY > preyY) predatorY -; else if (predatorY < preyY) pre
14、datorY +;b)视线追踪算法假设我们需要由 (x0, y0) 这一点,绘画一直线至右下角的另一点(x1, y1),x,y分别代表其水平及垂直座标。在此我们使用电脑系统常用的座标系,即x座标值沿x轴向右增长,y座标值沿y轴向下增长。因此x及y之值分别向右及向下增加,而两点之水平距离为x1 x0且垂直距离为y1-y0。由此得之,该线的斜率必定介乎于1至0之间。而此算法之目的,就是找出在x0与x1之间,第x行相对应的第y列,从而得出一像素点,使得该像素点的位置最接近原本的线。对于由(x0, y0)及(x1, y1)两点所组成之直线,公式如下:;因此,对于每一点的x,其y的值是。第二章 英速剑笑
15、江湖游戏软件V1.0游戏的总体设计2.1游戏流程图2-1 游戏流程图双击EXE文件打开游戏,游戏会先进入LOGO片头动画,然后会到菜单界面(见图2-2);按“开始游戏”按钮,会直接进入游戏界面(见图2-5);按“游戏帮助”按钮,会进入游戏故事背景介绍及操作说明界面(见图2-3);按“游戏设置”按钮,会进入游戏声音设置界面(见图2-4);按“退出游戏”按钮,直接退出游戏程序。2.2界面2.2.1游戏菜单界面图2-2 游戏菜单界面该游戏界面的背景图来自于网络上。因为没有美工的帮忙,作者只能够在网络寻找背景图素材,然后用PS来输出艺术字来增加炫丽效果,包括按钮上的文字变换效果,都是用简单的PS文字加
16、工,没有过多的修饰。2.2.2游戏操作说明界面图2-3 游戏故事背景和操作说明的界面故事的背景就在我国古代东汉末年,地点在荆州当阳附近的长坂坡,战斗双方是刘备和曹操。刘备被曹操击溃,携民众逃走,令张飞率二十骑断后。张飞阻拦曹军,使得赵云有时间护送甘夫人和刘禅逃回。战后刘备放弃转往江陵的计划,转为前往江夏和刘表长子刘琦会合。三国争霸,群雄纷起,游戏是以刘备手下的三个武将为我方,来实现剿灭汉贼,匡扶汉室的统一霸业。2.2.3游戏声音设置界面图2-4 游戏音量设置界面按“-”号按钮,可以调低游戏中的音量和菜单背景的音量,相反按“+”号按钮也可以调高音量。这也是为了针对玩家做出人性化设置,为玩家提供更
17、多选择。2.2.4游戏运行界面图2-5 游戏界面游戏一开始进入的时候,没有小兵的出现,当走到一定的位置的时候,会出现普通步兵、远程射箭兵和BOSS(详见小节2.3),当人物和敌人走近攻击范围,敌人会进行攻击。人物击杀所有敌人之后即可过关。游戏过程中,会有道具的出现,人物经过就能捡到道具,并且不同道具具有不同的功能。人物和敌人的活动范围只能是在游戏界面2/3处,当人物走到关卡最末端时候,不能继续前行。2.2.5游戏结束界面图2-6 游戏结束界面当人物把所有敌人杀死后游戏结束。2.2.6地图图2-7 关卡地图地图信息(此场景素材来着网络),街机英速剑笑江湖游戏软件V1.0第一关长坂坡之战的游戏场景
18、;(见图2-7);2.3敌人信息总共有3种敌人:图2-8普通步兵图2-9远程射箭兵图2-10 关卡BOSSa) 普通步兵(见图2-8):只会进行短距离的攻击,伤害较低,攻击范围短而b) 参考文献 1 叶子,进实现J计算机工程与科学,2009,1(07):61-64. 2 基于MATLAB 实现的指纹图像预处理J2008,34(04):836-856. 3 4 5 By-gnksguybb 6 李 宁指纹增强算法研究D济南:山东大学,2007. 7 马扬彪基于Gabor 滤波的指纹图像增强J. 微计算机信息,2009,25(15):305-306. 8 向 锐面向低质量指纹的图像增强算法研究D重
19、庆:西南政法大学,2008.且频率高;b)远程射箭兵(见图2-9):会进行远距离的攻击,伤害中等,攻击范围长而且频率也是中等。c)关卡BOSS(见图2-10):会进行中等距离的攻击,伤害较高,攻击频率比较低。2.4道具信息道具有:a)(小刀):当人物拾到小刀的时候,可以通过按键发射出去,对敌人造成远程攻击伤害;b)(鱼肉):当人物拾取到鱼肉的时候可以回适量的血量;c)(加分道具):拾取会增加分数。2.5人物操作信息A-往左走;D-往右走;S-往下走;W-往上走。攻击介绍:按J:普通攻击(见图2-11);图2-11人物的普通攻击按K:绝望斩(见图2-12);图2-12 人物的绝招-绝望斩按L:扔
20、小刀(捡到小刀后才能进行此攻击,见图2-13)。图2-13 人物扔小刀攻击第三章 英速剑笑江湖游戏软件V1.0游戏的功能实现3.1项目类除了老师提供的framework框架类和DXUT框架类,作者自己修改或编写以下类来实现该游戏的功能:1) 开头动画类(OpeningAnimation类)该类继承于framework框架里面的CGameScreen类。主要是写片头动画的图片渲染,用遮盖效果来实现图片的播放,从而达到效果。2) 主菜单类(MainMenu类)该类同样是继承于framework框架里面的CGameScreen类。主要是实现了按钮响应功能、菜单页面布局、菜单背景音的播放,其中里面相对
21、应实现了游戏逻辑的跳转,分别通过按钮进入游戏主程序实现的Mission类、帮助说明的Help类、声音设置的Option类的实现还有退出游戏。3) 游戏任务类(Mission类)该类继承于framework框架里面的CGameScreen类,里面包括实现英雄功能的SpriteHero类,实现敌人功能的SpriteEnemy类,实现道具功能的SpriteItem类。主要是整合了游戏主线的所有类的使用,它是游戏的主线类,结合了英雄类,敌人类,道具类,完成整个游戏的功能实现。4) 核心类(CMyGame类)CMyGame类是整个框架的枢纽,也就是整个游戏的核心,而CMyGame类是一个抽象类,为此,如
22、果要使用本框架,首先就必须定义一个类,继承自CMyGame类。在CMyGame类里,InitGame函数是纯虚函数,这个函数是在子类里必须重写,完成加载资源和初始化工作。而游戏逻辑可以放在GameFunc函数里,特定的渲染相关的操作可以放在Render函数里完成。图3-1 项目类图3.2技术要点在项目中的实现3.2.1数组在项目中的实现由于数组在游戏中相当常见,并且使用范围很广,所以作者用项目中以下一个例子来说明数组在项目中的作用。项目中,假设用enemyType来代表敌人种类,enemyPos表示敌人的位置,临时创建一个数组对象enemy_arr20,enemy_Pos20 ,就可以用int
23、 enemy_arr20 = 0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,2;memcpy(enemyType,enemy_arr,sizeof(enemy_arr);实现敌人种类,然后用D3DXVECTOR3 enemy_Pos20 = D3DXVECTOR3(400,500,0),D3DXVECTOR3(500,400,0),D3DXVECTOR3(5000,450,0),D3DXVECTOR3(1800,500,0),D3DXVECTOR3(1800,420,0),D3DXVECTOR3(1800,350,0),D3DXVECTOR3(1800,520,0
24、),D3DXVECTOR3(2000,500,0),D3DXVECTOR3(2000,400,0),D3DXVECTOR3(3200,500,0),D3DXVECTOR3(3200,430,0),D3DXVECTOR3(3200,500,0),D3DXVECTOR3(3400,500,0),D3DXVECTOR3(3400,400,0),D3DXVECTOR3(4300,500,0),D3DXVECTOR3(4300,400,0),D3DXVECTOR3(4500,500,0),D3DXVECTOR3(5000,500,0),D3DXVECTOR3(5000,400,0),D3DXVECTOR
25、3(5300,400,0);memcpy(enemyPos,enemy_Pos,sizeof(enemy_Pos);来实现敌人的初始位置。同样的道理,弄个随机变量,用同一种方法可以实现道具的随机出现。数组让编程人员很好地避开了每个敌人或者道具都创建一遍的尴尬,用数组把同类型的对象一次创建出来,也能达到同样的效果。这就是数组精妙之处。3.2.2碰撞检测在项目中的实现a)英雄与敌人的碰撞作者运用了第一章提到的技术点的矩形包围盒的碰撞检测算法,首先作者用一个tmp临时矩形变量代表了敌人的精灵高宽,用一个指针变量pMan代表人物,那就可以用pMan->CollideWith(tmp)来代表英雄是
26、否触碰到了敌人。然后在判断是敌人攻击英雄,还是英雄攻击敌人。如RECT tmp = *(pEnemyi->GetSpriteRect();然后,if (pMan->CollideWith(tmp)if (敌人攻击英雄)if (英雄血量还没为0)英雄受伤;if (英雄攻击敌人)if (敌人血量还没为0)敌人受伤;b)英雄与道具的碰撞先用一个变量ItemType代表道具种类,ITEM_HP代表回血道具,ITEM_SCORE代表分数道具,ITEM_KNIEF代表小刀。然后用函数ItemType =pItemj->GetItemType()得到道具类型,和上述得到敌人精灵高宽一样的方
27、法,同样有pMan->CollideWith(*pItemj)代表英雄是否碰到了道具。然后if (pMan->CollideWith(*pItemj)if (ItemType = SpriteItem:ITEM_HP)增加血量;else if (ItemType = SpriteItem:ITEM_SCORE)增加分数;else if (ItemType = SpriteItem:ITEM_KNIEF)获得一把飞刀;c)道具与敌人的碰撞飞刀在没有被英雄捡到的时候,与敌人不能碰撞,当英雄获得一把飞刀后(记录捡到飞刀的数量,用完则不能用),可以按键使用飞刀,飞刀会跟敌人碰撞,造成敌人受
28、到伤害。用kniefCount代表飞刀的数量,pEnemyk代表敌人,代码实现如下if (ItemType = SpriteItem:ITEM_KNIEF)for (int k=0;k<enemyCount;k+)if (pEnemyk->CollideWith(*pItemj)if (道具是射出去的而不是在地上的飞刀)敌人受到伤害;3.2.3有限状态机(FSM)在项目中的实现状态机有很多种模式,在程序员编程的情况下,如果分支语句非常多,可以State模式,目的就是目的可以消除庞大的条件分支语句,大的分支判断使得程序员们难以修改和扩展,但是由于作者的项目分支语句不是很多,加上作者人物和敌人状态不是很多,所以作者运用了函数来实现状态变化,目的是为了更好调理开发者的思路,能够在修改代码的情况下,迅速找到代码做出修改。运用项目中下面一个例子来体现。作者创建函数enemy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年清洁能源行业绿色能源在建筑领域的应用展望报告
- 2025年道路运输企业安全生产应急物资清单考核试卷
- 2025年金融衍生品风险管控(中小企业商品衍生品应用门槛风险)考核试卷
- 2025年智能传感器网络攻击防护考核试卷
- 2025年哈尔滨松北区审计局、松北区机关服务中心招聘编外聘用人员4人考试笔试备考试题及答案解析
- 2025安徽六安市金寨县消防救援局政府专职消防员招聘10人考试笔试备考题库及答案解析
- 2025年湖北农商行新员工社会招录笔试考试备考题库及答案解析
- 合江县卫生健康局2025年下半年公开招聘卫生医疗机构编外工作人员考试笔试模拟试题及答案解析
- 2025广西自然资源职业技术学院下半年招聘工作人员150人考试笔试备考题库及答案解析
- 2025年湖南吉利汽车职业技术学院招聘考试笔试备考题库及答案解析
- 保密知识竞赛参考试题库(附答案)
- 学校考核物业表格
- 二年级数学《乘加乘减》集体备课活动记录
- 2024年广东省政工师理论知识考试参考题库(含答案)
- 蜜雪冰城是如何实现成本领先的
- 电子商务公司薪资体系
- 幼儿教资(综合素质)及答案
- 列车电子防滑器-电子防滑器原理
- 电子元器件标示及实物对照
- 耕地合法永久转让协议书
- 芜湖仅一机械有限公司年产500万套汽车零部件及通讯设备压轴件生产线项目(承诺制项目)环境影响报告表
评论
0/150
提交评论