2工学结合创新教程数据库结构(C语言版)第3章俄罗斯方块游戏的编制俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它看似简单但却变化 无穷,令人上瘾而且无数人进入游戏编程的世界都是从编写俄罗斯方块游戏开始的,因为 这既是一个检验RAD开发工具的好方法,也是检验一个人对开发语言、环境和基本数据结 构知识熟练程度的便捷途径3. 1程序概述3.1.1 游戏的功能俄罗斯方块是一款老少咸宜的游戏,它的基本功能就是要求玩家移动和旋转自己窗口内 落下的方块,方块在一行堆满后就可以消掉,如果方块堆积至窗口顶端,则游戏结束系统缺省设置使用右边的窗口,用光标操作,"一"左移一格;"一"右移一格;"T旋转方块;"Space"方块丢下(方块下落到底),用户还可以自定义习惯的按键来操作游戏3.1.2 游戏的预览游戏运行的主操作界面如图3-1所示图3-1主操作界面项目1图3-2操作设置界面项目3项目4项目5【开始级别】(缺省是1级),级别是1—10级,级别越高方块下落速度越快单击菜单栏中【控制】一【打开音乐]可以播放背景音乐,界面如图3-3所示图3-3打开背景音乐界面项口 6项目 7项目8项目9点击【设置】按钮出现一个对话框,可以设置游戏规则。
在游戏操作设置中可以进行键 盘设置,还可以进行环境设置,设置游戏的难度操作设置的界面如图3-2所示工学结合创新教程数据库结构(C语言版)3. 2. 1游戏实现方案屏幕上有一个x列丫层的区域,计算机自动产生多种不同类型的方块,并出现在区域的 最顶端:然后每过一个固定时间间隔向下落一层,玩家可以使用键盘控制方块向三个方向移 动和顺逆时针旋转90度不过前提是方块移动和旋转后的位置必须是空的当方块落到区域 底部或者另一方块之上将停止移动,然后新的方块会产生当新方块无处放置的时候游戏结 束3. 2. 2游戏逻辑设计首先是定义游戏相关的数据存储方法,分为两个主要的部分,一个是当前的方块,需要 保存位置、当前的旋转状态;另一个是屏幕区域的状态,这可以用一个二维数组来表示其次,分析得到按键的含义,做出响应:响应模块:“左”、“右”、“下”、“移动”和“旋转” 几个模块,负责改变当前方块的状态数据;画方块模块:位置移动后,把方块画到新的位置 之上;检查模块:在每次状态改变之前,对方块企图占用的区域加以检查如果无处可放, 则此次移动失败如果方块到底了,应该固定在当前位置,这可以调用前面的画方块模块实 现,同时再产生一个新的方块。
这样还需要写一个产生新方块的模块还有当每次方块到底 的时候,都需要检查一下是否有新的层排满了,如果有的话应该消层这就又需要写两个模 块,检查是否排满和消层产生新方块时也需要检查其产生的位置,如果这个位置已被占用, 则游戏结束,这需要调用前面的检查模块实现最后检查系统时间,规定过一个指定的时间间隔就调用一次方块下落模块3. 3游戏的详细设计及编码在游戏的概要设计中,己解决了实现该游戏需要的方案和设计问题本节将介绍系统的 详细设计在游戏的详细设计中,将确定如何具体的实现该游戏,从而在编码阶段可以把这 个描述直接翻译成用具体的程序语言书写的程序3. 3.1主界面设计编码主界面的作用就是显示本游戏所有的功能菜单项,提供游戏的显示界面在本界面中共 设计了 5种控件,通过这些控件玩家可以方便的控制游戏,各个控件的名称、作用和类型如 表3-1所示表3-1主界面的控件设计控件类型控件名称作用mainMenumenultem2退出menultem4操作控制项目1menultem6打开音乐menultem7帮助panelPanel 1显示游戏中当前的方块Panel2显示游戏中要出现的下1 一个方块LabelLabell显示手速Label2显示行数项目3Label3显示快数Label4显示级别ButtonButton 1开始Button3打开游戏设置界面Button4暂停项目4Windows media playeraxMediaPlayerl音乐播放器另外,在界面中还设置了一个TextBox控件。
在界面操作中,把焦点一直放置在这个控 件中,方便用户用键盘操作方游戏方块在游戏中需要保存用户自定义的一些设置,本游戏中把设置保存到setting.cob文件中,项目5 并在界面加载的时候调用主界面Load事件的代码如例程3-1所示,游戏设置保存代码如例 程3-2所示项口 6例程3-1主界面Load代码wdl tl miIm, SfHw.Cw141al> •>项目 7项目8If Led /.*=>!项目9勒金《l«Ua4 ■•ImHw. BeMiM4EdMM4.€ld3lralMi ■ d 2 «2 . «l “ IM. = i m3M> 1工学结合创新教程数据库结构(C语言版)< bfsCei wbMm W31 i•^Ke^aM ini^r&riipj4i4 ria. sieoAew^ 11・ J - m£ = * dewl" D ・■ —LW.Ibvtf 级别:"-M^.rU^Uwlj riHKMS>4 ria. Wui ■1 »bm例程3-2游戏设置保存代码UwSrHAfOCLrWJJirj.如w+Mil^M.Cw*-M^iM4rsrmr>ilM.l||MlClri3l 1w4Wi|,>i. ±1m.彳项目1JI 1 ■rUTcwl ,'O| avMfef.iiiMiadl dmd>i&±1mm4 *faua^M.€w.MlM«i4r-|kirsn*KrT>i 4k4 , ■ i wSbr^l - 4m , IKMb / O ■ a»H*I Cl回 Hkrf«>iHA,.111 LlClQ项目3KoroCeiDi项目4项目5I ••« 3 smMmmb ta ^w. bm4> i lw.S»wrei\\arMfal\*f>i项目6> e»M CvM|4iM w>■•■■■I •■1 SI leMU|W> i项目7【开始】按钮的事件设置label的显示文本、开始计时并设置时间间隔,并调用生成方块的函数。
主要代码如例程3・3所示项口 8例程3-3【开始】按钮事件代码项目9■ d»L^O・・ 4 4ev!*«rL「•#1■<>■项口 10|a*&4e 7 »L«IO «— —■如工学结合创新教程数据库结构(C语言版)■ — । I Hiri■ 块数:ri■ —L4.xi;”行数: ri■ AXlM.ltartf 级别:”+adr!LaA«wlj4 da. is.■ — — d31W*d»wl-D■ 〃方块生成的时间间隔4 da. | ■« mI ■4 da. ■Lridsl ■•fldh.|u42.3«lfl^feOi■ — Cw^foEUyO |//生成当前方块■ — Cw.4^«HUm|/o |/,生成下个方块■ - qty*.** - r、4ria.Iuwife931 e$|»i •>■»在【开始】按钮事件中调用了生成当前方块函数 和生成下个方块函数j-^y(>在这两个函数中定义了方块出现的位置、颜色,随h生成方块的形状,并调 用口•4类中iJy函数在相应位置显示这两个函数的代码如例程J-,所示例程 3-4 CreateBlock 和 CreateNextBlock 函数代码24 ^m«wi«auIm •wsju«l・ Oi4ris.i«v4SI»|«rt^Ml.rOTf4i » a^M «It//田•^Podi 414. *>11 m i edM iMe Nt/,一——1T■口 >>1项目1・M«Fr24 sImJ/i4■ritaHPwp 4 K •>■•edM^CedML L»w Cbmi iTAM彳M_ DiM iimS1 • i项目3项目4项目54 44、,> .项口 62M.一项目 7i -iWI »|«rt. ■taHPM. m!m> i项目8M 3 Cm eKdeey - J i «v4SI “ ,一 ^tas*”_ m1m» .项目9Cb^mU^vI 0 ■■Him —・■ItffM ■riB0*wp 4 1 L •> ।1 q i edw i项目1项目3项目4li44m,111dd»«4 wiIm,Igwl) « ■ da. .■■>( •. r«^■ Oi> (>■■ami. S«4I| 41m ■ Ki ria. —T■一 — — v4LaA«wl ♦ ria. —>< ■> ■■w. MJbjI * J wIj■a.StpiAOiMbm . * ■>项目5项口 6项目 7■■injkti/■ ■ a>金«y . j 3 也3」现, j ISI T «T. IHi ria. ■ «HSI «| «T•一 ^tav*w. iOi【设置】按钮打开游戏设置对话框,并使游戏暂停,代码如例程3-5所示。
例程3-5【设置】按钮事件代码项目9■ — — 1 :! 4aK^SN~M*(Lwl* D iM4d 1・>>4ria«|*iwlfa “Iha ■•■・»!■•■ ・ d -MX»kari,>・■ da. 4er*OTrL PMiaOi>【暂停】按钮使游戏暂停,代码如例程3・5所示例程3-5【暂停】按钮事件代码m4 soil. Sjwlei• Cw41fl|W •>IM -•Iml»i wl^haei・ — - a% Oi■ ris. 4ev*«vrL reeisOi菜单项■■■■■•响应打开音乐事件,并播放音乐,在该操作中必须首先要加入一个COM 组件Windows Media Player该事件的代码如例程3・6所示例程3-6打开音乐事件代码b.di0yMlf m4 wi1Ml • Cw 41a|W •>项目1〃■・ iisl I* *■文件加“》除”3 |li 14文件(*.3文件 । 除।」不仅件u 71*所有文件 ,右Q忤#.项目33. 3. 2游戏控制设置设计编码项目4本界面的作用就是设置本游戏中的操作键,使玩家更方便的玩游戏在本界面中共设计 了 4种控件,供用户设置,各个控件的名称、作用和类型如表3-2所示。
项目5控件类型作用textBox键盘设置comboBox级别设置checkbox界面样式设置button确定与取消表3-2控制设置界面的控件设计项口 6每个textBox控件响应键盘事件并接受键盘的输入值,代码如例程3-7所示例程3-7 textBox的键盘响应事件代码项目 7项目8■ — Cl t •, •> ■项目9一■4%,、SI ,,O = 14. IO>04ei・.l”^r・,K^C0 41a|n•>■ - Cl t . *r•. 2> ■writ 4OTi*evpl_Ke^*«^W^m4 mi1MlSfs4M.^hlM|.rMia.K«7Cw41fl|V •>■ ris. Cl 3 ,w*otpL •_ 3> ■[■(■He wdi w4 bmIm.SfHei.^blM|.rwB.K^Cwi4LBv9 •> <4 ria. €1 »i |,«bf •_ 4>iMu.farxl^=ntt«.fcr^l^=4» n = isu•.br=ib> II aKerU”48 «A .卬口“小|| 1・%工10:»一II1・bfUe>:% M: abr<4^ = in> || Hz••■•rUe^llD || 毗** abfU-:m> ||人”U・;2种 M,yU — ;222>>fafCel - IKMh / O i ■ ria. y^a m A KefM ♦ ・comboBox控件选择游戏等级,代码如例程3・7所示。
例程3-7 comboBox控件事件代码1-hb4e wdl pIeBwl.Se^rM311-41 ria. I elOTrL SelwM 31 *411项目1控件改变界面的显示模式,代码如例程3・8所示例程3-8 checkBox控件事件代码■au" wdi - e«^b«vC.CIClt.3 bmI— .EiIImi. •>:}—>项目3项目4从界面中得到输入值,并传递到参数,并在主界面中得到调用,代码如例程3・9所示例程3-9参数设置代码pili* wdi S«4t|41m■ CefaI*4 I ■>项目5项口 6项目 74 da.4 ria. «m I 31 11项目8项目9pllfe wdi CHI|«Mateat^al 4一一Irwl —,《•! — ・)ris. dbwIj3. 3. 3游戏方块设计编码在本部分中设计了方块的形状号、绘图控件、当前位置、上一次位置、左边界、下边界、 当前块颜色,并定义了方块移动的函数,代码如例程A*所示例程370方块设计代码////// 的摘要说明///*«i mi . di 4・'一」一4—・一、■ — •M2MI I4 ds. I rHei leal Bed mj— — II— ・4・.”•!/,形状号I dable i/,绘图控件P«A4I |”i//当前位置 Mil J*-i/,上一次位置 ・4 JM-/,左边界 . 4 /,下边界*4 ii—ten/,每块象素数・4 1叼阿31 ・ 4 ■r^n^i IwllJ Irjd三三三项目1项目3■l« 当前块颜色■ life 7 CwaUrH》项目4项目5项目6项目7I—71 l!”良14项口 8< ■ al X 4七』■ 4 ris. | m3i 4141 i项目9FM 1.“•) < 9^99 I:। “ 121)4 Mtar*M. Z, ^tas*M. TH> i I -W<-,I4i.Mfar»,TH>i2工学结合创新教程数据库结构(C语言版)9^99 2l工学结合创新教程数据库结构(C语言版)<—・立• || I•4■dlMrfMlM. |[ |.\. || ||<41 rio. S«4U«*m OI ■Hih» wdl«*4 ■ 4. 4 Je^l.・ 4・l・A・X l.・L・L・l> ♦•dH । ■ 4ria.|w>« 一七AHI •M y..I■ 4 L iy-«>m»ImJ/i< i ■ ■n・ Tii1♦T7・T・工学结合创新教程数据库结构(C语言版)<< ♦ AiqAJiMiTdiHy ■ ।> 〉 > 占 Mm■〜■ «I iriiM^-h I mw^i lelu^<<, T >kwh 也不--y "•<«!■■ «>4-h> <中—・r・ >叩彳lr^h.4+-) «■MLtth":•不•几1耳上CedUir 0>**» «■— — M “_・・ i> » > •dw «wM4一^"=Huy,:•**■■■ 柳项目1. JriMAJf dTddwUj rirMU- I项目3・"^彳十于不-・)彳柳 <■—y ;h^・ > PlvfSMlleSMllePl^f W^XmhI \MM I项目4> •M . . Wplfl…Li.&-.包 1・中,. dM^<>q ・ J ■ 41项目54^.l3Uliii+hI ・ 项口 6项目 7项目8■ ta. r».・m o ■■-$•*«■> ■IM — J TL« — j •■>>项目9〈/工学结合创新教程数据库结构(C语言版)> else «■Hihi ・•・|illb<1” Imi^mMI.ImIIjwDIjmMX< 9^99 11■r1»M ^Isa i4«| NI.«Mria.2>i 4m| l■.•Mr4(L Di 4m| m.tHBTl —i_・d・ Mid««^.|wll.«Mrli■—•♦•ri > •Im4m| IM.»mH(I.-Di Mid JArC«Keq» <•Iw项目1项目3项目44m| >>14m| 2>iM4^.UiBrL4eHK|» «4^.|wll.«MrK2>i■ — I2・项目5项目6项目7项口 84m| !3.«Mrl4-L«>i4m| DI.»Mr4l-l.2>i Mid JbtL" 一 ]》4m| IM.lMrlH. Di项目94m| ■■.•MrlQ •>14m| Dl.taaBrI —L,D・ M« d J ArCle - ।»<项目10■ — 史 14・9^99 Tt4m| IM.-btHL Di4m| l3.«Mrlf-L-Di4m| □!・•・ i —・<■ l>i■ ” 13 . IbH T_ ■ D ・■ d ] “ DI ・ tiHBe4 •・2> ■■ 史力,>•Iw4m| IM.»Mr«4-2.-2>i 4ei| ■■••■Mr4 4-L"Di4m| WbtHL Di M« d J to4L4e — ।»4riB«|MlM. "2>i■ - I - I ■・ *HBr1 T. , D ■ ■ D,■ al T «Tt;N .项目14ei| ataiBrl —l_,D・ d J btL" Heq >>■ d al T “9; It ・〉项目3•IwN>项目44m| l3l.lBrl8L Di teffl da. C»i m4L4« Km ।»■ Di项目5ImJ/i•»M II:4m| farllL Di4m| a-w4,L Di — I Ol・・—包l「Di M44 JbtL«Koi|>>项目6项目74riB«|MlM.*MBr1^L Di ■ l>i项口 8项目94m| DI.»Mr«d.e>i项目1IS t4m| ■■••■Brlf-l-Di 4m| 12l.«MBr4f-L-Di 4m|4 JbtL" —|>> «项目3■ I - I ■・ tMBrl 11. ■ D ■-2>i项目4»~w Mm4m| M.»Mr4(-l.-Di 4m| ■■.•Mrlf-l Di 4m| l>i4m| n.tMrlQ. I>i M44 jBTU«Kei|»项目5项目6«db.|Mll.«Mrl<-L Di 4^.|wl3.»MrK l>i l>i项目7项口 8项目9> Iwj/i•*•e Ri 4m| 4m| Di4m| Ml d J — ।» «4riB«|Ml2l.tHMr1^L Di■ dal〉e^w I* t4«l4m| l3.«Mrli4m| DI.»Mr4«.2>iM44■ ris« I - IM ・•■■ri 11. ■ D ■■ 4 .aisrHI. I>i■ —81»|”《=种・〉~w Mi 4m| l>i4m| l3.tMrlH.-Di 4m| Ml j —- Di〉•dm <〉>■Hih i»pllfo I m! lew UH lriMr«riM>«* 4 mme>Mt — —J ■•・■>>/,左•Im J4痴”4Im = I Mi JBmb,D)〃右«•■■Eli>•1■• JtriHM4dM =2 M> . —JBkb<2»〃下项目1项目3项目4项目5项目6项目7项口 8Illite 1 〜0 <—Jlew<2>><—I« ImHi• *. DiC—lriM I'kHIris.mi• Cw»4eCB»|IdbsOi riaaKI - ] •« 5 i. 4 14彳 : 1 l/,fl| ••rfnX (X ■ ■ ■**1. 4|| —N题■-Mi:0Ml || || ^ZmuMNv^ ||项目i«M fcrUs项目3• ・MPMi"■彳 «A"|>!ifliMPMBM.irHM>项目4项目5项口 6pllfe riH项目 7项目8项目93. 3. 4游戏声音设计编码在声音设计中要求调用动态链接库winmm.dll ,播放声音时调用函数项口 102工学结合创新教程数据库结构(C语言版)%—皿3•。
即可实现代码如例程a”所示例程371声音设置代码■ |4)msI« rl1T pllfe Mil Pl^SMiUlnW I *4 ■>Illite SmiI «■ < rtfdbTue. .IMB.lew.工.sr,.raxriK ] iA.LPl^SM』rlv&snjrr肉3. 4本章小结本章通过介绍俄罗斯方块的开发,介绍了一个简单游戏的开发过程,虽然功能不是 很完善,但其中所展示的思考问题的方法和技巧,以及一些编程的技巧还是值得借鉴通过项目1本章的学习,应该对游戏的开发过程有了一个简单的、清晰的认识,项目3项目4项目5项口 6项目7项目8项目9。