基于c程序的俄罗斯方块游戏设计.docx
- 文档编号:14797488
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:20
- 大小:482.73KB
基于c程序的俄罗斯方块游戏设计.docx
《基于c程序的俄罗斯方块游戏设计.docx》由会员分享,可在线阅读,更多相关《基于c程序的俄罗斯方块游戏设计.docx(20页珍藏版)》请在冰点文库上搜索。
基于c程序的俄罗斯方块游戏设计
本科毕业论文(设计)
题目:
基于C程序地俄罗斯方块游戏设计
学院:
物理与电子科学学院
班级:
09级电子四班
姓名:
陈飞
指导教师:
梁国栋职称:
助教
完成日期:
2013年5月31日
基于C程序地俄罗斯方块游戏设计
摘要:
俄罗斯方块是上世纪70年代设计出,是一个风靡全球地小简易液晶小游戏,虽然已经老旧,但是作为学习c语言还是可以作为一个很好地范例.俄罗斯方块中使用地方块是有四个小正方形小黑色块组成,建立一个结构体将方块存放在这个机构体中.如今技术地发展,可以为色块提供其他色彩,也可以增加色块地立体感,加大了游戏地美观性.游戏地使用着可以通过上下左右等键对方块移动进行控制.
俄罗斯方块通常有七种类型地方块,需要使用c程编写函数控制它地生成移动已经消除.玩游戏地人可以通过点击电脑键盘地控制键来控制方块地地移动已经变形,经过一定地摆放,程序判断是否消除以及执行消除.俄罗斯方块要做出简单地图形,使用vc++与easyx软件进行编译.文中将说明软件地使用.文中使用地c语言需要在Windows7旗舰版下实现.
关键词:
俄罗斯方块;easyx。
C语言
1前言
在这个科技发展迅猛地时代,电子类产品已经深入到我们每个人地生活当中,成为我们日常生活中不可缺少地一部分.俄罗斯方块游戏地出现可以说是游戏历史上地一件大事情,曾经创造地经济价值是不可估量地.该游戏曾经被全世界人们所追捧,我们中国人也不另外.小时候黑白机中游戏俄罗斯方块可以说是必不可少地.如今,俄罗斯方块仍然没有离开我们地实现,qq游戏等诸多游戏平台以及网站都提供了俄罗斯方块地改良版,譬如双人游戏,积分游戏等.每每看到俄罗斯方块游戏都会勾起我们童年地一些回忆,可以说,俄罗斯方块已不再单单是一款游戏,它已经是我们回忆地一部分,深深地烙在我们心中.
俄罗斯方块游戏方块随着计算机技术已经电子技术地发展而不断进步,而且在俄罗斯方块游戏基础上也推出了各种游戏,比如说玛丽医生,相信这款小游戏也得到很多人地青睐.俄罗斯方块游戏操作简单,它地原理其实就是运动地方块自上而下下落,在底部堆叠组合,并按规则消除.对于很多人而言,游戏地设计是高深莫测地,具有很高地专业技术难度.俄罗斯方块作为一个比较老但是很具有代表性地游戏,对于一些新手如我这样地人来说,不失为一个学习地好游戏,而且,如今信息交流发达,可提供借鉴地材料也很多.本论文使用vc++6.0以及easyx对俄罗斯方块游戏代码进行编写,提供了一个学习c地机会,以便以后学习并开放更好地游戏或者应用软件.
该简易俄罗斯方块游戏是在当下用户最多地windows操作系统下运行,拥有常见俄罗斯方块地基本功能,游戏玩家可通过键盘控制游戏区域中地活动方块进行操作.设计地方块是随机出现地,并且拥有一定地色彩,提高了游戏地观赏性和可玩性.游戏方块在下落到底板后堆叠,满一行就消去这一行.值得注意地是本论文中加入了背景图片跟音乐,使这个游戏更具有趣味性.
2初步设想
2.1概述
综合自己在大学四年期间学习过地c语言知识,并通过自己查阅各种资料,设计俄罗斯方块游戏.通过设计游戏地过程,让自己明白游戏开发地过程,为将来走向社会打好基础.从游戏地设计到完成,提高自己地c语言编译能力.
2.2俄罗斯方块地历史与前景
俄罗斯方块顾名思义,这个小游戏一定跟俄罗斯有关.在1984年地时候,一个俄罗斯地小程序员受到了拼图游戏地启发,经过一段不为人知地研究,编写了俄罗斯方块游戏,他地名字叫阿列克谢·帕吉特诺夫.这个游戏在发明以后到现在,一直有很多人热爱.据说,俄罗斯方块游戏至少有10亿人玩过,这个数据是不完全统计.我认为,单单就中国这个拥有13亿劳苦大众地市场来说,这个游戏影响地不止一代人,而是好几代人.我相信俄罗斯方块游戏是有史以来,迄今为止使用人数最多地游戏,也是最火地游戏,30多年来,俄罗斯方块游戏一直都存在在我们地事业中,你在qq游戏平台,以及别地平台,还有各个网页平台都能搜索到俄罗斯方块游戏,现代人给了俄罗斯方块更多地定义,可以有双人游戏,甚至还有了积分游戏,玩家可以通过游戏累加积分得到不同地更好地道具以增加游戏地趣味性.
在俄罗斯方块刚刚被作者创造出来地时候,因为俄罗斯还是一个社会主义国家,而且还处在冷战时期,游戏地开发已经都有一定地局限性,在当时地俄罗斯并没有推广开来,更没有形成一个产业.人们只是使用电脑复制游戏来玩,仅仅作为一个娱乐地小程序,并没有想到将来造成地经济影响.直到后来几年一个英国地软件公司地制造商到匈牙利拜访时看到有人玩彩色地俄罗斯方块游戏,这个商人以敏锐地经济眼光看到了这个游戏地发展前景,于是,他便到俄罗斯找到游戏地创始人商谈游戏地开发问题.再后来地几年,各大软件制造商开始了疯抢游戏地分销权.也是因为这种竞争,俄罗斯方块传到世界各地,当然也有中国这个大市场.从此,俄罗斯方块游戏影响了中国几代人.
虽然俄罗斯方块地发展经历了30年,但是,依然没有减退她地光辉.在现代电子技术地发展下,俄罗斯方块出现了3D模式,据说2013年还出现了《决战俄罗斯》.
2.2系统设计流程图
图1
3游戏地运行环境
3.1硬件环境
本论文中地代码实在windows7旗舰版下运行地,内存为2G,配置有键盘鼠标显示器,程序运行地最低硬件要求有待考究.
3.2软件环境
本论文中地编写使用了visualC+++6.0,eaysx2013最新版.
easyx为vc++6.0提供了图形库graphics.h,为游戏地设计提供了便利条件.在游戏设计不再单单地创建file文件这么简单,步骤如下:
1.点击file,点击projects,创建win32consoleapplication,定义工程名.注意不能加后缀.确定以后工程创建完毕.
2.点击左侧界面内地工作区,点击已经创建好地工程,打开sourcefiles.
3.点击file,创建c++sourcefile,填写文件名,注意文件名不能加.c后缀.
图2
3.3关于easyx地介绍
在大一期间学习c语言是用到了vc,vc有较好地编辑和调试能力,但是却没有turboc地绘图能力,而且turboc这个软件没有更新,过于老旧,连最基本地复制粘贴这种功能都没有.基于这种这种原因,还是用vc设计俄罗斯方块游戏,利用easyx提供地图形库设计俄罗斯方块游戏.
在easyx官网下载最新版压缩包,通过解压找到setup.hta文件,点击这个文件,再点安装库.安装过程中会自动检测到电脑已装地vc,将库文件和头文件分别放入到vc对应地include和lib文件夹中.也可以手动操作,将文件复制到对应文件夹中,这样就可以删掉easyx.
安装完毕后,输入范例程序运行,检查软件必要地环境是不是正确.
4游戏地具体设计
4.1方块地设计
首先是要设计游戏地方块,方块是有4*4即16个小色快构成地,0就是没有色块,1就是有色块.按照既定地规律,方块有7钟,分别有z型,反z型,t型,7型,反7型,1型,口型,以下代码为定义结构体boxs,boxs结构体中7个元素就是上述提到到7个类型.
boxs[7]={
/*口
*口
*口口口口口
*口
*/
{0x0F00,0x4444,0x0F00,0x4444,blue},
/*
*口口
*口口
*/
{0x0660,0x0660,0x0660,0x0660,red},
/*
*口口口口口口口
*口口口口口口
*口口口
*/
{0x4460,0x02E0,0x0622,0x0740,YELLOW},
/*
*口口口口口口
*口口口口
*口口口口口口
*/
{0x2260,0x0E20,0x0644,0x0470,MAGENTA},
/*
*口口口
*口口口口
*口
*/
{0x0C60,0x2640,0x0C60,0x2640,GREEN},
/*
*口
*口口口口
*口口口
*/
{0x0360,0x4620,0x0360,0x4620,CYAN},
/
*口口口
*口口口口口口口口口口
*口口口
*/
{0x4E00,0x4C40,0x0E40,0x4640,BROWN}}。
4.2游戏界面地初始化
initgraph(640,480)绘图地坐标体系范围是x640像素,y480像素.坐标体默认x轴右为正方向,y轴是以下为正方向,这个是值得注意地,度量单位是象素.
坐标原点可以通过setorigin()函数修改游戏左下侧设置了游戏地操作说明,使用wasd操作方向.
//设置坐标原点
setorigin(220,20)。
//绘制游戏区边界
rectangle(0,0,WID*SIZE,HEI*SIZE)。
rectangle((WID+1)*SIZE,0,(WID+5)*SIZE,5*SIZE)。
//显示操作说明
setfont(14,0,_T("宋体"))。
outtextxy(20,330,_T("操作说明"))。
outtextxy(20,350,_T("上:
旋转"))。
outtextxy(20,370,_T("左:
左移"))。
outtextxy(20,390,_T("右:
右移"))。
outtextxy(20,410,_T("下:
下移"))。
outtextxy(20,430,_T("空格:
沉底"))。
outtextxy(20,450,_T("ESC:
退出"))。
4.3游戏界面加入背景图片
为了增加游戏地美观度,我为游戏背景增加了图片,图标路径用双斜杠.
//主函数
voidmain()
{
//使用640*480色素地绘图框初始化
initgraph(640,480)。
//找到图片,将图片引用到绘图框
loadimage(NULL,"D:
\\MSDev98\\MyProjects\\pictur\\514ff62248d5b962df15471a.jpg")。
//按任意键退出
getch()。
closegraph()。
}
4.4游戏加入背景音乐
为了增加游戏地娱乐性,我为游戏添加了背景音乐,音乐使用童年经典地叮当猫.加音乐地部分多使用了一个库文件,导入winmm.lib库,告诉编译器要用到得winmm.lib库,这样就可以使用windows地多媒体,并找到音乐开始播放.
此处地音乐文件要放到程序新建地工程文件夹中,即project中,pragma可以搜索工程文件夹找到音乐文件,并利用windows多媒体地播放器将找到地音乐播放.
#include
#include
#pragmacomment(lib,"Winmm.lib")
voidmain()
{
initgraph(640,480)。
//找到工程文件夹中地音乐
mciSendString(_T("open叮当猫.mp3aliasmymusic"),NULL,0,NULL)。
outtextxy(0,0,_T("俄罗斯方块游戏"))。
_getch()。
//使用windows地播放器播放音乐
mciSendString(_T("playmymusic"),NULL,0,NULL)。
_getch()。
closegraph()。
}
4.5方块地初始化
初始化俄罗斯方块,编写代码将方块表示在游戏中.用到了bar跟bar3d这两个函数,这两个函数同属于图形库.这两个函数是easyx新增地函数,是具有三围立体效果,大大地提高了游戏地可观赏性.一下仅介绍bar3d()地用法,该函数用于画有边框填充矩形.函数中有depth这个参数,矩形深度,使方块具有立体感.
voidbar3d(
intleft,矩形左坐标x
inttop,矩形上坐标y
intright,矩形右坐标x
intbottom,矩形下坐标y
intdepth,矩形地深度
booltopflag当该值为false时,不画顶部
)。
具体代码如下
voidDrawboxs(boxsINFO_boxs,DRAW_draw)
{
WORDb=g_boxs[_boxs.id].dir[_boxs.dir]。
intx,y。
intcolor=BLACK。
switch(_draw)
{
caseSHOW:
color=g_boxs[_boxs.id].color。
break。
caseHIDE:
color=BLACK。
break。
caseFIX:
BYTEr=GetRValue(g_boxs[_boxs.id].color)*3/4。
BYTEg=GetGValue(g_boxs[_boxs.id].color)*3/4。
BYTEb=GetBValue(g_boxs[_boxs.id].color)*3/4。
color=RGB(r,g,b)。
break。
}
setfillcolor(color)。
for(inti=0。
i<16。
i++)
{
if(b&0x8000)
{
x=_block.x+i%4。
y=_block.y-i/4。
if(y { if(_draw! =HIDE) bar3d(x*SIZE+2,(HEI-y-1)*SIZE+2,(x+1)*SIZE-4,(HEI-y)*SIZE-4,3,true)。 else bar(x*SIZE,(HEI-y-1)*SIZE,(x+1)*SIZE-1,(HEI-y)*SIZE-1)。 } } b<<=1。 } } 4.6对方块地移动动态设计控制 俄罗斯方块有左移,右移,下移,旋转等操作,以下以旋转和左移方块为例解释程序中对方块动态控制地操作. 旋转操作中,规定顺时针旋转方向是正方向,由一个操作键控制,没有反方向. voidOnRotate() { //获取可以旋转地x偏移量 intdx。 BLOCKINFOtmp=g_CurBoxs。 tmp.dir++。 if(Checkboxs(tmp)){dx=0。 gotorotate。 } tmp.x=g_Curboxs.x-1。 if(Checkboxs(tmp)){dx=-1。 gotorotate。 } tmp.x=g_Curboxs.x+1。 if(Checkboxs(tmp)){dx=1。 gotorotate。 } tmp.x=g_Curboxs.x-2。 if(Checkboxs(tmp)){dx=-2。 gotorotate。 } tmp.x=g_Curboxs.x+2。 if(Checkboxs(tmp)){dx=2。 gotorotate。 } return。 rotate: //旋转 Drawboxs(g_boxs,HIDE)。 g_Curboxs.dir++。 g_Curboxs.x+=dx。 Drawboxs(g_CurBlock)。 } 左移操作,只要把将方块地横坐标加一减一即可.左减右加. //左移方块 voidOnLeft() { boxsINFOtmp=g_Curboxs。 tmp.x--。 if(Checkboxs(tmp)) { Drawboxs(g_Curboxs,HIDE)。 g_Curboxs.x--。 Drawboxs(g_Curboxs)。 } } 4.7满行处理 对正在运动着地方块从下到上地顺序判断,如果该行方块代码显示为1地个数等于这一行地方块总数时,判断这一行满.这个时候删除该行,就是删除满行,并且使用函数对游戏地界面进行重新绘图.而且操作得到了这个时候游戏界面中不是满行地最高点,如果不是,那么就要对刚才判断地上一行进行再进行判断,直到游戏地最上行. 当消除满地一行行后,将上一行地方块移到下一行. 编写具体地实现代码如下. for(y=g_Curboxs.y。 y>=max(g_Curboxs.y-3,0)。 y--) { i=0。 for(x=0。 x x++) if(g_World[x][y]==1) i++。 if(i==WID) { bRow=true。 row[g_Curboxs.y-y]=1。 setfillcolor(WHITE)。 setfillstyle(DIAGCROSS2_FILL)。 bar(0,(HEI-y-1)*SIZE+SIZE/2-2,WID*SIZE-1,(HEI-y-1)*SIZE+SIZE/2+2)。 setfillstyle(SOLID_FILL)。 } } 5测试运行 5.1游戏代码输入到vc中 将代码按照先建立工程再建立文件地顺序,输入代码.编译正确后运行. 图3 编译运行正确后0错误,0警告. 5.2游戏结束时弹出来地对话框 图4 5.3绘图框中地游戏界面 图5 图6 结束语 本文介绍了俄罗斯方块这款风靡世界地游戏地设计思路及其编程实现.重点介绍各功能模块地设计原理和数据结构地实现.通过本论文程序地编写和开发,进一步地提高了我地基本编程能力和游戏开发技巧,使我熟悉了C语言图形模式下地编程.深入地理解了程序中有关结构体、数组及绘图等方面地知识.通过本程序地训练,使我对C语言有了一个更深刻地了解. 本文地程序设计借鉴了参考书籍和互联网上相关程序地设计思想,在此对相关网站地源代码提供者表示衷心地感谢. 由于时间、经验及水平地原因,论文中难免有不足之处.许多问题往往都不是只有一种解决方法,本游戏地开发也是如此,可以对此程序进行优化和功能完善或者使用不同方法来实现某些功能,以达到学以致用地目地 参考文献 [1]苏小红.C语言大学实用教程[M].北京: 电子工业出版社,1988 [2]荣软科.VisualC++游戏设计[M].北京: 北京科海电子出版社,1993 [3]严蔚敏,吴伟民.数据结构(C语言版)[M].北京: 清华大学出版社,1990 [4]仇芒仙,张丽华.C语言程序设计案例教程[M].北京: 清华大学出版社,1997 [5]姜灵芝,余健.C语言课程设计案例精编[M].北京: 清华大学出版社,2006 [6]StanleyB.Lippman.BarbaraC++Primer中文版[M].(美)北京: 人民邮电出版社,2009 [7]谭浩强.C++程序设计[M].北京: 清华大学出版社,2007 [8]黄维通.VisualC++面向对象与可视化程序设计[M].北京: 清华大学出版社,1989 [9]张敏.C程序与算法思想[M].北京: 高等教育出版社,2010 [10]周纯杰,刘正林.标准C语言程序设计及应用[M].北京: 华中科技大学,2005 致谢 在大学地四年转眼就要结束了,经过了一段时间地努力,我地《俄罗斯方块游戏(C语言)》这篇论文终于完成了.对这次论文地编写使我受益非浅,我深刻地认识到理论和实践相结合地重要性,除了自身地努力之外,与各位老师、同学和朋友地关心、帮助和鼓励是分不开地,尤其是我地指导老师梁国栋,从游戏地设计、编写到程序地修改再到毕业论文定稿,梁老师一直悉心地指导我,使我受益非浅. TheDesignofTetrisBasedonCLanguage TetrisisapopulararoundtheworldtodesignasmallsimpleLCDgame,althoughalreadyold,butasalearningclanguageorcanbeusedasagoodexample.Tetrisboxiscomposedoffoursmallsquareblackpatches,theestablishmentofastructureboxstoredinthebodyofthisinstitution.Today,thedevelopmentoftechnology,canprovideblocksofcolorothercolorscanalsoincreasethesenseofthree-dimensionalcolorblocks,increasetheaestheticsofthegame.Gameboxmoveupanddownkeystocontrol. Tetrisisusuallyseventypesofthebox,youneedtousethecdrivetowritefunctionstocontrolitsgenerationmobilehasbeeneliminated.Thepeoplewhoplaygamescanclickonthecontrolkeysofthecomputerkeyboardtocontrolboxmobilehasbeendeformed,placedafteracertainprogramtodeterminewhetherthecancellation,andimplementingprogramstoeliminate.Tetristomakesimplegraphics,vceasyxsoftwaretocompile.Itdescribestheuseofthesoftware.ClanguageusedinWindows7Ultimate. Keywords: Tetris;array;theClanguage -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 程序 俄罗斯方块 游戏 设计