C语言编程小游戏毕业论文_第1页
C语言编程小游戏毕业论文_第2页
C语言编程小游戏毕业论文_第3页
C语言编程小游戏毕业论文_第4页
C语言编程小游戏毕业论文_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、. 密 级 公 开 本科生毕业学位论文基于C语言的小游戏设计俊佶(2009061322)指导教师:叶晶晶职 称:单 位:物理与电子科学系专 业 名 称:电子信息工程论文提交日期:2012年 月 日 论文辩论日期:2012年 月 日学位授予单位:黔南民族师学院辩论委员会主席:论 文 评 阅 人:20 年 月 日基于C语言的小游戏设计-十字消方块俊佶2009061322黔南民族师学院物理与电子科学系,都匀,558000摘要:本文研究的主要容是在具备C语言知识的前提下,如何应用C语言编写一个完整的小游戏,以到达让自身所学知识得到充分运用和发挥的目的。在此,通过使用C语言编写了一个名为十字消方块的新颖

2、小游戏,完整的展现了一个小游戏工程开发的全过程。编程过程中每一个编程技巧的运用都是对编程者逻辑思维能力和综合应用能力的考验。关键词:C语言;小游戏;十字消方块;工程开发;WIN-TCBased on the C language little game design-Cross away squareLi jun-ji2009061322Physicaland electronic Science, Qiannan Normal Collegefor Nationalities, Duyun558000, GuizhouAnstract:This paper studies the main

3、content is the C language knowledge with the premise of how to use C language to write a plete litter game,in order to achieve their owm knowledge for the purpose of fully use .Here ,througn the use of C language to write a calledcross away squarenocel litter game,plete showed a small game project d

4、evelopment process.In the process of programming every programming use the skills of programming is logical thinking anility and prehensive application anility test.Keywords:C;game;cross away square;development;WIN-TC1引 言游戏的设计与开发可以利用多种方法,java、C/C+、Flash、 VB等语言都可开发出不同类型的游戏软件。这些方法都有其优点,通常根据具体情况进展选择。在众

5、多语言和方法中,C语言兼具一般高级语言和低级语言优点,编写游戏程序具有非常鲜明特点。使用C语言编写游戏程序,可以接触到更为底层的编程知识,对于学习计算机语言有很大好处。C语言是bined Language组合语言的中英混合简称。是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用围广泛,具备很强的数据处

6、理能力。本着研究学习的心态,以C语言编写一个小游戏程序,深入到图形编程和文件应用的实际操作中,到达务实根底,挑战自我的目的。下面,我将一步步的带着大家看到十字消方块游戏开发的全过程。2.前期准备及需求分析2.1 游戏介绍十字消方块的灵感来自我闲暇时在3366小游戏见到的一款竞技类小游戏。顾名思义,这款小游戏是以方向键控制游戏标准放到适宜位置,在十字线区域能连接到两个或者两个以上纹理一样的方块就能消除得分。玩家在时间的限制下需要迅速找到可以消除的方块并准确消除,假设错误将扣除时间。看似简单,却有一定的难度。常玩这一类小游戏可以锻炼人的观察力、反响力和手眼协调能力,开发大脑潜能。十字消方块趣味性强

7、,老少皆宜,且同类游戏在各小游戏都很有人气,相信它同样能得到大家的喜爱。2.2编程语言C语言C语言兼有高级语言与低级语言的优点,具有强大的编程运算能力。首先,C是一种构造化语言,程序层次清晰,便于使用、维护以及调试;第二,C语言运算符和数据构造丰富,能用来实现各种复杂数据构造的运算;第三,程序书写形式自由、灵活方便,允许程序编写者有较大的发挥空间;第四,引入了指针概念,使程序效率更高;第五,C语言程序执行效率高,一般只比汇编程序生成的目标代码效率低1020%;另外,C语言还具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。总而言之,用C语言来编写一个小游戏绰绰有余,绝对

8、可以让编程者想要的任何游戏功能实现。2.3编译环境Win-TcWIN-TC是一个TC2 WINDOWS平台开发工具,由 TC256专题站与 唯C世界联合发布。该软件使用TC2为核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。而且在功能上也有它的独特特色例如语法加亮、C嵌汇编、自定义扩展库的支持等。2.3.1使用 Win-Tc的理由由于十字消方块 是用纯C语言编写, vc+有它自己的图形编译库,在游戏中用到的和这两个头文件在vc+中并不存在,故此该游戏的程序不能在vc+中编译完成。然而Turbo C 2.0是基于MS-DOS的,存在

9、诸如不支持鼠标操作、字体大小不能调整、文本复制步骤繁琐、必须另外启动UCDOS等中文环境才能支持中文输入输出等缺点,而这些缺陷于开发活动有着不少的影响。故此,相对来说WIN-TC无疑是最适合作为该游戏开发的编译软件。2.3.2Win-Tc的使用1在网络上下载WIN-TC编译软件,安装在电脑中后翻开。可看到如下运行画面:图1:WINTC运行画面2.点击文件,找到后缀为.c的游戏程序文件,点击选取后翻开。3.在软件运行画面的右上角,找到如下列图所示的两个按钮,依次点击,确定,可运行游戏程序。观察结果。图2:软件中的编译与执行按钮4.注意:当程序使用了头文件中库函数时,就需要bgi文件才能正常显示,

10、wintc中有提供,但是如果在图形界面初始化时没有注明其路径时,必须将bgi文件与工程文件放在同一目录下。2.4游戏需求分析1.工程描述要求用C语言开发一个游戏 十字消方块。游戏规则为: 按方向键移动光标至一个无方块位置,以该光标位置看,在一个十字形区域中,假设离光标位置最近的四个方块至少有其二相等,则可按SPACE键进展连线消除得分,一次性消除的方块越多得分越多。假设按键后不能消除为错误操作,将扣除游戏时间。时间完毕,游戏完毕。2.界面(1)start界面该界面用画图的方式对游戏方法及其规则进展了说明,按任意键后开场游戏。(2)游戏界面程序用一个初始化函数来初始化游戏界面,棋盘为15行,15

11、列,共有112块方块。上方为进度条,下方为游戏提示信息。(3)游戏完毕界面用户成功完成游戏或时间完毕后,在界面正中显示your sroce:*。*为游戏得分另外,用户在游戏过程中按ESC显示gameover!退出游戏。3.功能(1)游戏操作按方向键移动光标至适宜位置,按SPACE键进展连线消除得分。(2)游戏完毕共有3种完毕方式:时间完毕:当时间进度条走完时,游戏完毕,并显示得分。方块完毕:在所有方块均不能消除时,游戏完毕,并显示得分。强行完毕:按ESC完毕程序,并显示gameover!后退出。(3)进度条显示当前剩余时间自动获取系统时间,更新进度条时,设置为*个百分比,用背风光进展填充,以到

12、达减少时间的目的。4环境(1)硬件环境:处理器,存,磁盘,显示器(2)软件环境:必须使用 wintc或turbo c软件编译游戏3编程实现3.1重要的文件、函数和变量说明3.1.1文件graphics.h文件是tc中的图形库,游戏界面中的图形绘制都是利用这个头文件中所包含的函数来完成的。3.1.2函数介绍1.bioskey函数该函数是bios.h头文件中接口函数,函数的功能是在游戏过程中提取键值。2.initgraph函数和closegraph函数initgraph函数的功能是初始化图形系统。声明这个函数是使用graphics.h文件中画图函数的必要条件。而closegraph 函数的功能是关

13、闭图形系统3. outte*t*y函数该函数的功能是在屏幕上指定的位置输出一串字符。游戏中可见的提示信息均由这个函数来实现。4.setcolor函数该函数的功能是设置当前画笔的颜色,游戏界面绘制的图形输出的文字字符的颜色都是用这个函数来控制。它的参数color为不同值时表示不同的颜色,如下表所示:表1:color参数说明参数说明参数说明0BLACK 黑1BLUE 兰2GREEN 绿3CYAN 青4RED 红5MAGENTA 洋红6BROWN 棕7LIGHTGRAY 淡灰8DARKGRAY 深灰9LIGHTBLUE 淡兰10LIGHTGREEN 淡绿11LIGHTCYAN 淡青12LIGHTRE

14、D 淡红13LIGHTMAGENTA 淡洋红14YELLOW 黄15WHITE 白5.srand函数与random函数random函数是随机数发生器,功能是产生一个规定数以的随机数。它能帮助我在游戏中绘制出随机的游戏方块,实现游戏关卡的多样化。而srand函数是随机数发生器的初始化函数6. gettime该函数的功能是取得系统时间,由此设置出了游戏的时间系统。7.getch函数该函数的功能是从控制台无回显示地取一个字符。游戏程序需要在结尾加上这个函数,才能观看到运行结果。重要变量说明1.枚举类型变量KEYCODES它枚举了游戏所用到按键的物理地址,是游戏者与游戏之间联系的关键。 enum KE

15、YCODES K_ESC =0*011b,K_UP =0*4800,K_LEFT =0*4b00, K_DOWN =0*5000, K_RIGHT =0*4d00, K_SPACE =0*3920,;2.三维数组Board在绘制游戏界面的过程中,需要对界面上每一个坐标是否有游戏方块的情况做标记,于是就需要定义一个三维数组Board并在初始化游戏时赋值来到达这个目的。在 Board*y0中存放的值为0,则表示坐标(*,y)上没有方块。为1,则表示有方块。在 Board*y1中则存放了方块的键,表示了该方块的类型。该值在游戏用来判断游戏操作是否得分。3.构造体变量CELL变量CELL存储的是方块的

16、逻辑坐标,游戏初始化和进展中都常调用他。3.2主要功能实现主函数程序运行时,首先从main函数处开场游戏流程,流程中调用了几个自定义函数。按照先后顺序分别为:游戏提示画面函数start,游戏界面初始化函数InitGame,表示剩余时间的进度条初始化函数InitProgressBar,游戏进展函数PlayGame和完毕游戏QuitGame函数。建立起一个完整清晰的流程模式。主流程图下列图所示:Start开场InitGame();InitProgressBar();QuitGame();PlayGame();完毕 图3:main函数流程图游戏开场界面初始化在执行主函数main时,首先调用的是sta

17、rt函数。该函数在游戏开场前执行,对游戏规则进展了画图说明(相当于游戏帮助)。在start中,首先进展了图形系统的初始化,然后使用了setfillstyle函数为图形输出设置当前文本的属性,再使用outte*t*y函数和rectangle等函数分别在指定位置画出特定的字符和图案。游戏界面初始化start函数执行完毕后,将对游戏界面进展初始化,包括时间、游戏方块的初始化,而进度条初始化较为复杂,另定义一个InitProgressBar函数为其初始化。在InitGame函数中,先用memset函数对三位数组Board所代表的空间全部清零,防止原存空间的数据对其造成影响。而后又使用srand函数和r

18、andom函数取得随机数,使用该数作为种子为游戏绘制特定的方块。最后使用gettime函数提取了系统时间,并对游戏时间完成初始化。游戏进展1.PlayGame函数PlayGame函数(代码见附录)是整个游戏的最重要的局部,用户对游戏的操作和游戏时间的更新控制等都是在该函数中实现。整体可分为两个局部,时间控制局部和游戏执行局部。在函数执行过程中,当检测到一个按键且不为ESC时即开场计时,于此同时获取该键键值,进展相应游戏操作。进度条走完后,则显示游戏得分并完毕游戏。下列图为该函数的构造示意图: 图4:PlayGame函数的具体构造2.核心算法Decide函数的判断功能是游戏进展中的核心,可以说是

19、游戏规则的执行者。当游戏者把光标移动到正确位置并且按下SPACE空格键时,函数判断是否符合规则中指明的条件,符合则连线消除方块加分,不符合则扣除一定游戏时间。该局部算法对编程者的逻辑思考能力有很大的考验,需要考虑到游戏过程中可能出现的每一种情况并做出相应的动作。该算法示意图如下列图所示:返回PlayGame函数当按下SPACE键时计算focus处十字区域内的四个方块的位置和状态判断是否符合消除规则消除方块得分扣除游戏时间图5:Decide函数的主要构造1十字方向上四个方块的坐标的计算:观察该函数的流程图可以得知,要判断游戏者按下SPACE键后,是否符合得分规则,即光标上下左右四个方位上离光标最

20、近的四个方块是否至少有两个一样,就必须先找到这个四个方块的逻辑坐标。由附录中PlayGame函数的程序得知,光标即游戏程序中的focus的逻辑坐标是的,要找到这个四个方块的逻辑坐标,可以从的这个坐标着手。在程序中,focus的逻辑坐标储存在名为c1的构造体中,构造体的两个成员*和y就是它的逻辑坐标。而四个方向上的方块的坐标分别是wmin,c1-y、wma*,c1-y、c1-*,hminc1-*,hma*。故此,只要计算出wmin、wma*、hmin、hma*四个变量的值就可以到达目的。而下面的程序段就解决了这个问题。程序代码如下: /*-查找水平方向遇到两个方块的坐标-*/wmin=wma*=

21、c1-*;/*将focus点的横坐标赋值给wmin和wma*/ while(wmin=0)/*当向左移动并未到边界时*/ wmin-;/*wmin-,既继续向左搜索*/ if( Boardwminc1-y0!=0) /*如果该坐标上有方块,则跳出循环*/ break; while(wma*y0!=0)/*如果该坐标上有方块,则跳出循环*/ break; 同理,亦可找到垂直方向上两个方块的坐标。、2实现14种消除算法:得到这些方块的坐标后,就要将这些方块做比拟,检测这些方块是否符合得分逻辑。然而,在游戏程序的初始化函数InitGame中,就已经将这些坐标上的方块的属性标记在Board*y1中了,

22、我们可以通过其中的值来做判断它们是否是同一类型的方块。剩下的,就是分析清楚游戏可能出现的所有得分情况而后整理编程就可以了。假设从不同方向和同时消除不同数量的方块上分,共有14种情况。而只按同时消除的方块数量分则分为以下几类:1.四个方块中只有两个方块一样,其它两块不一样。从方向上再分,包含6种不同情况。2.四个方块中有两块一样,其它两块也一样。从方向上再分,包含2种情况。3.四个方块中有三个方块一样。从方向上再分,包含4种情况。4.四个方块都一样。只有一种情况。5.四个方块各不一样。只有一种情况。下面,就举当c1-*,hmin、c1-*,hma*、wmin,c1-y坐标处三个方块一样的一种情况

23、来说明算法思路。程序代码如下: if(hmin!=-1&Boardc1-*hmin1 = Boardc1-*hma*1&Boardc1-*hma*1=Boardwminc1-y1&Boardc1-*hmin1!= Boardwma*c1-y1)/*三个方块一样且在边界以*/ /*在focus与方块之间画线,延时后消除,使其呈现射击效果*/ DrawPath3(c1-*,c1-y,c1-*,hmin,c1-*,hma*,wmin,c1-y,LineColor); delay(6000); DrawPath3(c1-*,c1-y,c1-*,hmin,c1-*,hma*,wmin,c1-y,BkGn

24、dColor); EraseCell(wmin,c1-y);/*将一样的这三个方块消去*/ EraseCell(c1-*,hmin); EraseCell(c1-*,hma*); Boardc1-*hmin1 =0;/*清空三个坐标处的标记,防止对后续的游戏操作造 Boardc1-*hma*1 =0; 成影响*/ Boardc1-*hmin0 =0; Boardc1-*hma*0 =0; Boardwminc1-y1 =0; Boardwminc1-y0 =0; sroce+=40;/*游戏加分*/ return true; 同样,其余正确的情况也需要经过类似的过程,进展判断、画线、消除方块、

25、清坐标数据和游戏加分操作。错误的情况需要将游戏加分操作换为减时操作。当所有可能的情况都设置了处理方式后,该函数的工作就全部完成了。其它函数除了以上几个核心的函数以外,整个游戏的正确执行还需要其它一些自定义函数来完善,才能构成一个无缺的整体,从而正常运行。由于篇幅的原因,这些函数不再赘述。下面是程序还需要用到的自定义函数及其功能说明:InitProgressBar(); /*初始化进度条*/UpdateProgressBar(int percent);/*设置一个百分比,更新进度条 */DrawCell(int key,int *,int y,int color); /*在*,y处用指定颜色绘制

26、键为key的 方块*/EraseCell(int *,int y);/*消除该坐标点上的方块*/DrawBorderRect(CELL *c,int color);/*用制定颜色绘制focus即光标*/DrawGameOver(char *info,int sroce);/*在界面中心显示游戏得分 */GetKeyCode();/*取键值 */4完毕语在经过将近一个多月的时间之后,这一款小游戏终于初步完成了。通过这一个不太轻松的过程里,我知道了要完成一个简单的小游戏也是不简单的,并没有想象中的则容易完成。我是在大一时候开场学习C语言的,初时接触,就深深的喜欢上了这门课,语言程序就像是有生命般,

27、每一次运行,它都一丝不苟的完成你赋予的任务。假设是有错,你就得像一个医生一样对它进展检查、调试,然而我最喜欢这样的过程。作为一名电子信息工程专业的学生来说,C语言相对于其它语言来说更值得深究学习。因为在将来的工作和学习中就需要C语言来进展硬件编程。另外,C语言是学习计算机语言的根底,很好的掌握 C语言对于以后学习其它语言有着非常重要的作用。在编程的过程中,我学习到很多原来不知道的知识,对C语言这种构造化程序设计语言的理解和把握比以前有了很大的提高。过去学到的很多知识也到了相应的锻炼,真正成为了我自己的东西。但我也遇到很多原来没有发现过的问题。VC+何以不能编译带graphics文件的程序?如何

28、在编译图形程序时观看到结果?怎么用C语言产生一个随机数?如何调用系统时间?这些问题到现在已经得到解决。同样,我也还有一些依旧没有找到答案的问题。比方怎样改变C语言编译器产生的可执行文件的图标?那默认的白板图标真的很丑。如何做到在图形模式下动态显示时间?怎样让上一次的游戏数据保存起来,用来编程英雄榜?这些问题,现在我没有找到答案,但是我相信在不久的将来,我一定能使用C语言完成这些功能,让我的游戏、我的程序工程更加强大,更加完美。期间我查阅了很多资料和书籍,这些资料真的对我的帮助很大,其中很多功能的实现我都找到了相关的资料,让我省去了很多功夫,只需认真的理解资料中的编程构造便可以轻松的得到自己想要

29、的结果。但是,其中更多是靠着我自己去慢慢琢磨,通过一次一次的调试、修改、再调试、再修改,经过成百上千次调试过后,才最终成功的。整个过程中,Decide函数的编写是消耗我时间最多的地方,因为这个地方的编写完全没有找到一点资料来借鉴。虽然涉及的编程技巧不多,但却最考验我的逻辑思维能力,消除方块时一共有14种不同的情况,每一种情况都要考虑到。游戏界面上每一个点的坐标,尤其是边界坐标确实定,都很可能会让人晕头转向。现在十字消方块游戏已经可以正常的运行了。但是也肯定还存在很多问题,许多功能需要得到完善。直到现在,我在试玩游戏的过程中,都还会偶尔出现小bug,但我却无法确定是哪一行代码出了问题,还是算法有

30、漏洞。经过这段时间的学习,我深深的感觉到我所掌握的C语言知识都还只是冰山一角,博大精深 C语言,今后的学习中还需要多加努力才行。我相信,通过我的努力,要不了多少时间,现在遇到的这些问题都可以迎刃而解。我也相信,在不久的将来,我可以在这一片领域中站稳脚跟,享受编程过程中的无上乐趣。5.参考文献1彬彬,伟明.C语言开发实战宝典.清华大学,2011.12 谭浩强 著.C程序设计第三版. 清华大学,2005.73 荣钦科技.Visual C+ 游戏编程根底. 电子工业社, 2005.54 晓远 贾滇昆 郭庆民.Visual C+多媒体特效制作百例.中国电力,2001.5 5 美Andre Lamothe 著. Windows 游戏编程大师技巧.中国电力,2004.76 浦滨. C游戏编程从入门到精通.希望,2002.57 美赫伯特希尔特. C语言大全. 王子恢等译.电子工业2001.9. 8 郭大海.实用C语言编程.中国电力,2000.59 湘沪科技. C/C+函数库查询辞典(最新版).中国铁道,2007.7指导教师:叶晶晶讲师附录:PlayGame函数程序代码void PlayGame() int i,j,*,y,key,Ckey,percent; long curTime; struct time sysTime; focus.* = focus.y = 0;/*当前所处位置!

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论