基于C++语言编程格斗游戏毕业设计正文.docx
- 文档编号:10994212
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:24
- 大小:803.80KB
基于C++语言编程格斗游戏毕业设计正文.docx
《基于C++语言编程格斗游戏毕业设计正文.docx》由会员分享,可在线阅读,更多相关《基于C++语言编程格斗游戏毕业设计正文.docx(24页珍藏版)》请在冰豆网上搜索。
基于C++语言编程格斗游戏毕业设计正文
摘要
游戏自古至今都伴随并影响着人们的生活。
截至2013年,中国游戏用户达3.45亿人,游戏产业链的发展给游戏开发带来了无限的商机,是未来信息产品的重要深化方向之一。
格斗游戏是出现的比较早的游戏。
其中涉及到人物动作、血量检测、模拟重力下落等效果。
掌握格斗游戏的开发是从事更高层次游戏开发的基础。
本论文就是学习和使用基于C++的编程和基于EasyX的图像处理操作,EasyX绘图库支持VisualC++6.0/2010/2013,基于Windows图形编程,是将Windows下的复杂图形编程过程进行封装,将Windows下的编程过程隐藏起来,给用户提供一个简单熟悉的接口。
用户对于图形库中函数的调用,最终都会由Windows的底层API实现。
通过学习EasyX对进一步学习Windows编程是很有帮助的。
本毕业设计中要学习和使用声音特效的加载和播放。
包括:
游戏运行是用report重复播放实现背景音乐的加载,用户操作时通过角色动作函数配合播放特效音乐,产生攻击音效的效果。
人物技能的设计与实现,通过图形的加载和覆盖、音效的配合播放、对方角色的血量减少实现人物攻击技能的实现。
以及实现人物的技能的加载和双人对打等效果。
在实际的游戏开发中,一般不会用本毕业设计中所用的工具,但这确是培养编程兴趣很好的方法。
除此之外,在讲授图形学时,老师也可以借助EasyX进行讲解。
关键词:
游戏;编程;EasyX
ABSTRACT
Sinceancienttimesgamehaveaccompaniedandaffectedpeople'slives,Upto2013,Chinesegameusershavereached345millionpeople,thedevelopmentofthegameindustrychainhasbroughtunlimitedbusinessopportunities.Itisanimportantfuturedirectionofthedeepenedinformationproducts.Fightinggamesareoneofthefirstemerginggametypes.Whichinvolvesactionfigures,bloodtesting,simulategravityfallandsoon.Masterfightinggamedevelopmentisthebasisforthehigherlevel’sgamedevelopment.
ThisthesisistostudyandusebasedonC++programmingandbasedEasyXimageprocessingoperations.EasyXgraphicslibrarysupportsVisualC++6.0/2010/2013,theWindowsgraphicalprogrammingbasedonthecomplexproceduresofWindowsunderthepackage,theWindowsunderHidetheprogrammingprocess,toprovideuserswithasimple,familiarinterface.UsersForgraphicslibraryfunctioncall,willeventuallybetheunderlyingWindowsAPIimplementation.BylearningEasyXfurtherlearningWindowsprogrammingishelpful.Thegraduationdesigntolearnandusesoundeffectstoloadandplay,includingthegamerunswithreportrepeat,backgroundmusicloadedbytheuseroperatesthecharactermotionfunctionwithplayingmusiceffects,soundeffectsgeneratedattack.Designandimplementationofcharacterskillsthroughpatternloadingandcoveredwithsoundplayback,theothertheroleofbloodvolumereductionAchievedcharacterattackskills.Andtherealizationofpeople'sskillsanddoublerallyloadingeffects.
Intheactualgamedevelopmentingeneralwillnotusethisgraduationdesigntools,butitisreallyagoodwaytocultivateinterestprogramming.Inaddition,intheteachingofcomputergraphics,theteachercanalsouseEasyXtoexplain.
Keywords:
game;program;EasyX
1前言
1.1研究背景和现实意义
目前,游戏产业发展越来越快,根据国外著名统计机构StrategyAnalytics近日发表一份名为《全球游戏市场预测》的分析报告,游戏产业每年产值超过600亿美元,已成为世界上最大的娱乐产业,继美国、日本、韩国之后,越来越多的国家逐渐开始重视游戏产业的所带来的重大商机,并以国家力量为主导发展电子游戏产业。
现在,北美的电子游戏产业的收入已经超过了整个电影产业的收入。
美国拳头公司制作的《英雄联盟》更是风靡全球,其注册人数超过数亿人,同时在线人数超过数百万人,2015年MSI季中赛的决赛直播,超过一亿人观看,这足以证明游戏产业的巨大潜力与商机,一种新形式的竞技-电子竞技正在悄然崛起。
我国的游戏行业起步相对国外来说比较晚,但其发展速度非常快,据年会期间发布的《2014年中国游戏产业报告》显示,2014中国游戏产业总体收入达到1144.8亿元,主要来自客户端游戏(端游)、网页游戏(页游)、移动游戏(手游)、社交游戏以及单机游戏五个部分,总体收入相比2013年增长了69.02%。
游戏用户达到数亿人,尤其是智能手机的普及进一步促进了移动游戏的发展。
目前我国游戏软件开发人才缺口很大,特别是复合型游戏开发人才,更是成为各大游戏公司互相争夺的人才。
这样的人才缺口还不包括许多与其相关的其他行业的人才,比如游戏中角色人物的玩具制作、广告等相关行业的人才等,企业管理人员平均月收入在7500元以上,游戏开发、设计人员平均月收入在15000元以上,游戏制作人员平均月收入在9000元以上。
游戏产业已成为经济增长中的重要部分,而我国的人才缺口特别大,这与游戏产业的飞速增长明显不符。
1.2研究内容
1、学习和使用基于C++的编程和基于EasyX的图像处理操作。
包括:
通过载入图像背景绘制图形模拟选人的人机交互操作;通过图像的绘制与覆盖,实现人物技能的设置。
2、学习和使用声音特效的加载和播放。
包括:
游戏运行是用report重复播放实现背景音乐的加载;用户操作时通过角色动作函数配合播放特效音乐,产生攻击音效的效果。
3、人物技能的设计与实现,通过图形的加载和覆盖、音效的配合播放、对方角色的血量减少实现人物攻击技能的实现。
4、获取玩家的输入配合相应的人物技能实现完整的人机交互,完成玩家对游戏角色的控制。
1.3组织结构
第一部分是前言,叙述了游戏开的研究背景及国内外的研究现状,接着叙述了本论文的研究内容。
第二部分是游戏设计的构成与特性,简要叙述了游戏的构成要素以及交互性、开放性、虚拟现实性的游戏特点。
第三部分是基于EasyX的格斗游戏设计与开发,对开发工具进行了说明,从软件工程的角度,对游戏开发进行了较为详尽的叙述,以及总体设计和详细设计,这是论文的重点,并对部分主要代码进行了说明。
也对各类之间的结构进行了说明,并对各类的实现作了简单的介绍,最后是结论部分,对整个毕业设计的心得体会作了总结。
2游戏设计的构成与特性
2.1游戏的构成要素
说到游戏,大家会有各种各样的想法,那么什么是电子游戏呢?
它与传统的游戏有什么不同呢?
电子游戏是随着计算机技术的出现及快速发展而出现的,它是借助编程语言来实现的,以此来模拟一个虚拟的世界,比较流行的有C、C++、Java。
一个大型的游戏开发会经历比较长的周期,包括策划,即游戏类型的设定和游戏情节的编排;原画设计,包括角色模型、动作等,一般一个动作的完成要五、六帧,单是绘制这些帧就会耗费相当多的时间。
除此之外还有灯光、游戏引擎等。
由此可知,电子游戏主要是由两部分组成的,一是游戏艺术,包括游戏策划、原画设计、场景、角色模型设计等,二是游戏技术,比如游戏引擎的设计、游戏的运行速度以及所占用的系统资源等。
游戏艺术和游戏技术是不可分离的,一个好的游戏体验需要两者密切配合。
只有游戏艺术和游戏技术都做好,才能赢得众多玩家的青睐。
2.2电子游戏技术
电子游戏的艺术需要内在的技术支撑,即需要游戏技术支持。
电子游戏通过各种硬件设备、编程语言和游戏引擎等技术的支持,创造出一个虚拟的世界,让玩家在游戏中娱乐,这表现出电子游戏所具有的游戏性、娱乐性。
良好的游戏设计会引人入胜,给玩家视觉、听觉等上的享受。
电子游戏是建立在计算机硬件技术之上的,通过程序语言如:
汇编语言、C语言、C++语言地编写以呈现游戏的效果。
而程序语言是解决某个问题或是想达到某个目标用计算机语言或是借助其他语言而编写的若干指令序列的集合。
每一种程序语言有自己的特点,应用范围也不尽相同,有面向过程的,如C语言;随着软件规模的扩大,逐渐出现了面向对象的编程语言,如C++、Java等。
这些语言是为实现预期目的而进行操作的一系列语句和指令。
在程序中要定义变量、类和各种函数,这些是和现实世界中的事物或动作相对应的。
“类”、“变量”对应事物的属性,比如桌子有长、宽、高或是游戏中角色的名字、场景的颜色等。
程序语言是游戏制作的工具,是基本条件,把游戏中的事物和角色联系到一起,按照一定的逻辑表现某种效果,玩家可以通过一定的外部设备指挥游戏的角色按照自己的意愿行动,来体验游戏所带来的乐趣。
比如现在非常流行的游戏《英雄联盟》,玩家就是通过键盘和鼠标控制游戏的。
2.3游戏的特性
2.3.1交互性
在虚拟的游戏环境中,玩家通过传感装置(如鼠标、键盘等)对游戏直接进行操作,实时获得游戏的体验信息(如语音、特效、视觉等)。
简单理解就是当我们通过传感设备和内部反馈回路的系统配置,玩家和虚拟环境之间产生交互作用,通过反馈我们得到相应的图片和互动。
每个人都是通过电子游戏互动平台,开展与其他玩家在虚拟环境中的交互,如格斗、交流、协作等,同时在显示器上显示实时信息。
电子游戏技术使人机交互,人机交互成为可能,每种艺术形式都是一种情感的交流和体验,传统艺术的限于技术条件的束缚,交换的形式是单方面的。
那些艺术家把自己的思想,观念、感受灌输给读者,读者则是被性的接受,是单方向的,艺术家主宰了我们。
电子游戏技术创建了一个庞大和复杂虚拟世界,在这个虚拟的世界中我们可以扮演各种角色,按照自己的意愿与想法去完成任何事情,这种交互形式是有选择性的,我们可以选择做什么,也可以放弃些什么。
在这虚拟的环境中我们可以打开自己的情感世界,可以做一些在现实世界中不能做的事情。
比如在电影、文学作品中我们恨透了某个坏人,但是我们不能参与其中,只能暗暗地诅咒这个坏人,我们是不能做任何改变的。
游戏也具有故事情节,也有善与恶之分,如果我们恨透了某一个坏蛋,那么游戏玩家可以选择某个角色痛打这个恶人,当然这是在你虚拟人物能力达到范围之内。
电子游戏中的PK模式是很多人沉迷热爱的,这种PK机制激发了游戏玩家潜意识的竞争力,为了炫耀自己的技术或者游戏操作的能力以及角色的装备属性等等,有目的与对手进行PK。
这些交互形式其实在完善人对于艺术的追求,也就是在完善电子游戏艺术。
2.3.2开放性
开放性是计算机网络最本质的特征,在计算机网络中大家畅所欲言,无拘无束,尽情地表达着自己的观点。
游戏的开放性,可以把世界各地的游戏玩家紧密联系起来。
在一个游戏中,你可能会遇到各种人,不同地区,不同国家,不同信仰的人聚在一起,共同体验游戏所带来的乐趣。
2.3.3虚拟现实性
电子游戏中的虚拟实现性是指在游戏的世界是虚拟的,在现实中不存在的。
电子游戏把我们带入到虚拟的世界中,在这个世界中有他们的规则、故事,而这个世界是不存在的。
比如《英雄联盟》故事描述的是在符文之地-瓦罗然无止境的战争和纷争导致魔法滥用,军队用法术和符文武装自己,英雄们打造出大部分魔法物品率领部队彼此厮杀,因而出现了很多英雄,这些都是虚无缥缈的东西,现实世界中是不存在的。
而通过电子游戏技术把整个《英雄联盟》这款游戏的世界观完全的构架起来。
如果这是一本书那么可能每个人的银河都是不一样的,而作为一个游戏创建出这样的世界观让你可以直视它,这是一件很伟大的工程。
电子游戏技术把人的艺术观念创建、展示出来。
这个过程在完善人的艺术追求,那么我们也可以认为电子游戏技术在完善电子游戏艺术。
3基于EasyX的格斗游戏设计与开发
3.1需求分析
3.1.1功能分析
本论文开发的游戏是基于经典游戏《拳皇》思想设计的的游戏实例。
游戏的具体功能可以分解为以下几个模块:
1.进度条功能:
在进行游戏是显示进度条,进度条包括自己的生命值和敌人的数量。
2.主角设计:
游戏中由玩家控制的角色。
游戏模式分为单人模式和双人模式两种。
单人模式由W、A、S、D、J、K键进行控制,其中W、A、S、D控制前后左右移动,J、K控制跳跃和技由能释放;双人模式由W、A、S、D、J、K和方向键以及数字键1、2进行控制。
当角色吃到鸡腿后会增加生命值,吃到子弹后可以发射子弹等。
3.怪物设计:
游戏中设计了不同的敌人类型,以及终极boss,不同的敌人对角色的伤害不同,并且不同类型的敌人出现的时间和数量也不同。
游戏会随着关卡的升高而增加敌人的数量。
4.地图设计:
地图设计就是加载一些简单明快图片,使游戏的体验效果更好一些。
5.声音功能:
游戏运行后会加载背景音乐,选择角色后会加载游戏中的音乐。
另外,游戏中还增加了泡泡语效果,就是把敌人击杀后,角色头像旁边会出现一些字。
3.1.2性能需求
本游戏对计算机的要求很低,WindowsXP及以上的版本都可以运行。
3.2游戏中使用的相关技术
1.C++编程。
C++语言是面向对象的编程语言,与面向过程的语言不同,用C++编写程序是从现实世界的角度出发,从现实中抽象出事物的共性,作为基类,再根据事物各自的特点,从基类中派生出具体事物的类。
这对编写大型的程序非常便利,实现了代码的重用,也易于程序的维护。
2.EasyX的图像处理操作。
EasyX LibraryforC++是针对VC的一套绘图库,接口简单易用,用起来很像TC的graphics.h绘图。
EasyX绘图库支持VisualC++6.0/2010/2013,基于Windows图形编程,是将Windows下的复杂图形编程过程进行封装,将Windows下的编程过程隐藏起来,给用户提供一个简单熟悉的接口。
用户对于图形库中函数的调用,最终都会由Windows的底层API实现。
对于初学编程并且想要绘图的人来说,选择EasyX的绘图库是非常合适不过的了。
利用EasyX可以熟练掌握编程,尤其是面向对象,培养编写程序的热情与兴趣。
在对这个库有了较为熟练的运用之后,再学Windows编程,OpenGL,MFC等等,会感觉比较轻松。
3.声音特效的加载和播放。
包括:
游戏运行是用report重复播放实现背景音乐的加载;用户操作时通过角色动作函数配合播放特效音乐,产生攻击音效的效果。
4.人物技能的设计与实现,通过图形的加载和覆盖、音效的配合播放、对方角色的血量减少实现人物攻击技能的实现。
3.3总体设计
1.主界面:
包括选择单人模式和双人模式。
2.单人模式:
人和计算机对打。
3.双人模式:
人和人对打。
3.4详细设计
1.初始化图形系统。
调用函数 initgraph() 。
2.加载背景音乐。
调用函数mciSendString()。
3.初始化一些必要数据,如加载地图等信息。
通过函数Init()实现。
4.玩家选择相应的模式,并且根据玩家选择的角色new相应的派生类,并确定玩家数量。
5.创建玩家选取的角色。
6.玩家进行游戏。
7.退出游戏
3.5主要类的架构
程序有3个核心类,其他类都是从这3个类派生来的。
3.5.1玩家的类
3.5.2敌人的类
3.5.3终极boss的类
3.6主要代码实现
3.6.1游戏的启动界面
程序运行时首先调用initgraph()函数初始化图形系统。
本程序是调用initgraph(500,450),生成一个宽为500像素,高为450像素的图形系统。
利用如下的语句加载背景音乐,并且重复播放:
mciSendString("open./res/Sounds/选人.mp3aliasxuan",NULL,0,NULL);
mciSendString("playxuanrepeat",NULL,0,NULL);
通过调用语句loadimage(NULL,"./res/Images/w1.jpg",500,450);加载欢迎界面的图片,效果如图3.6.1所示。
图3.6.1游戏的启动界面
此时可以选择单人模式或是双人模式进行游戏,通过调用Dispatch_role();函数实现选人模式,是选择单人模式还是双人模式,选择单人模式为例,如图3.6.2所示。
图3.6.2单人模式
如果选择双人模式,需要数字键盘才能控制角色2,用笔记本电脑的键盘无法进行双人游戏模式,需要另外连上键盘才可以。
选择双人模式,如图3.6.3所示。
图3.6.3双人模式
本游戏一共设置了3个角色,分别是Kady、Heye和Jack,玩家可以选择不同的人物进行游戏,当然,如果选择这3个人物之外的角色,程序会提醒您“该玩家还没创建出来”。
3.6.2开始游戏
选择不同的模式,生成的敌人数量也不同,单人模式生成的敌人数量少,双人模式生成的敌人数量多。
根据选择的模式加载不同的界面,以单人模式为例,进入单人模式后,玩家可以通过W、A、S、D控制人物移动,J控制技能施放,K控制跳跃。
J和K一起施放会施放大招,单人模式的开始界面如图3.6.4所示。
图3.6.4单人模式游戏开始界面
进入单人模式后通过执行以下语句加载一些效果图:
loadimage(&PLAYER:
:
light[0],"./res/Images/00.jpg",32,32);
loadimage(&PLAYER:
:
light[1],"./res/Images/01.jpg",32,32);
IMAGEimg;
loadimage(&img,"./res/Images/effect.jpg",600,1000);
SetWorkingImage(&img);
for(i=0;i<2;i++)
{
for(x=0;x<6;x++)
{
getimage(&PLAYER:
:
blood[1][x][i],x*80,i*80,80,80)
getimage(&PLAYER:
:
blood[0][x][i],x*80,160+i*80,80,80);
if(x<3)//依次为:
小刀、飞镖、锤子(0-1-2)
getimage(&WEAPON:
:
weapon[x][i],i*48,576+x*48,48,48);
}
getimage(&PLAYER:
:
light[i],i*32,400,32,32);
getimage(&OTHER:
:
lift_up_down[1],0,432,344,144);
getimage(&FOOD:
:
img[i],i*80,720,80,80);//鸡腿
}
SetWorkingImage();
然后按W、A、S、D可控制人物移动,按J、K可控制人物攻击和跳跃:
if(GetAsyncKeyState('A')&0x8000&&Player[0].bol[0])
{
Player[0].dir=LEFT;
f[0]=&Role:
:
Walk;
}
if(GetAsyncKeyState('D')&0x8000&&Player[0].bol[1])
{
Player[0].dir=RIGHT;
f[0]=&Role:
:
Walk;
}
if(GetAsyncKeyState('W')&0x8000&&Player[0].bol[2])
{
if(GetAsyncKeyState('A')&0x8000&&Player[0].bol[0])
Player[0].dir=L_U;
elseif(GetAsyncKeyState('D')&0x8000&&Player[0].bol[1])
Player[0].dir=R_U;
else
Player[0].dir=UP;
f[0]=&Role:
:
Walk;
}
if(GetAsyncKeyState('S')&0x8000&&Player[0].bol[3])
{
if(GetAsyncKeyState('A')&0x8000&&Player[0].bol[0])
Player[0].dir=L_D;
elseif(GetAsyncKeyState('D')&0x8000&&Player[0].bol[1])
Player[0].dir=R_D;
else
Player[0].dir=DOWN;
f[0]=&Role:
:
Walk;
}
if(GetAsyncKeyState('J')&0x8000&&Player[0].bol[4])
f[0]=&Role:
:
Attack;
if(GetAsyncKeyState('K')&0x8000&&Player[0].bol[5])
f[0]=&Role:
:
Jump;
if
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 C+ 语言 编程 格斗游戏 毕业设计 正文