您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 俄罗斯方块课程设计2
1课程设计报告题目介绍:“俄罗斯方块”是一款非常经典,而且很受欢迎的风靡全球的电视游戏机和掌上游戏机游戏,玩家既能感受到游戏中的乐趣,也能提供一个展现自己高超技艺的场所。此游戏有很多变种,但大体玩法相同。本题目要求编制俄罗斯方块的计算机版本。题目要求:当按“开始”键时,游戏开始,期间玩家可以选择“暂停”和“继续”。方块可以在一定的范围内上下左右移动,而且可以根据玩家的指令转动方向,以更好的进行方块之间的组合。当每一行被方块填满时则会自动消去一行,多行都被方块填满时则都消去,同时消去的行数越多,则分数越高。一旦方块达到顶端则游戏自动结束。而且玩家可以根据自身的水平,选择游戏的难度。难度越高,速度越快;难度越低,速度越慢。解题方案:本题涉及到VB中的很多块知识使用的模块:数组,变量的命名,菜单编辑器,绘图,键盘事件处理,定时器控制,多模块程序设计,文本文件的读写等。主要用到的控件有:command控件,image控件,picture控件,label控件,timer控件,text控件,windowsmediaplayer控件等等主要实现的功能:1.可以灵活控制方块在图形框中运动。2.游戏过程中方块可以自由旋转。3.当某一行的方块排列满时,将自动将这一行方块消除,然后将上面所有方块向下移动,可以支持连续消行。4.游戏前可以选择游戏的速度和游戏的等级,游戏速度既为方块下落速度,游戏等级为初始游戏时在基层随机生成一定行数的无规律方块,生成的行数由你来选择,每行至少产生5个以上的无规律方块,这样增加了游戏难度,对于游戏高手来说,无疑不是一个新的挑战。5.游戏的得分支持积分,并且按照公式:得分=原来分数+100*(2^同时消除的行数-1)这样,你同一时间消除的行数越多,你的得分也就越高,当游戏积分到了一定时可以自动升级,这个升级指速度升级主要步骤为以下9个方面:(1)游戏界面的设计。(2)俄罗斯方块的造型。(3)俄罗斯方块的旋转。(4)俄罗斯方块的运动情况(包括向左,向右和向下)。(5)俄罗斯方块的自动消行功能。(6)游戏级别的自由选择。(7)游戏速度的自由选择。(8)游戏得分的计算。(9)游戏菜单选项的设计及功能实现。分析及大概设计:①方块的造型在旋转的时候存在一个公式,当然首先要判断是否满足旋转的要求,以上是一个长条型由横着变成竖立状态的旋转,我们以它的造型中的第三个小方块n(3)为中心旋转,这样,在开始运动的时候,长条形要发生旋转最少要运动到第三行,才能由横着变成竖立状态,游戏区图形框中第2三行的第一个方块的编号为20,所以长条造型的第一个小方块的编号n(0)必须要大于20。同样,长条型方块在下落到底部的时候也有限制。如果长条下落到最后一行也将无法由横着变成竖立状态。②如何实现方块的运动和自动消除满行的方块:我们的这个俄罗斯方块游戏主要是利用command控件的visible属性完成效果的,其实在游戏区图形框可以看成是由许多的command小方块组成,方块运动的过程就是造型里方块显示或者隐藏,就像现在的霓虹灯效果一样,由时钟控件控制visible属性改变的速度,上一层的消失,下一层的显示,这样,从视觉效果可以看到方块的下落运动效果。方块在下落的过程中会自动判断每一行方块的visible属性,如果全部为true时,就会将这一行小方块的visible属性全部变成false,在将上面的小方块向下移动,利用for语句进行循环判断,将所有这样情况的行改变小方块visible属性。③连续消行:当有多行同时出现这样情况时使用递归调用,实现连续消行。游戏速度和游戏级别自由选择④游戏速度选择:就是改变时钟控件的频率,我们在菜单中添加了选择速度的功能,还有添加了考验功能,将欲览窗中的方块造型隐藏,给玩家提高了难度,如果你不愿意接受考验也可以点击显示还原成原来状态。游戏级别的自由选择是让用户选择游戏开始时候,游戏区底部出现一定行数的随机方块,同样给玩家增加了难度⑤游戏得分的计算和游戏菜单的编辑:游戏得分的计算主要是根据消除的行数来决定的,当然每一次同时消除的行数不一样,每一行的得分也不一样,如果你每次消除的行数为1,则最后得分是100分,如果同时消除2行,则最后得分是300分,同时消除3行,得分为700分,同时消除4行,得分为1500分,这由公式:得分=原来分数+100*(2^同时消除的行数-1)。效果极其存在问题:游戏自身已经可以运行,可以带来游戏的轻松及其快感,可是界面显得粗糙,缺乏美感,而且就游戏菜单编辑器方面得进行改进心得:此次对俄罗斯方块的VB程序进行编辑,更加对这个游戏的设计思路以及运行程序得到了解,而且从中学到很多VB的知识,比如怎样对菜单编辑器进行设置,怎样设计产生两个甚至更多的窗体,对一些控件的应用以及数组的应用也有了更深的了解。3VB程序:⑴定义产生方块的数组以及消除行数的数组:Privaten(3),m(3)AsIntegerPrivatesituation,situation2,linenum,tAsInteger⑵为了产生方块,定义使各个小方块可见和不可见的过程:PrivateSubhidefang(aAsInteger)SelectCaseaCase0cmdfang(n(0)).Visible=Falsecmdfang(n(1)).Visible=Falsecmdfang(n(2)).Visible=Falsecmdfang(n(3)).Visible=FalseCase1cmdfangnext(m(0)).Visible=Falsecmdfangnext(m(1)).Visible=Falsecmdfangnext(m(2)).Visible=Falsecmdfangnext(m(3)).Visible=FalseEndSelectEndSubPrivateSubshowfang(aAsInteger)SelectCaseCase0cmdfang(n(0)).Visible=Truecmdfang(n(1)).Visible=Truecmdfang(n(2)).Visible=Truecmdfang(n(3)).Visible=TrueCase1cmdfangnext(m(0)).Visible=Truecmdfangnext(m(1)).Visible=Truecmdfangnext(m(2)).Visible=Truecmdfangnext(m(3)).Visible=TrueEndSelectEndSub⑶实现消除一行(实现连续消行,用递归):PrivateSubclearline()Fori=190To10Step-10Ifcmdfang(i).Visible=TrueAnd_cmdfang(i+1).Visible=TrueAnd_cmdfang(i+2).Visible=TrueAnd_cmdfang(i+3).Visible=TrueAnd_cmdfang(i+4).Visible=TrueAnd_cmdfang(i+5).Visible=TrueAnd_cmdfang(i+6).Visible=TrueAnd_cmdfang(i+7).Visible=TrueAnd_cmdfang(i+8).Visible=TrueAnd_4cmdfang(i+9).Visible=TrueThenForj=i+4ToiStep-1t=1cmdfang(j).Visible=Falsecmdfang(2*i+9-j).Visible=FalseFork=1To4000DoEventsNextt=0Nextlinenum=linenum+1Forj=i-1To0Step-1Ifcmdfang(j).Visible=TrueThencmdfang(j).Visible=Falsecmdfang(j+10).Visible=TrueEndIfNextclearlineEndIfNextEndSub⑷定义方块能否下降,左移和右移:PrivateFunctiondownable()AsBooleanIfn(0)190Andn(1)190Andn(2)190Andn(3)190ThenIfcmdfang(n(0)+10).Visible=FalseAnd_cmdfang(n(1)+10).Visible=FalseAnd_cmdfang(n(2)+10).Visible=FalseAnd_cmdfang(n(3)+10).Visible=FalseThendownable=TrueElsedownable=FalseEndIfElsedownable=FalseEndIfEndFunctionPrivateFunctionleftable()AsBooleanIfn(0)Mod100Andn(1)Mod100Andn(2)Mod100Andn(3)Mod100ThenIfcmdfang(n(0)-1).Visible=FalseAnd_cmdfang(n(1)-1).Visible=FalseAnd_cmdfang(n(2)-1).Visible=FalseAnd_cmdfang(n(3)-1).Visible=FalseThenleftable=True5Elseleftable=FalseEndIfElseleftable=FalseEndIfEndFunctionPrivateFunctionrightable()AsBooleanIfn(0)Mod109Andn(1)Mod109Andn(2)Mod109Andn(3)Mod109ThenIfcmdfang(n(0)+1).Visible=FalseAnd_cmdfang(n(1)+1).Visible=FalseAnd_cmdfang(n(2)+1).Visible=FalseAnd_cmdfang(n(3)+1).Visible=FalseThenrightable=TrueElserightable=FalseEndIfElserightable=FalseEndIfEndFunction⑸定义随机产生的形状:PrivateSubloadfangkuai()SelectCaseInt(Rnd*6)Case0SelectCaseInt(Rnd*2)Case0m(0)=3m(1)=4m(2)=5m(3)=6situation2=0Case1m(0)=5m(1)=15m(2)=25m(3)=35situation2=1EndSelectCase1m(0)=4m(1)=5m(2)=146m(3)=15situation2=2Case2SelectCaseInt(Rnd*2)Case0m(0)=6m(1)=5m(2)=15m(3)=14situation2=3Case1m(0)=4m(1)=14m(2)=15m(3)=25situation2=4EndSelectCase3SelectCaseInt(Rnd*2)Case0m(0)=4m(1)=5m(2)=15m(3)=16situation2=5Case1m(0)=5m(1)=15m(2)=14m(3)=24situation2=6EndSelectCase4SelectCaseInt(Rnd*4)Case0m(0)=4m(1)=5m(2)=6m(3)=15situation2=7Case1m(0)=5m(1)=15m(2)=257m(3)=14situation2=8Case2m(0)=16m(1)=15m(2)=14m(3)=5situation2=9Case3m(0)=24m(1)=14m(2)=4m(3)=15situation2=10EndSelectCase5SelectCaseInt(Rnd*4)Case0m(0)=4m(1)=5m(2)=15m(3)=25situation2=11Case1m(0)=5m(1)=15m(2)=14m(3)=13situation2
本文标题:俄罗斯方块课程设计2
链接地址:https://www.777doc.com/doc-3365342 .html