VB 俄罗斯方块的设计
vb_俄罗斯方块
流程图程序开始1.设定地图资料2.设定界面大小和位置3.初始化游戏的运行数据4.设定各种方块数据5.启动timer置换下一块为现在方块,检查可否放入地图产生下一块Timer依设定时间下移方块由键盘方向键控制方块移动和变检查方块移动位置是否有障碍是检查方块是否无法下移是删除满行否是否再玩是程序结束否否是否移动方块重绘地图方块画面规划画面规划如图1所示图1说明如下:○1:游戏窗口(Form)。
为了避免因改变窗口大小而造成画面呈现不美观,将BorderStyle属性设定为3,即无法以窗口边缘进行窗口大小调整。
○2:积分框(Frame)○3:累计数框(Frame)○4:分数(Label)○5:等级(Label)○6:构成下一个动作方块所需组件(Image)。
程序设计阶段将Visible设为False,程序执行阶段再依需要改变属性值。
○7:构成地图方块所需组件(Image)。
程序设计阶段将Visible设为False,程序执行阶段再依需要改变属性值。
○8:构成现在动作方块所需组件(Image)。
程序设计阶段将Visible设为False,程序执行阶段再依需要改变属性值。
○9:定时器(Timer)。
○10:方块图形存储组件(ImageList)。
1.游戏使用说明上方向键旋转方块,左右和下方向键移动方块,空格键能让方块骤降,pause按键能暂停游戏。
每消除一行得100分,初始等级为1级,满3000分升1级,同时方块下降的速度也变快。
程序代码:Private Type blocktypeintblockarray(3, 4, 4) As Integer '方块数组blockpicture As Integer '方块图形End Type'所有方块形状数据Dim blockarray() As blocktype '方块类型数组'现在方块Dim nowblocktype As Integer '方块类型Dim nowblockmode As Integer '方块方向Dim nowblockpicture As Integer '方块图案Dim nowblockx As Integer 'x坐标Dim nowblocky As Integer 'y坐标Dim nowblockw As Integer '方块宽Dim nowblockh As Integer '方块高'下一个方块Dim nextblocktype As Integer '方块类型Dim nextblockpicture As Integer '方块图形'地图数据Dim mapxs As Integer '地图横向格数Dim mapys As Integer '地图纵向格数Dim maparray() As Integer '地图数组Dim mappicturearray() As Integer '地图中所代表的图案Dim mapx As Integer '地图x坐标Dim mapy As Integer '地图y坐标Dim delcount As Integer '删除行数计数器'游戏进行数据Dim score As Double '游戏分数Dim level As Integer '游戏级数Dim speed As Integer '游戏速度Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)'窗体加载Private Sub form_load()RandomizeCall setmap '设定地图数据Call setformsize '设定窗体大小Call setgamedata '初始化游戏数据Call setblock '设定各种方块数据Call createnextblock '产生下一方块Call createnowblock '产生现在方块Timer1.Enabled = TrueTimer1.Interval = speedEnd Sub'设定地图数据Private Sub setmap()mapx = 0mapy = 735mapxs = 14mapys = 18nowblockw = 375nowblockh = 375ReDim maparray(mapxs - 1, mapys - 1)ReDim mappicturearray(mapxs - 1, mapys - 1)'将地图数据清空,并加载图形组件For X = 0 To mapxs - 1For Y = 0 To mapys - 1Load imgmapblock(imgmapblock.Count)imgmapblock(imgmapblock.Count - 1). _Move (X * nowblockw + mapx), _(Y * nowblockh + mapy), _nowblockw, _nowblockhimgmapblock(imgmapblock.Count - 1).Visible = False maparray(X, Y) = 0mappicturearray(X, Y) = 0Next YNext XEnd Sub'设定窗体大小位置Private Sub setformsize()Dim frmleft As IntegerDim frmtop As IntegerDim frmw As IntegerDim frmh As Integerfrmleft = (Screen.Width - Me.Width) / 2frmtop = (Screen.Height - Me.Height) / 2frmw = nowblockw * mapxs + (Me.Width - Me.ScaleWidth) frmh = nowblockh * mapys + (Me.Height - Me.ScaleHeight) Me.Move frmleft, frmtop, frmw, frmh + 735imgnowblock(0).Width = nowblockwimgnowblock(0).Height = nowblockhimgmapblock(0).Width = nowblockwimgmapblock(0).Height = nowblockhEnd Sub'初始化游戏进行数据Private Sub setgamedata()score = 0level = 1speed = 800lbscore(0).Caption = scorelblevel(0).Caption = levelEnd Sub'设定方块数据Private Sub setblock()ReDim blockarray(6)Dim intcount As Integerblockarray(0).intblockarray(0, 2, 1) = 1 '倒T形 blockarray(0).intblockarray(0, 1, 2) = 1blockarray(0).intblockarray(0, 2, 2) = 1blockarray(0).intblockarray(0, 3, 2) = 1blockarray(1).intblockarray(0, 1, 1) = 1 ' L形blockarray(1).intblockarray(0, 1, 2) = 1blockarray(1).intblockarray(0, 2, 2) = 1blockarray(1).intblockarray(0, 3, 2) = 1blockarray(2).intblockarray(0, 3, 1) = 1 '倒L形 blockarray(2).intblockarray(0, 1, 2) = 1blockarray(2).intblockarray(0, 2, 2) = 1blockarray(2).intblockarray(0, 3, 2) = 1blockarray(3).intblockarray(0, 1, 2) = 1 '一字形 blockarray(3).intblockarray(0, 2, 2) = 1blockarray(3).intblockarray(0, 3, 2) = 1blockarray(3).intblockarray(0, 4, 2) = 1blockarray(4).intblockarray(0, 1, 1) = 1 'Z字形blockarray(4).intblockarray(0, 2, 1) = 1blockarray(4).intblockarray(0, 2, 2) = 1blockarray(4).intblockarray(0, 3, 2) = 1blockarray(5).intblockarray(0, 2, 1) = 1 '倒Z字形 blockarray(5).intblockarray(0, 3, 1) = 1blockarray(5).intblockarray(0, 1, 2) = 1blockarray(5).intblockarray(0, 2, 2) = 1For i = 0 To 3blockarray(6).intblockarray(i, 2, 2) = 1 '田字形blockarray(6).intblockarray(i, 2, 3) = 1blockarray(6).intblockarray(i, 3, 2) = 1blockarray(6).intblockarray(i, 3, 3) = 1Next iFor i = 0 To 5 '依序为倒T形,L形,倒L形,一字形,Z形和倒Z形 For j = 1 To 3 '每一形状要做三次旋转,每次顺时针90intcount = 0If i > 2 And (j Mod 2 = 0) ThenFor X = 0 To 4For Y = 0 To 4blockarray(i). _intblockarray(j, X, Y) = blockarray(i). _intblockarray((j - 1), 4 - Y, X)If blockarray(i).intblockarray(j, X, Y) = 1 Thenintcount = intcount + 1End IfIf intcount >= 4 Then Exit ForNext YIf intcount = 4 Then Exit ForNext XElseFor X = 0 To 4For Y = 0 To 4blockarray(i).intblockarray(j, X, Y) = _blockarray(i).intblockarray((j - 1), Y, 4 - X)If blockarray(i).intblockarray(j, X, Y) = 1 Thenintcount = intcout + 1End IfIf intcount >= 4 Then Exit ForNext YIf intcount >= 4 Then Exit ForNext XEnd IfNext jNext iEnd Sub'产生下一个方块图形Private Sub createnextblock()Dim intcount As Integernextblocktype = Rnd() * UBound(blockarray) '随机数产生方块形态'随机数产生方块图案nextblockpicture = Rnd() * (iglblockpicture.ListImages.Count - 1) + 1'第一次初始将组件动态新增至4个If imgnextblock.Count < 4 ThenDoLoad imgnextblock(imgnextblock.Count)Loop While imgnextblock.Count < 4End If'将下一个方块画在窗体上方intcount = 0For X = 0 To 4For Y = 1 To 2If blockarray(nextblocktype).intblockarray(0, X, Y) = 1 Then Set imgnextblock(intcount).Picture =iglblockpicture.ListImages(nextblockpicture).Pictureimgnextblock(intcount).Move (2000 + X * 195), (30 + Y * 195), 195, 195imgnextblock(intcount).Visible = Trueintcount = intcount + 1End IfIf intcount >= 4 Then Exit ForNext YIf intcount >= 4 Then Exit ForNext XEnd Sub'产生现在方块形状Private Sub createnowblock()Dim intcount As IntegerDim strgameover As Stringnowblocktype = nextblocktypenowblockpicture = nextblockpicturenowblockx = (mapxs - 5) / 2 - 1nowblocky = -1nowblockmode = 0'第一次初始将组件动态新增至4个If imgnowblock.Count < 4 ThenDoLoad imgnowblock(imgnowblock.Count)Loop While imgnowblock.Count < 4End If'检查新产生的方块是否可以放在地图中If checkput(nowblockx, nowblocky, nowblockmode) = False Thenstrgameover = MsgBox("你输了,继续玩吗?", vbQuestion + vbYesNo, "游戏结束")If strgameover = vbNo ThenEndElseDo While imgmapblock.Count > 1Unload imgmapblock(imgmapblock.Count - 1)LoopCall form_loadEnd IfElseCall drawblock '画出方块Call createnextblockEnd IfEnd Sub'键盘事件Private Sub form_keydown(keycode As Integer, shift As Integer)If Timer1.Enabled = True Or keycode = vbKeyPause ThenSelect Case keycodeCase vbKeyUpnowblockmode = nowblockmode + 1If nowblockmode > 3 Then nowblockmode = 0If checkput(nowblockx, nowblocky, nowblockmode) = False Then nowblockmode = nowblockmode - 1If nowblockmode < 0 Then nowblockmode = 3ElseCall drawblock '画出方块End IfCase vbKeyDownIf checkput(nowblockx, nowblocky + 1, nowblockmode) =True Thennowblocky = nowblocky + 1Call drawblockElseCall checkbottomEnd IfCase vbKeyLeftIf checkput(nowblockx - 1, nowblocky, nowblockmode) = True Thennowblockx = nowblockx - 1Call drawblockEnd IfCase vbKeyRightIf checkput(nowblockx + 1, nowblocky, nowblockmode) = True Thennowblockx = nowblockx + 1Call drawblockEnd IfCase vbKeySpaceDo While checkput(nowblockx, nowblocky + 1, nowblockmode) = Truenowblocky = nowblocky + 1LoopCall drawblockCall checkbottomCase vbKeyPauseTimer1.Enabled = Not Timer1.EnabledCase vbKeyEscapeUnload MeEnd SelectEnd IfEnd Sub'画出方块Private Sub drawblock()Dim intcount As Integerintcount = 0For X = nowblockx To (nowblockx + 4)For Y = nowblocky To (nowblocky + 4)If blockarray(nowblocktype).intblockarray(nowblockmode, (X - nowblockx), (Y - nowblocky)) = 1 ThenSet imgnowblock(intcount).Picture =iglblockpicture.ListImages(nowblockpicture).Pictureimgnowblock(intcount).Move (X * nowblockw + mapx), (Y * nowblockh + mapy), nowblockw, nowblockhimgnowblock(intcount).Visible = Trueintcount = intcount + 1End IfIf intcount >= 4 Then Exit ForNext YIf intcount >= 4 Then Exit ForNext XEnd Sub'检查方块是否可以放置Private Function checkput(cx As Integer, cy As Integer, cm As Integer) As Booleancheckput = TrueFor X = cx To (cx + 4)For Y = cy To (cy + 4)If blockarray(nowblocktype).intblockarray(cm, (X - cx), (Y - cy)) = 1 ThenIf X < 0 Or X > (mapxs - 1) Or _Y < 0 Or Y > (mapys - 1) Thencheckput = FalseElseIf maparray(X, Y) = 1 Thencheckput = FalseEnd IfEnd IfEnd IfIf intcount >= 4 Then Exit ForNext YIf checkput = False Then Exit ForNext XEnd Function'定时器Private Sub Timer1_Timer()If checkput(nowblockx, nowblocky + 1, nowblockmode) = True Then nowblocky = nowblocky + 1Call drawblockElseCall checkbottomEnd IfEnd Sub'方块到底检查Private Sub checkbottom()Timer1.Enabled = FalseCall Wirtemap '将到底的方块数据写入地图数组中Call deletefull '删除满行If delcount > 0 Then Call reloadmap '假如有刪除行则重新加载地图Call checkgamedata '检查游戏数据Call createnowblock '产生新方块Timer1.Enabled = TrueEnd Sub'将到底的方块数据写入地图数组中Private Sub Wirtemap()Dim intcount As Integer '方块计数器intcount = 0For X = 0 To 4For Y = 0 To 4If blockarray(nowblocktype).intblockarray(nowblockmode, X, Y) = 1 Then'读取到方块数组中的值为1时,方块计数器加1intcount = intcount + 1maparray(nowblockx + X, Y + nowblocky) = 1mappicturearray(X + nowblockx, Y + nowblocky) = nowblockpicture Set imgmapblock((nowblockx + X) + (nowblocky + Y) *mapxs).Picture = _iglblockpicture.ListImages(mappicturearray((nowblockx + X), (nowblocky + Y))).Pictureimgmapblock((nowblockx + X) + (nowblocky + Y) * mapxs).Move ((nowblockx + X) * nowblockw + mapx), _((nowblocky + Y) * nowblockh + mapy), nowblockw, nowblockhimgmapblock((nowblockx + X) + (nowblocky + Y) * mapxs).Visible = TrueEnd If'当方块计数器为4时表示已经将数组中有方块之值写入地图If intcount >= 4 Then Exit ForNext YIf intcount >= 4 Then Exit ForNext XEnd Sub'删除满行Private Sub deletefull()Dim blfull As Boolean '满行旗标delcount = 0 '删除行数计数器归0Dim reline(4) As Boolean '记录满行行数For Y = nowblocky To nowblocky + 4blfull = True '先将满行旗标设为TRUEIf Y < mapys And Y >= 0 ThenFor X = 0 To mapxs - 1If maparray(X, Y) = 0 Thenblfull = FalseEnd IfNext XElseblfull = FalseEnd Ifreline(Y - nowblocky) = blfullIf blfull = True Then delcount = delcount + 1Next Y'当有满行发生时If delcount > 0 ThenFor i = 1 To 4For yy = nowblocky To nowblocky + 4If reline(yy - nowblocky) = True ThenFor mxx = 0 To mapxs - 1imgmapblock(mxx + yy * mapxs).Visible = _Not imgmapblock(mxx + yy * mapxs).VisibleDoEventsNext mxxEnd IfNext yyIf i Mod 2 = 0 ThenSleep (50 / delcount)ElseSleep (10 / delcount)End IfNext i'移动地图数组数据For yyy = nowblocky To nowblocky + 4If reline(yyy - nowblocky) = True ThenFor my = yyy To 1 Step -1For mx = 0 To mapxs - 1maparray(mx, my) = maparray(mx, my - 1)mappicturearray(mx, my) = mappicturearray(mx, my - 1) Next mxNext my'将地图数组第0行设为0For mx = 0 To mapxs - 1maparray(mx, 0) = 0Next mxEnd IfNext yyyEnd IfEnd Sub'重新加载地图Private Sub reloadmap()For X = 0 To mapxs - 1For Y = 0 To mapys - 1If maparray(X, Y) = 1 ThenSet imgmapblock(X + Y * mapxs).Picture = _iglblockpicture.ListImages(mappicturearray(X,Y)).Pictureimgmapblock(X + Y * mapxs).Move (X * nowblockw + mapx), (Y * nowblockh + mapy), nowblockw, nowblockhimgmapblock(X + Y * mapxs).Visible = TrueElseimgmapblock(X + Y * mapxs).Visible = FalseEnd IfNext YNext XEnd Sub'检查游戏数据Private Sub checkgamedata()score = score + delcount * delcount * 100 '分数计算level = 1 + score \ 3000 '等级计算speed = speed - 1If speed <= 0 Then speed = 1lbscore(0).Caption = scorelblevel(0).Caption = levelEnd Sub'窗体移除Private Sub form_unload(cancel As Integer)'移除地图显示组件Do While imgmapblock.Count > 1Unload imgmapblock(imgmapblock.Count - 1)Loop'移除现在动作方块显示组件Do While imgnowblock.Count > 1Unload imgnowblock(imgnowblock.Count - 1)Loop'移除下一个动作方块显示组件Do While imgnextblock.Count > 1Unload imgnextblock(imgnextblock.Count - 1)LoopEnd Sub。
VB程序设计项目
VB程序设计项目俄罗斯方块是一款经典的益智游戏,由于其简单而有趣的玩法,深受大众喜爱。
在这个项目中,我将使用VB程序设计语言来实现一个俄罗斯方块游戏。
首先,我需要创建一个窗口来展示游戏界面。
可以使用VB的窗体设计工具来创建一个适配屏幕大小的窗口。
在窗口中,我将设置一个固定大小的网格来展示游戏区域。
接下来,我将定义几个关键的类来实现游戏逻辑。
首先是方块类,用于表示俄罗斯方块中的每个方块的属性和行为。
该类应该包含方块的形状、位置、旋转等信息,并提供方法来移动方块、旋转方块等。
然后是游戏区域类,用于表示整个游戏区域的属性和行为。
该类应该包含游戏区域的大小、当前方块、已经落下的方块等信息,并提供方法来检测方块是否可以移动、旋转,以及方块落地后的处理。
在游戏区域类的基础上,我将定义一个游戏控制类来控制整个游戏的进行。
该类应该提供开始游戏、暂停游戏、结束游戏等方法,并处理游戏的计分、等级等逻辑。
为了使游戏更加有趣,我还可以添加一些特殊功能,比如消除满行的方块、不同形状的方块等。
这些功能可以在游戏区域类和方块类中进行实现,并在游戏控制类中进行调用和处理。
最后,我将在窗口中添加一些控件来实现游戏的交互。
比如开始按钮、暂停按钮、重新开始按钮等。
当玩家点击这些按钮时,我将调用游戏控制类中相应的方法来进行游戏的操作。
通过以上的设计和实现,我将成功地创建一个VB程序设计项目,俄罗斯方块游戏。
这个项目不仅可以提供给玩家娱乐,还可以帮助我学习和掌握VB程序设计的相关知识和技能。
俄罗斯方块设计思路
俄罗斯方块设计思路1.方块类:每个方块都要记录自己的ID、形状。
形状采用4对整数坐标来表示,分别记录4个小方块的相对位置(以方块内或旁边任一点为中心,称为参考点)。
建议可以在方块类义一个或多个private static数组,将每种ID的方块的形状数据存储好(都是一些固定的数据),这样产生一个方块时只需要提供其ID即可。
为了处理方块的旋转,我们不能只记录上述7种方块,而应该把它们旋转后产生的每种形状都认为是一种不同的方块(因为它们的4对坐标都不同),然后在方块ID之间建立映射关系,即哪种ID的方块旋转后变成哪种ID 的方块,只要求处理一个方向的旋转。
这个映射关系也可以用private static数组来实现。
此外,方块类还要记录自己的参考点在指定的游戏区域中的位置。
方块类主要操作:(自行决定哪些为public哪些为private)构造函数:参数至少有:ID和参考点初始坐标。
填充:把自己填充到指定的游戏区域中。
返回填充成功或失败的信息。
清除:把自己从指定的游戏区域中清除。
移动:在指定的游戏区域中移动,包括向左、右、下移动,以1个单元格为单位。
如果可以移动,则修改参考点的位置,并在指定的游戏区域中重新填充自己(先清除、然后修改参考点位置,再填充)。
返回是否移动成功的信息。
旋转:在指定的游戏区域中旋转一次,此时参考点位置不变,但要改变自己的ID,然后在指定的游戏区域中重新填充自己(先清除、然后修改参考点位置,再填充)。
获得占用行:返回本方块4个小方块所占用的各行,可能有1~4行,要返回每一行的行号(1~20)。
这些数据可用参考点位置与自己的4对坐标计算出来。
2.游戏区域类其主要属性:游戏区域数据,可以用一个二维数组方便地实现。
状态:游戏未开始(初态)和游戏已开始。
主要操作为:(自行决定哪些为public哪些为private)游戏区域读写:指定游戏区域的一个单元格坐标后,返回或设置单元格的值。
绘制:清除屏幕后将游戏区域绘制出来。
vb俄罗斯方块游戏报告
北京电子科技学院计算机实习报告题目:设计俄罗斯方块游戏一、需求分析1.选题任务:设计俄罗斯方块游戏2.选题分析:●首先题目是设计游戏,所以游戏界面需要美观,因此选择用vb 实现。
Visual Basic 的图形信息处理功能通常借助于几个标准控件,包括图片框(PictureBox)控件、图像(Image)控件、直线(Line)控件和形状(Shape)控件。
图片框(PictureBox)控件可以用来显示图形,也可以用来在控件上输出图形(点、圆、矩形等)和用Print方法输出文本,还可以将图片框作为容器,将不同功能的控件包容在其中,从而实现分组功能。
图像(Image)控件和图片框(PictureBox)控件一样,也可以用来显示图像,但是它比图片框要少许多功能,图像控件不具有pSet,Line,Circle等绘图方法,也不能作为其他控件的载体。
虽然Image控件比PictureBox控件少了很多功能,但是它比图片框使用更少的系统资源,重画起来比图片框控件要快,所以在程序中仍要使用。
●熟悉游戏规则很重要,因为这是程序设计的基本要求,也是基本思路。
游戏规则如下:✓电脑随机产生4个小方块组成的不同形状的游戏块,从上往下降落。
✓游戏面板的宽度为12(以小方块的宽度为单位),高度为22,当一行被12个小方块填满时,此行便会被自动消除。
✓利用键盘上的左右箭头键可以控制游戏块的左移与右移。
✓利用键盘上的向上箭头键可以控制游戏块的旋转。
✓利用键盘上的向下箭头键可以控制游戏块的快速下落。
✓当游戏块无法下落时,游戏结束。
✓在屏幕上可以显示将出现的下一个游戏块。
二、程序设计1.要实现游戏中各种方块的图形,然后对其进行控制,如翻转、移动。
1)根据游戏规则,游戏块的运动有各种方式,如下降时左右移动和旋转,其中翻转又根据不同的方块有不同的翻转次数,因此必须在程序代码中很好地区分这些情况。
2)定义程序中常用的变量,包括目前方块的坐标,下一个方块的坐标。
vb俄罗斯方块课程设计
vb俄罗斯方块课程设计一、课程目标知识目标:1. 学生能够理解vb编程的基本概念,掌握利用vb编写简单俄罗斯方块游戏的方法。
2. 学生能够运用vb编程中的循环、条件判断等基本语句,实现方块移动、旋转等功能。
3. 学生了解计算机编程解决问题的基本过程,培养逻辑思维能力。
技能目标:1. 学生能够运用vb编程软件,独立编写出具有基本功能的俄罗斯方块游戏。
2. 学生通过实践操作,提高解决问题的能力,培养动手实践能力。
3. 学生通过小组合作,培养团队协作能力和沟通能力。
情感态度价值观目标:1. 学生对计算机编程产生兴趣,激发学习主动性和积极性。
2. 学生在编程过程中,培养耐心、细心和勇于尝试的精神。
3. 学生通过编程解决实际问题,体会计算机编程的实用价值,增强自信心。
课程性质:本课程为信息技术学科vb编程模块的实践课程,旨在让学生通过动手实践,掌握vb编程的基本方法。
学生特点:六年级学生具有一定的计算机操作基础,对vb编程有一定了解,但实践能力较弱。
教学要求:教师需关注学生个体差异,提供有针对性的指导,引导学生通过自主探究、小组合作等方式完成课程目标。
同时,注重培养学生解决问题的能力和团队协作精神,提高学生的编程素养。
在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容本节课教学内容围绕vb俄罗斯方块游戏的编写展开,主要包括以下几部分:1. vb编程基础知识回顾:变量、循环结构、条件判断语句等。
- 教材章节:第二章《vb编程基础》2. 俄罗斯方块游戏设计思路及功能模块划分:- 游戏界面设计:方块、背景、得分等元素的设计与布局。
- 方块操作:移动、旋转、消除等功能的实现。
- 游戏逻辑:方块的产生、移动、消行等规则的设计。
3. vb编程实现俄罗斯方块游戏:- 教材章节:第三章《vb控制结构》和第四章《vb数组》- 方块的绘制:使用vb绘图方法绘制方块。
- 方块的移动与旋转:运用循环结构和条件判断实现。
用Excel VBA编写俄罗斯方块游戏
万方数据
,。。‘。。。。。。’。。。。。。。。。。。。。。‘…
实用第一/智慧密集
每种方块共有4个小方块.位置分为行和列。所以将 BlockDataArea区域的8列分为两部分。前4列分别代表1、2、 3、4号小方块出现在游戏区域的行。后面4列分别代表各小 方块出现在游戏区域的列。
Color As Integer HasStopped As Boolean SmallBoxlnCurrentBIock(1 To 4)As SmallBoxPos SmallBoxlnNextPos(1 To 4)As SmallBoxPos CurrentRotateState As Integer RotateChangeData(1 To 4.1 To 4)As SmallBoxPos End Type
向上键时方块会回归原来的状态.第一种方块和第二种方块同
样适合此规律。如此周而复始。
根据上面的叙述.下面创建自定义数据类型TetrisBox来
表示俄罗斯方块。
·
(1)首先一个方块是由四个小方块组成的,所以TetrisBox 结构中应包括一个SmallBoxPos类型的数组。数组元素个数应
为4个。分别代表其包含的4个小方块。
圈1 F.xOol俄罗斯方块 首先打开Excel 2007.新建一个工作簿并将其保存为 Excel启用宏的工作簿.文件名为Excel俄罗斯方块.xlsm,并 将工作表。Sheetl”重命名为“TETRlS”。作为游戏界面并调 整此工作表中的列宽和行宽至合适大小并使其大小一致,因为 在游戏中单元格将被用来组成方块。如果大小不合适或不一致 对游戏的效果影响很大。本例中游戏区域的行宽和列宽都为 16像索大小。
Row As Integer
俄罗斯方块vb代码
信阳农业高等专科学校《Visual Basic程序设计》课程设计报告报告题目:俄罗斯方块系别:计算机科学系专业:应用电子班级: 10级电子一班姓名:师艳霞辅导老师:侯丽萍完成时间:2011.12.10内容简介我设计的是一个游戏《俄罗斯方块》。
打开Visual Basic程序,创建一个工程,一、新建一个窗体form1,如图所示:二、新建窗体form2,设计窗体,如图所示:将这个窗体的caption属性改为“俄罗斯方块游戏设置”,关卡(速度)内的滑动条HScroll1的largechang属性为5,mas属性为10,min属性为1,smallchange属性为1,tabindex为2。
难度(高度)内的滑动条HScroll2属性同HScroll1,min属性为0,tabindex为4。
编写代码:Private Sub Command2_Click()Form2.HideForm3.ShowEnd SubPrivate Sub Command1_Click()Form2.HideForm3.ShowForm3.Text2.Text = HScroll1.Value Form3.Text1.Text = HScroll2.Value End SubPrivate Sub HScroll2_Change()Frame2.Caption = "难度(高度):" + Str(HScroll2.Value)Command1.SetFocusEnd SubPrivate Sub HScroll2_Scroll()Frame2.Caption = "难度(高度):" + Str(HScroll2.Value)Command1.SetFocusEnd SubPrivate Sub HScroll1_Change()Frame1.Caption = "关卡(速度):" + Str(HScroll1.Value)Command1.SetFocusEnd SubPrivate Sub HScroll1_Scroll()Frame1.Caption = "关卡(速度):" + Str(HScroll1.Value)Command1.SetFocusEnd Sub三、新建窗体form3,设计窗体,如图:窗体的caption属性为“俄罗斯方块”,picture属性添加icon图片。
vb俄罗斯方块代码
经典俄罗斯方块演示:代码如下:Dim Type_Now As Integer '目前方块的类型Dim Type_Next As Integer '下个方块的类型Dim intRotate As Integer '方块旋转的状态Function Get_X_Value()If GetValue(1, 2) Then 'Get X ValueIf MaxX - MinX >= 2 ThenIf MaxX - CurX <= 1 ThenAdjust_Left = MaxX - 2 - 1ElseAdjust_Left = CurX - 1End IfGet_X_V alue = TrueExit FunctionEnd IfEnd IfGet_X_Value = FalseEnd FunctionFunction GetValue(nType As Integer, nWid As Integer)Call GetCoorOn Error Resume NextDim OKCount, EmptyCount As IntegerMinX = Xs(1).cXMaxX = Xs(1).cXMinY = Xs(1).cYMaxY = Xs(1).cYFor i = 2 To 4If MinX > Xs(i).cX Then MinX = Xs(i).cXIf MaxX < Xs(i).cX Then MaxX = Xs(i).cXIf MinY > Xs(i).cY Then MinY = Xs(i).cYIf MaxY < Xs(i).cY Then MaxY = Xs(i).cYNextFor i = MinX To MaxXFor j = MinY To MaxYIf Total(i, j) ThenGetValue = FalseExit FunctionEnd IfNextNextIf nType = 0 Then 'Get Y ValueEmptyCount = 0 'Get MinYOKCount = 0For i = MinY - 1 To MinY - (nWid - 1) Step -1For j = MinX To MaxXIf Total(j, i) = False Then OKCount = OKCount + 1NextIf OKCount >= picPictureNow.Width And OKCount >= picPictureNow.Height ThenEmptyCount = EmptyCount + 1OKCount = 0ElseExit ForEnd IfNextMinY = MinY - EmptyCountIf MinY < 1 Then MinY = 1EmptyCount = 0 'GetMaxYOKCount = 0For i = MaxY + 1 To MaxY + nWid - 1For j = MinX To MaxXIf Total(j, i) = False Then OKCount = OKCount + 1NextIf OKCount >= picPictureNow.Width And OKCount >= picPictureNow.Height ThenEmptyCount = EmptyCount + 1OKCount = 0ElseExit ForEnd IfNextMaxY = MaxY + EmptyCountIf MaxY > 20 Then MaxY = 20Else 'Get X ValueEmptyCount = 0 'Get MinXOKCount = 0For i = MinX - 1 To MinX - (nWid - 1) Step -1For j = MinY To MaxYIf Total(i, j) = False Then OKCount = OKCount + 1NextIf OKCount >= picPictureNow.Width And OKCount >= picPictureNow.Height ThenEmptyCount = EmptyCount + 1OKCount = 0ElseExit ForEnd IfNextMinX = MinX - EmptyCountIf MinX < 1 Then MinX = 1EmptyCount = 0 'GetMaxXOKCount = 0For i = MaxX + 1 To MaxX + (nWid - 1)For j = MinY To MaxYIf Total(i, j) = False Then OKCount = OKCount + 1NextIf OKCount >= picPictureNow.Width And OKCount >= picPictureNow.Height ThenEmptyCount = EmptyCount + 1OKCount = 0ElseExit ForEnd IfNextMaxX = MaxX + EmptyCountIf MaxX > 10 Then MaxX = 10End IfGetValue = TrueEnd FunctionFunction Get_Y_Value()If GetValue(0, 2) Then 'Get Y ValueIf MaxY - MinY >= 2 ThenIf MaxY - (picPictureNow.Top + 1) <= 1 ThenAdjust_Top = MinY - 1ElseAdjust_Top = picPictureNow.TopEnd IfGet_Y_Value = TrueExit FunctionEnd IfEnd IfGet_Y_Value = FalseEnd FunctionSub Global_Init()'全局初始化picBackGround.ClsimgPictureNext.Picture = LoadPicture("")picPictureNow.Visible = FalsetmrDrop.Enabled = FalseCommand1.Enabled = TrueCommand2.Enabled = FalseCall HScroll1_ChangetmrDrop.Interval = HScroll1.ValueLabel1.Caption = "速度:" + Str(600 - HScroll1.V alue) End SubSub Init()'每个方块的初始化过程picPictureNow.Visible = FalsetmrDrop.Enabled = FalseType_Now = Type_NextpicPictureNow.Picture = imgPictureNext.PictureimgPictureNowBackup.Picture = picPictureNow.PictureCall Sel_NextintRotate = 0picPictureNow.Left = 4picPictureNow.Top = 0picPictureNow.Visible = TruetmrDrop.Enabled = TruetmrDrop.Interval = HScroll1.ValueLabel1.Caption = "速度:" + Str(600 - HScroll1.V alue)Call HScroll1_ChangeEnd SubSub GetCoor()'获取一个方块的4 个点的坐标For i = 1 To 4 'initXs(i).cX = 0Xs(i).cY = 0Xs(i).cZ = FalseNextCurX = picPictureNow.Left + 1Select Case Type_NowCase 1 '长条If intRotate Mod 2 = 1 ThenXs(1).cX = CurXXs(1).cY = picPictureNow.Top + 1Xs(1).cZ = TrueFor i = 2 To 4Xs(i).cX = CurX + i - 1Xs(i).cY = picPictureNow.Top + 1Xs(i).cZ = TrueNextElseXs(1).cX = CurXXs(1).cY = picPictureNow.Top + 4Xs(1).cZ = TrueFor i = 2 To 4Xs(i).cX = CurXXs(i).cY = picPictureNow.Top + i - 1Xs(i).cZ = FalseNextEnd IfCase 2 '2字If intRotate Mod 2 = 1 ThenXs(1).cX = CurXXs(1).cY = picPictureNow.Top + 3Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 2Xs(2).cZ = TrueFor i = 3 To 4Xs(i).cX = CurX + i - 3Xs(i).cY = picPictureNow.Top + 5 - iXs(i).cZ = FalseNextElseXs(1).cX = CurXXs(1).cY = picPictureNow.Top + 1Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 2Xs(2).cZ = TrueXs(3).cX = CurX + 2Xs(3).cY = picPictureNow.Top + 2Xs(3).cZ = TrueXs(4).cX = CurX + 1Xs(4).cY = picPictureNow.Top + 1Xs(4).cZ = FalseEnd IfCase 3 '7字Select Case intRotate Mod 4Case 0Xs(1).cX = CurXXs(1).cY = picPictureNow.Top + 1Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 3Xs(2).cZ = TrueFor i = 3 To 4Xs(i).cX = CurX + 1Xs(i).cY = picPictureNow.Top + i - 2Xs(i).cZ = FalseNextCase 1Xs(1).cX = CurXXs(1).cY = picPictureNow.Top + 2Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 2Xs(2).cZ = TrueXs(3).cX = CurX + 2Xs(3).cY = picPictureNow.Top + 2Xs(3).cZ = TrueXs(4).cX = CurX + 2Xs(4).cY = picPictureNow.Top + 1Xs(4).cZ = FalseCase 2Xs(1).cX = CurXXs(1).cY = picPictureNow.Top + 3Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 3Xs(2).cZ = TrueFor i = 3 To 4Xs(i).cX = CurXXs(i).cY = picPictureNow.Top + i - 2Xs(i).cZ = FalseNextCase 3Xs(1).cX = CurXXs(1).cY = picPictureNow.Top + 2Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 1Xs(2).cZ = TrueXs(3).cX = CurX + 2Xs(3).cY = picPictureNow.Top + 1Xs(3).cZ = TrueXs(4).cX = CurXXs(4).cY = picPictureNow.Top + 1Xs(4).cZ = FalseEnd SelectCase 4 'T字Select Case intRotate Mod 4Case 0Xs(1).cX = CurXXs(1).cY = picPictureNow.Top + 2Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 2Xs(2).cZ = TrueXs(3).cX = CurX + 2Xs(3).cY = picPictureNow.Top + 2Xs(3).cZ = TrueXs(4).cX = CurX + 1Xs(4).cY = picPictureNow.Top + 1Xs(4).cZ = FalseCase 1Xs(1).cX = CurXXs(1).cY = picPictureNow.Top + 3Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 2Xs(2).cZ = TrueFor i = 3 To 4Xs(i).cX = CurXXs(i).cY = picPictureNow.Top + i - 2Xs(i).cZ = FalseNextCase 2Xs(1).cX = CurXXs(1).cY = picPictureNow.Top + 1Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 2Xs(2).cZ = TrueXs(3).cX = CurX + 2Xs(3).cY = picPictureNow.Top + 1Xs(3).cZ = TrueXs(4).cX = CurX + 1Xs(4).cY = picPictureNow.Top + 1Xs(4).cZ = FalseCase 3Xs(1).cX = CurXXs(1).cY = picPictureNow.Top + 2Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 3Xs(2).cZ = TrueFor i = 3 To 4Xs(i).cX = CurX + 1Xs(i).cY = picPictureNow.Top + i - 2Xs(i).cZ = FalseNextEnd SelectCase 5 '反7字Select Case intRotate Mod 4Case 0Xs(1).cX = CurXXs(1).cY = picPictureNow.Top + 3Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 1Xs(2).cZ = TrueFor i = 3 To 4Xs(i).cX = CurXXs(i).cY = picPictureNow.Top + i - 2Xs(i).cZ = FalseNextCase 1Xs(1).cX = CurXXs(1).cY = picPictureNow.Top + 1Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 1Xs(2).cZ = TrueXs(3).cX = CurX + 2Xs(3).cY = picPictureNow.Top + 2Xs(3).cZ = TrueXs(4).cX = CurX + 2Xs(4).cY = picPictureNow.Top + 1Xs(4).cZ = FalseCase 2Xs(1).cX = CurXXs(1).cY = picPictureNow.Top + 3Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 3Xs(2).cZ = TrueFor i = 3 To 4Xs(i).cX = CurX + 1Xs(i).cY = picPictureNow.Top + i - 2Xs(i).cZ = FalseNextCase 3Xs(1).cX = CurXXs(1).cY = picPictureNow.Top + 2Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 2Xs(2).cZ = TrueXs(3).cX = CurX + 2Xs(3).cY = picPictureNow.Top + 2Xs(3).cZ = TrueXs(4).cX = CurXXs(4).cY = picPictureNow.Top + 1Xs(4).cZ = FalseEnd SelectCase 6 '反2字If intRotate Mod 2 = 1 ThenXs(1).cX = CurXXs(1).cY = picPictureNow.Top + 2Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 3Xs(2).cZ = TrueFor i = 3 To 4Xs(i).cX = CurX + i - 3Xs(i).cY = picPictureNow.Top + i - 2Xs(i).cZ = FalseNextElseXs(1).cX = CurXXs(1).cY = picPictureNow.Top + 2Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 2Xs(2).cZ = TrueXs(3).cX = CurX + 2Xs(3).cY = picPictureNow.Top + 1Xs(3).cZ = TrueXs(4).cX = CurX + 1Xs(4).cY = picPictureNow.Top + 1Xs(4).cZ = FalseEnd IfCase 7 '田字Xs(1).cX = CurXXs(1).cY = picPictureNow.Top + 2Xs(1).cZ = TrueXs(2).cX = CurX + 1Xs(2).cY = picPictureNow.Top + 2Xs(2).cZ = TrueFor i = 3 To 4Xs(i).cX = CurX + i - 3Xs(i).cY = picPictureNow.Top + 1Xs(i).cZ = FalseNextEnd SelectEnd SubSub Judge_Full()'判断是否堆满R_V alue = picPictureNow.Top + 1 'MinYrx_value = picPictureNow.Top + picPictureNow.Height 'MaxYFor i = rx_value To R_Value Step -1If Total(1, i) And Total(2, i) And Total(3, i) And Total(4, i) And Total(5, i) And _Total(6, i) And Total(7, i) And Total(8, i) And Total(9, i) And Total(10, i) Then'如果一行已经堆满,则将此行上面的图象全部向下移动一点k = BitBlt(picBackGround.hDC, 0, 20, 200, (i - 1) * 20, picBackGround.hDC, 0, 0, vbSrcCopy)For j = i To 1 Step -1For k = 1 To 10Total(k, j) = Total(k, j - 1)Next kNext ji = i + 1End IfNext i'如果目前方块的顶点位置<=0 ,则表示全部堆满If picPictureNow.Top <= 1 ThenSelect Case MsgBox("你输了!想再试试吗?", 4 + 32)Case vbYesmnuGameNew_ClickCase ElseCall Global_InitEnd SelectEnd IfEnd Sub'判断方块能否翻转Function Judge_Rotate()Select Case Type_NowCase 1 '长条If intRotate Mod 2 = 1 ThenIf GetValue(0, 4) Then 'Get Y ValueIf MaxY - MinY >= 3 ThenAdjust_Top = MinY - 1Judge_Rotate = TrueExit FunctionEnd IfEnd IfJudge_Rotate = FalseExit FunctionElseIf GetValue(1, 4) Then 'Get X ValueIf MaxX - MinX >= 3 ThenIf MaxX - CurX <= 2 ThenAdjust_Left = MaxX - 3 - 1ElseIf CurX = MinX ThenAdjust_Left = CurX - 1ElseAdjust_Left = CurX - 1 - 1End IfEnd IfJudge_Rotate = TrueExit FunctionEnd IfEnd IfJudge_Rotate = FalseExit FunctionEnd IfCase 2 '2字If intRotate Mod 2 = 0 ThenJudge_Rotate = Get_Y_ValueExit FunctionElseJudge_Rotate = Get_X_ValueExit FunctionEnd IfCase 3 '7字Select Case intRotate Mod 4Case 0Judge_Rotate = Get_X_ValueExit FunctionCase 1Judge_Rotate = Get_Y_ValueExit FunctionCase 2Judge_Rotate = Get_X_ValueExit FunctionCase 3Judge_Rotate = Get_Y_ValueExit FunctionEnd SelectCase 4 'T字Select Case intRotate Mod 4Case 0Judge_Rotate = Get_Y_ValueExit FunctionCase 1Judge_Rotate = Get_X_ValueExit FunctionCase 2Judge_Rotate = Get_Y_ValueExit FunctionCase 3Judge_Rotate = Get_X_ValueExit FunctionEnd SelectCase 5 '反7字Select Case intRotate Mod 4Case 0Judge_Rotate = Get_X_ValueExit FunctionCase 1Judge_Rotate = Get_Y_ValueExit FunctionCase 2Judge_Rotate = Get_X_ValueExit FunctionCase 3Judge_Rotate = Get_Y_ValueExit FunctionEnd SelectCase 6 '反2字If intRotate Mod 2 = 0 ThenJudge_Rotate = Get_Y_ValueExit FunctionElseJudge_Rotate = Get_X_ValueExit FunctionEnd IfEnd SelectEnd FunctionFunction JudgeX_Left()'判断能否向左移动Call GetCoorFor i = 1 To 4On Error Resume NextIf Xs(i).cY > 0 ThenIf Total(Xs(i).cX - 1, Xs(i).cY) Or Xs(i).cX = 0 ThenJudgeX_Left = FalseExit FunctionEnd IfEnd IfNextJudgeX_Left = TrueEnd FunctionFunction JudgeX_Right()'判断能否向右移动GetCoorFor i = 1 To 4On Error Resume NextIf Xs(i).cY > 0 ThenIf Total(Xs(i).cX + 1, Xs(i).cY) Or Xs(i).cX = 10 ThenJudgeX_Right = FalseExit FunctionEnd IfEnd IfNextJudgeX_Right = TrueEnd Function'判断能否向下移动Sub JudgeY()GetCoorFor i = 1 To 4If Xs(i).cZ ThenOn Error Resume NextIf Xs(i).cY > 0 ThenIf Total(Xs(i).cX, Xs(i).cY + 1) Or Xs(i).cY = 20 Then'如果不能移动,将4点位置的坐标设置为True,并将图形固定下来For j = 1 To 4Total(Xs(j).cX, Xs(j).cY) = TrueNext jpicBackGround.PaintPicture picPictureNow.Picture, picPictureNow.Left, picPictureNow.Top, picPictureNow.Width, picPictureNow.Height, , , , , vbSrcAndJudge_FullIf picPictureNow.Visible Then InitExit SubEnd IfEnd IfEnd IfNextEnd SubSub Sel_Next()'随机从7 个放块中选择一个RandomizeType_Next = Int((7 * Rnd) + 1)Select Case Type_NextCase 1imgPictureNext.Picture = LoadResPicture(11, 0)Case 2imgPictureNext.Picture = LoadResPicture(13, 0)Case 3imgPictureNext.Picture = LoadResPicture(15, 0)Case 4imgPictureNext.Picture = LoadResPicture(19, 0)Case 5imgPictureNext.Picture = LoadResPicture(23, 0)Case 6imgPictureNext.Picture = LoadResPicture(27, 0)Case 7imgPictureNext.Picture = LoadResPicture(29, 0)End SelectimgPictureNext.Move (picPictureNextBackGround.Width - imgPictureNext.Width) \ 2 - 30, (picPictureNextBackGround.Height - imgPictureNext.Height) \ 2 - 30End SubPrivate Sub cmdDisplay_Click()imgPictureNext.Visible = Not (imgPictureNext.Visible)If imgPictureNext.Visible ThencmdDisplay.Caption = "隐藏(&D)"ElsecmdDisplay.Caption = "显示(&S)"End IfEnd SubPrivate Sub Command1_Click()mnuGameNew_ClickEnd SubPrivate Sub Command2_Click()tmrDrop.Interval = 0Command1.Enabled = TrueCommand2.Enabled = FalsefrmForm.ClsEnd SubPrivate Sub Command3_Click()EndEnd SubPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)'改变Case 的KeyCode 值就可以改变键盘控制按钮Select Case KeyCodeCase vbKeyLeftIf picPictureNow.Left - 1 >= 0 ThenJ_Value = JudgeX_LeftIf J_V alue ThenpicPictureNow.Picture = imgPictureNowBackup.Picturer = BitBlt(picPictureTemp.hDC, 0, 0, picPictureNow.Width * 20, picPictureNow.Height * 20, picBackGround.hDC, (picPictureNow.Left - 1) * 20, picPictureNow.Top * 20, vbSrcCopy)picPictureNow.Left = picPictureNow.Left - 1r = BitBlt(picPictureNow.hDC, 0, 0, picPictureNow.Width * 20, picPictureNow.Height * 20, picPictureTemp.hDC, 0, 0, vbSrcAnd)End IfEnd IfCase vbKeyRightIf picPictureNow.Left + picPictureNow.Width < picBackGround.ScaleWidth Then J_Value = JudgeX_RightIf J_V alue ThenpicPictureNow.Picture = imgPictureNowBackup.Picturer = BitBlt(picPictureTemp.hDC, 0, 0, picPictureNow.Width * 20, picPictureNow.Height * 20, picBackGround.hDC, (picPictureNow.Left + 1) * 20,picPictureNow.Top * 20, vbSrcCopy)picPictureNow.Left = picPictureNow.Left + 1r = BitBlt(picPictureNow.hDC, 0, 0, picPictureNow.Width * 20, picPictureNow.Height * 20, picPictureTemp.hDC, 0, 0, vbSrcAnd)End IfEnd IfCase vbKeyDownCall tmrDrop_TimerCase vbKeyUpIf Judge_Rotate ThenintRotate = intRotate + 1Select Case Type_NowCase 1 '长条If intRotate Mod 2 = 1 ThenpicPictureNow.Picture = LoadResPicture(12, 0)picPictureNow.Top = picPictureNow.Top + 3picPictureNow.Left = Adjust_LeftElsepicPictureNow.Picture = LoadResPicture(11, 0)picPictureNow.Top = Adjust_ToppicPictureNow.Left = picPictureNow.Left + 1End IfCase 2 '2字If intRotate Mod 2 = 1 ThenpicPictureNow.Picture = LoadResPicture(14, 0)picPictureNow.Top = Adjust_TopElsepicPictureNow.Picture = LoadResPicture(13, 0)picPictureNow.Top = picPictureNow.Top + 1picPictureNow.Left = Adjust_LeftEnd IfCase 3 '7字Select Case intRotate Mod 4Case 0picPictureNow.Picture = LoadResPicture(15, 0)picPictureNow.Top = Adjust_TopCase 1picPictureNow.Picture = LoadResPicture(16, 0)picPictureNow.Top = picPictureNow.Top + 1picPictureNow.Left = Adjust_LeftCase 2picPictureNow.Picture = LoadResPicture(17, 0)picPictureNow.Top = Adjust_TopCase 3picPictureNow.Picture = LoadResPicture(18, 0)picPictureNow.Top = picPictureNow.Top + 1picPictureNow.Left = Adjust_LeftEnd SelectCase 4 'T字Select Case intRotate Mod 4Case 0picPictureNow.Picture = LoadResPicture(19, 0)picPictureNow.Top = picPictureNow.Top + 1picPictureNow.Left = Adjust_LeftCase 1picPictureNow.Picture = LoadResPicture(20, 0)picPictureNow.Top = Adjust_TopCase 2picPictureNow.Picture = LoadResPicture(21, 0)picPictureNow.Top = picPictureNow.Top + 1picPictureNow.Left = Adjust_LeftCase 3picPictureNow.Picture = LoadResPicture(22, 0)picPictureNow.Top = Adjust_TopEnd SelectCase 5 '反7字Select Case intRotate Mod 4Case 0picPictureNow.Picture = LoadResPicture(23, 0)picPictureNow.Top = Adjust_TopCase 1picPictureNow.Picture = LoadResPicture(24, 0)picPictureNow.Top = picPictureNow.Top + 1picPictureNow.Left = Adjust_LeftCase 2picPictureNow.Picture = LoadResPicture(25, 0)picPictureNow.Top = Adjust_TopCase 3picPictureNow.Picture = LoadResPicture(26, 0)picPictureNow.Top = picPictureNow.Top + 1picPictureNow.Left = Adjust_LeftEnd SelectCase 6 '反2字If intRotate Mod 2 = 1 ThenpicPictureNow.Picture = LoadResPicture(28, 0)picPictureNow.Top = Adjust_TopElsepicPictureNow.Picture = LoadResPicture(27, 0)picPictureNow.Top = picPictureNow.Top + 1picPictureNow.Left = Adjust_LeftEnd IfEnd SelectimgPictureNowBackup.Picture = picPictureNow.PictureEnd IfEnd SelectEnd SubPrivate Sub HScroll1_Change()If tmrDrop.Interval <> 0 Then'改变tmrDrop 的Interval 值即可改变游戏速度tmrDrop.Interval = HScroll1.ValueLabel1.Caption = "速度:" + Str(600 - HScroll1.Value)End IfEnd SubPrivate Sub mnuGameAbout_Click()MsgBox "VB课程设计实例" + Chr$(13) + Chr$(10) + "——俄罗斯方块" + Chr$(13) + Chr$(10) + " 2006.8", 0, "关于俄罗斯方块"End SubPrivate Sub mnuGameExit_Click()EndEnd SubPrivate Sub mnuGameNew_Click()'将10x20 的坐标全部设置为空For i = 1 To 10For j = 0 To 20Total(i, j) = FalseNext jNext iCurX = 0picBackGround.ClsSel_NextInitCommand1.Enabled = FalseCommand2.Enabled = TrueEnd SubPrivate Sub mnuHelpKey_Click()'游戏规则MsgBox "←控制方块向左移动" + vbCrLf _+ "→控制方块向右移动" _+ vbCrLf + "↓控制方块向下快速移动" _+ vbCrLf + "↑控制方块的顺时针方向的翻转", 64, "游戏规则"End SubPrivate Sub tmrDrop_Timer()'方块下落Call JudgeYpicPictureNow.Picture = imgPictureNowBackup.Picturer = BitBlt(picPictureTemp.hDC, 0, 0, picPictureNow.Width * 20, picPictureNow.Height * 20, picBackGround.hDC, picPictureNow.Left * 20, (picPictureNow.Top + 1) * 20, vbSrcCopy) picPictureNow.Top = picPictureNow.Top + 1r = BitBlt(picPictureNow.hDC, 0, 0, picPictureNow.Width * 20, picPictureNow.Height * 20, picPictureTemp.hDC, 0, 0, vbSrcAnd)DoEventsIf picPictureNow.Top + picPictureNow.Height > picBackGround.ScaleHeight Then InitEnd Sub。
俄罗斯方块游戏的设计与实现
俄罗斯方块游戏的设计与实现首先,俄罗斯方块的游戏逻辑设计是关键。
游戏逻辑包括方块的生成、下落、旋转和消除等。
方块的生成需要随机生成不同形状的方块,在游戏开始时或者当前方块被消除后生成新的方块。
方块的下落和旋转需要根据玩家的输入进行处理,以及判断方块是否可以继续下落或旋转。
方块的消除是通过判断是否有一整行都被方块占满,如果是,则将该行消除,并向下移动上面的方块。
其次,俄罗斯方块的图形界面设计也需要考虑。
界面需要包括游戏区域、分数显示、下一个方块预览和游戏结束界面等。
游戏区域是方块下落的主要区域,需要有完善的显示和交互逻辑。
分数显示是用来展示玩家的得分情况,可以根据消除的行数计算得分。
下一个方块预览可以帮助玩家提前预知下一个方块的形状,方便策略调整。
游戏结束界面包括显示得分、重新开始游戏和退出游戏等选项。
此外,用户交互也是俄罗斯方块的重要设计与实现。
用户交互包括键盘输入和鼠标输入等方式。
键盘输入主要用来控制方块的移动和旋转,比如方向键用来移动方块的位置,空格键用来控制方块的旋转。
鼠标输入可以用来点击界面上的按钮,比如重新开始、退出游戏等。
最后,俄罗斯方块的实现还需要考虑动画效果。
动画效果可以增加游戏的趣味性和可玩性,比如方块下落时可以添加一个平滑的动画效果,方块消除时可以有特效动画等。
动画效果的实现需要通过定时器、缓动函数等技术手段来控制。
综上所述,俄罗斯方块的设计与实现涉及到游戏逻辑、图形界面、用户交互和动画效果等方面。
在设计过程中需要注意各部分的配合和完善,力求给玩家带来良好的游戏体验。
VB 俄罗斯方块
VB课程设计报告(附:源代码在后面)-------俄罗斯方块我的游戏初始界面如左一、功能介绍①启动程序,单击“开始”或“回车”键开始游戏②游戏开始后从网格顶部下落“T”字型、“L”字型、反“L”字型、“方块”和“长条”型的5种形状之一,不同的形状以随机颜色出现,出现的时的方向也是随机的。
同一个形状有4种不同的方向③使用“选项”菜单命令可以弹出“选项”对话框。
通过“选项”对话框为用户提供两套按键方案。
保证不同左右手习惯的用户或键盘上有坏键的用户可以方便的进行方块的移动和旋转。
默认情况下,使用“←”和“→”键左右移动方块。
使用“↑”键旋转,使用“↓”键加速下落。
通过“选项”对话框可以设置方块是顺时针还是逆时针方向④通过“选项”对话框还可以选择是否显示下一个形状的提示。
默认状态下,“下一个”区域会显示下一个即将出现的形状,如果关掉此功能,游戏时的难度会更大一些。
通过“选项”对话框可以指定加速下落时一次下落的格数。
若此设置值大于20,表示一次下落到底⑤游戏过程中,可以单击窗口右下方的“暂停”与“继续”,也可以使用“回车”键控制游戏的暂停和继续。
通过菜单命令打开“选项”对话框时,程序自动进入暂停的状态。
记分遵循以下规则,一次消去1行加100分、2行加300分、3行加700分、4行加1500分。
程序自动记录并显示最高分。
得分每增加2000分,程序自动将方块下落速度提高一档。
即分数越高,速度越大⑥程序能够保存用户通过“选项”对话框的设置,使之能在下一次运行时仍然有效亮点:①游戏界面增加了表情加载,不同情况下显示不同的表情,增加了游戏趣味性②玩家可以通过滚动条手动设置方块下落速度,可以直接挑战高难度③游戏增加了背景音乐,玩家在游戏的同时还可以享受轻音乐二﹑课程设计详细介绍程序主要由两个窗体构成:Form1(主窗口)、Form2(选项窗口)。
Form1:该窗体为程序主界面,难点在于运用绘图方法绘制网格。
在程序运行过程中,该窗体将展示出程序的大部分功能,包括方块下落、旋转、移动一系列动作,预览方块,调出设置界面等基本功能以及程序的亮点功能—调速、加载表情图片。
俄罗斯方块游戏程序设计
俄罗斯方块游戏程序设计一、游戏界面设计二、方块的表示在俄罗斯方块游戏中,方块由若干个小方块组成。
通常使用一个二维数组来表示方块的形状,其中数组的值表示该位置是否有方块。
在每次方块移动或旋转时,我们可以通过修改该数组的值来改变方块的位置和形状。
三、方块的移动和旋转玩家可以通过按键来控制方块的移动和旋转。
例如,按下向下键可以使得方块在垂直方向上向下移动一格,按下向左键可以使得方块在水平方向上向左移动一格。
为了实现这样的控制,我们需要在游戏程序中监听键盘事件,并在接收到事件后更新方块的位置。
在旋转方面,我们可以通过维护一个旋转矩阵来实现方块的旋转。
该矩阵用于描述将方块顺时针或逆时针旋转90度后的形状。
在每次旋转时,我们可以通过矩阵相乘的方式来改变方块的形状。
四、方块的碰撞检测在俄罗斯方块游戏中,将方块堆叠到一定高度后,会出现方块无法再次下落的情况。
这时,我们需要检测方块是否与已堆叠的方块发生了碰撞。
碰撞检测可以通过比较方块的位置和值来实现。
如果方块的位置超出了游戏界面的边界,或者与已堆叠的方块重叠了,那么就说明发生了碰撞。
五、消行和得分计算当一行方块被填满后,该行会被消除,并获得相应的得分。
消行操作可以通过遍历方块矩阵,检测是否有一行的方块都被填满来实现。
如果有,我们可以将该行删除,并将上方的方块下移一行。
同时,根据消除的行数来计算得分。
通常,消除的一行得一定得分,而连续消除多行得分会有更高的加成。
六、游戏结束条件在俄罗斯方块游戏中,当方块堆叠到达游戏界面的上方时,游戏将结束。
为了实现游戏结束的判断,我们可以在每次方块下落时,检测方块的位置是否超出了游戏界面的边界。
如果发生了越界,就表示游戏结束。
七、游戏逻辑和循环最后,我们需要将游戏逻辑和界面显示整合到一起。
通常,我们使用一个无限循环来控制游戏的进行,每次循环时更新方块的位置,检测碰撞和消行等操作,并在游戏界面上显示最新的方块和得分。
总结:俄罗斯方块游戏的程序设计需要考虑到游戏界面设计、方块的表示、方块的移动和旋转、碰撞检测、消行和得分计算、游戏结束条件以及游戏逻辑和循环等方面。
俄罗斯方块程序课程设计
俄罗斯方块程序课程设计一、课程目标知识目标:1. 学生能理解俄罗斯方块游戏的规则和基本原理。
2. 学生能掌握计算机编程语言的基本语法和结构,如变量、循环、条件语句等。
3. 学生能运用所学知识编写一个简单的俄罗斯方块程序。
技能目标:1. 学生能够运用逻辑思维和问题解决能力,分析游戏规则并进行程序设计。
2. 学生能够通过编程实践,培养代码编写和调试的能力。
3. 学生能够与他人合作,进行团队沟通和协作,共同完成程序开发。
情感态度价值观目标:1. 学生培养对计算机编程的兴趣,激发创造力和创新能力。
2. 学生通过编程实践,培养解决问题的自信心和耐心。
3. 学生在团队合作中学会互相尊重、倾听他人意见,培养良好的团队协作精神。
课程性质:本课程为信息技术学科,结合编程教育,旨在培养学生的逻辑思维、问题解决能力和团队合作意识。
学生特点:学生处于初中年级,具备一定的计算机操作基础,对游戏有浓厚兴趣,但编程经验有限。
教学要求:教师应注重引导学生从游戏兴趣出发,激发学生的学习动机,通过实际操作和实践,培养学生的编程技能和合作能力。
同时,注重个别差异,给予不同学生个性化的指导和支持。
通过本课程的学习,使学生能够将所学知识应用于实际编程任务中,达到预期的学习成果。
二、教学内容1. 俄罗斯方块游戏原理介绍:- 游戏规则- 游戏界面设计2. 编程语言基础:- 变量和数据类型- 运算符和表达式- 循环结构(for循环、while循环)- 条件语句(if-else分支)3. 编程实践:- 俄罗斯方块程序设计- 游戏窗口创建- 方块形状和移动逻辑- 碰撞检测与消除逻辑- 游戏得分与结束判定4. 团队合作与沟通:- 项目任务分配- 团队协作与交流- 代码整合与调试5. 教学内容安排与进度:- 第一周:游戏原理介绍,编程语言基础学习- 第二周:循环结构和条件语句学习,设计方块移动逻辑- 第三周:碰撞检测与消除逻辑编写,游戏得分与结束判定- 第四周:团队合作,完成整个俄罗斯方块程序本教学内容参考教材相关章节,结合课程目标进行系统组织,确保学生在掌握编程基础的同时,能够独立编写俄罗斯方块程序,并培养团队合作能力。
vb 俄罗斯方块设计程序及分析
************* 俄罗斯方块DIY ***************键盘控制方法:1.左右光标键控制方块左右移动;2.上光标键控制方块顺时针旋转90度;3.下光标键控制方块加速向下移动。
设计过程:(一) 在VB6.0中新建一个标准EXE工程(二) 建立一个窗体,窗体属性设置如下:名称= frmErsCaption = "俄罗斯方块1.12"(三) 在窗体上添加两个图片框,属性设置如下:(1)名称= picPlayAutoRedraw = TrueBackColor = &H00FF0000& '蓝色(2)名称= picNextAutoRedraw = TrueBackColor = &H00FF0000& '蓝色(四) 在窗体上再添加一个标签,属性设置如下:名称= lblFenShu(五) 用菜单编辑器制作如下菜单:(1)一级菜单项:标题= "文件(&F)"名称= mnuSet下属二级菜单项:标题= "退出"名称= mnuExit(2)一级菜单项:标题= "帮助(&H)"名称= mnuHelp下属二级菜单项:标题= "操作提示"名称= mnuTopic(六) 在窗体代码窗口输入如下代码:Option ExplicitPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) '按键代码传入Main()主程序中gKeyRef = KeyCodeEnd SubPrivate Sub Form_Load()Me.Top=0Me.KeyPreview = TruepicPlay.ScaleMode = 3 'PixelpicNext.ScaleMode = 3 'PixelEnd SubPrivate Sub Form_Unload(Cancel As Integer)EndEnd SubPrivate Sub mnuExit_Click()'退出Unload MeEnd SubPrivate Sub mnuTopic_Click()Dim Msg As StringMsg = "键盘控制方法:" & vbCrLfMsg = Msg & "1.左右光标键控制方块左右移动;" & vbCrLfMsg = Msg & "2.上光标键控制方块顺时针旋转90度;" & vbCrLfMsg = Msg & "3.下光标键控制方块加速向下移动。
VB版俄罗斯方块
目录一、课程设计的目的与要求 (2)二、题目分析 (2)2.1提供游戏操作画面 (2)2.2提供游戏功能 (2)2.3程序输出 (3)三、设计思路 (4)3.1数据结构设计 (4)3.2界面设计 (7)3.3操作代码设计 (7)四、调试过程 (8)4.1界面设计实现 (8)4.2操作代码实现 (10)4.3函数和过程主要调用关系 (19)五、运行结果 (21)六、课程设计总结 (24)七、参考文献 (24)八、附录 (24)一、课程设计的目的与要求俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。
要求利用VB编写俄罗斯方块游戏。
二、题目分析俄罗斯方块游戏软件的功能有:2.1提供游戏操作画面即给出游戏操作软件的主界面,这也是程序接收游戏者输入的操作界面。
如图所示:2.2提供游戏功能游戏是控制7种形状的下坠物落入游戏区。
形状4形状56形状1游戏用键盘操作控制,其中按J,下坠物左移一格;按L,下坠物右移一格;按K,下坠物逆时针旋转90度;按I,下坠物下降速度加快一倍。
假设本程序的游戏规则是:(a)游戏时,游戏区域上方不断地出现预定义游戏的下坠物。
下坠物会不断地往下坠,直到它接触到游戏区域的底部或其他之前已经累叠起来的下坠物。
(b)当一个下坠物到达游戏区域底部后,它将占据游戏区域的相应位置,并稳定住。
(c)当游戏区域的某一行被下坠物填满,则该行的所有下坠物被消除,垒在其上的下坠物会自动下降,占据该行空间。
(d)下坠物在下坠过程中可以被控制,发生旋转。
(e)游戏结束条件是:①下坠物累叠到游戏区域的顶部,即某列的下坠物“顶满”游戏区。
②游戏者单击“Esc”按钮,强制结束游戏。
2.3程序输出提供游戏操作的统计信息。
假设本程序在游戏者操作及结束时,提供如下输出信息,帮助游戏者了解程序状态。
(a)在游戏时,提前显示出下一个下坠物,方便游戏者规划好正在下坠的游戏块的放置位置。
俄罗斯方块课程设计报告
俄罗斯方块课程设计报告一、课程设计目的本课程设计旨在通过学习俄罗斯方块游戏的开发,提高学生的编程能力和游戏开发能力,同时培养学生的团队协作能力和创新思维能力。
二、课程设计内容1. 课程介绍介绍俄罗斯方块游戏的历史和基本玩法,以及本课程设计的目的和内容。
2. 编程基础介绍编程语言的基本语法和数据类型,以及常用的编程工具和开发环境。
3. 游戏开发基础介绍游戏开发的基本概念和流程,包括游戏设计、图形渲染、物理引擎等。
4. 俄罗斯方块游戏开发学生将分成小组,每个小组负责开发一个俄罗斯方块游戏。
课程将涵盖以下内容:(1)游戏设计:包括游戏规则、游戏界面、游戏音效等。
(2)图形渲染:使用图形库实现游戏界面的绘制和更新。
(3)物理引擎:使用物理引擎实现方块的运动和碰撞检测。
(4)游戏逻辑:实现游戏的逻辑控制,包括方块的生成、移动、旋转、消除等。
(5)游戏优化:优化游戏性能,提高游戏体验。
5. 课程总结总结本课程的学习成果和经验,分享学生的游戏作品,并讨论游戏开发的未来发展方向。
三、课程设计要求1. 学生需要具备一定的编程基础,熟悉至少一种编程语言。
2. 学生需要具备一定的游戏开发基础,熟悉至少一种游戏引擎或图形库。
3. 学生需要分组完成一个俄罗斯方块游戏的开发,每个小组需要有至少3名成员。
4. 学生需要按时提交作业和项目,参加课堂讨论和评估。
四、课程设计评估1. 课堂表现(20%):包括参与课堂讨论、提问和回答问题、课堂作业等。
2. 项目评估(60%):包括游戏的功能、界面、性能、创新等方面的评估。
3. 个人贡献(20%):包括个人在小组中的贡献、代码质量、文档编写等方面的评估。
五、课程设计参考资料1. 《Python编程从入门到实践》2. 《Unity游戏开发实战》3. 《OpenGL编程指南》4. 《游戏引擎架构》5. 《游戏设计基础》6. 《游戏开发实战》7. 《游戏编程模式》8. 《游戏开发中的数学》9. 《游戏开发中的物理学》10. 《游戏开发中的人工智能》。
俄罗斯方块设计报告
"俄罗斯方块"设计报告我所选择做的题目是俄罗斯方块。
俄罗斯方块是一种很受欢迎的电子游戏,在手机,游戏机,电子辞典等中都常见到。
自己从小到大也玩了不少,游戏很经典,但是自己从未想过这个游戏到底是怎样生成的呢?到底是怎样的程序过程让这个游戏顺利进行的?出于好奇,我就选择了此题,让自己亲自来解答这个疑问。
这次在课程设计时选择它是因为这个游戏覆盖了较多vb知识点,如:绘图,键盘事件处理,定时器控件,多模块程序设计,文本文件的读写等等。
当然在设计过程中我遇到了很多困难,即使如此,我还是在慢慢的摸索着,和同学讨论,问老师让我逐步解决了一些困难。
在游戏的设计上,我感触颇深。
收获也很多。
首先来说说相对较简单的frmOption窗体吧。
为了增加游戏模式的多方式使用性,我增加了诸如所使用按键组合、旋转方向、是否提示下一个图像以及快速下滑的距离等功能,将这四组选项都放于另一个窗体frmOption中并用不同的控件来对应游戏者的选项,比如将按键组合方式放于框架中并用单选框来切换。
当然这些选项还是需要在主游戏窗体中得以反映,所以这里需要定义四个全局变量,整数型变量qucDownDis用于表达一次加速下滑的距离,而逻辑变量blnrotDir、blnNextShow、blnKey分别表示的是旋转方向、是否显示下一个图像、按键组合方式,并在点击“确定”事件后修改并使用游戏者的选择,如下Private Sub OKButton_Click()frmMain.blnrotDir = optClockWise.ValuefrmMain.blnKey = option3.V aluefrmMain.blnNextShow = chkShowNext.ValuefrmMain.qucDownDis = Val(Text1)Unload MeEnd Sub因为游戏时候显示的界面应为窗体frmMain,因而使用了菜单编辑器,增加了“游戏设置”按键用来调出frmOption窗体,Private Sub settings_Click()Timer1.Enabled = FalseStart.Caption = "继续"frmOption.Show 1, MeEnd Sub这里需要注意的是选项窗体显示时游戏理应进入暂停,计时器的Enabled属性来实现游戏的暂停与进行。
俄罗斯方块游戏程序设计
俄罗斯方块游戏程序设计报告学号:姓名:难度:****知识点:(1)绘图(2)键盘事件处理(3)定时器控件(4)多模块程序设计(5)文本文件的读写1.功能要求:(1)启动程序,单击“开始”或“回车”键开始游戏。
不同形状以随机颜色出现,出现时的方向是随机的;(2)使用“选项”菜单画框提供按键方案;(3)游戏过程中可以单击窗口右下角的“暂停”和“继续”,也可使用“回车”键控制,打开“选项”对话框时,程序自动进入暂停状态;(4)计分遵循一次消去一行加一百,两行三百,三行七百,四行一千五,程序自动记录并显示历史的最高分;(5)得分每增加2000分,程序自动将方块下落速度提高一档。
2.需要解决的疑难问题和方法:(1)本程序在模块中定义变量:Private blnGrid(0 To 19, 0 To 9) As Boolean '网格Private lngColor(0 To 19, 0 To 9) As Long '网格绘制颜色Private blnBlock(0 To 4, 0 To 3, 0 To 3, 0 To 3) As Boolean '五种方块的四种不同方位Private blnStarted As Boolean '是否已开始玩Dim intTypeCur As Integer '当前方块的类型Dim lngColorCur As Long '当前方块的颜色Dim intOrieCur As Integer '当前方块的方位Dim intOrieNext As Integer '当前方块的下一个方位Dim intXCur As Integer '当前方块的当前位置Dim intYCur As IntegerDim intXNext As Integer '当前方块的下一个位置Dim intYNext As IntegerPublic intDownDistance As Integer '快速下降时的下降距离Public blnClockWise As Boolean '方块旋转方向Public blnShowNext As Boolean '是否显示下一个方块Public blnScheme As Boolean '按键方案Dim lngScore As Long '得分Dim intTypeNew As Integer '下一个方块的类型Dim lngColorNew As Long '下一个方块的颜色Dim intOrieNew As Integer '下一个方块的方位Dim lngHighScore As LongDim blnRedraw As Boolean(2)画10×20的网格:Dim i As Integer, j As Integer'去掉旧图象For i = 0 To 3If i + intYCur >= 0 And i + intYCur <= 19 Then '如果在大方框外,则不绘制For j = 0 To 3If j + intXCur >= 0 And j + intXCur <= 9 ThenIf (j + intXCur >= 0) And (j + intXCur <= 9) And (blnBlock(intTypeCur, intOrieCur, i, j)) And Not blnGrid(i + intYCur, j + intXCur) ThenpicGrid.Line ((j + intXCur) * 20 + 2, (i + intYCur) * 20 + 2)-((j + intXCur) * 20 + 19, (i + intYCur) * 20 + 19), vbBlack, BpicGrid.Line ((j + intXCur) * 20 + 4, (i + intYCur) * 20 + 4)-((j + intXCur) * 20 + 17, (i + intYCur) * 20 + 17), vbWhite, BFEnd IfEnd IfNextEnd IfNext'画新图象For i = 0 To 3If i + intYNext >= 0 And i + intYNext <= 19 Then '如果在大方框外,则不绘制For j = 0 To 3If (j + intXNext >= 0) And (j + intXNext <= 9) And (blnBlock(intTypeCur, intOrieNext, i, j)) Then picGrid.Line ((j + intXNext) * 20 + 2, (i + intYNext) * 20 + 2)-((j + intXNext) * 20 + 19, (i + intYNext) * 20 + 19), lngColorCur, BpicGrid.Line ((j + intXNext) * 20 + 4, (i + intYNext) * 20 + 4)-((j + intXNext) * 20 + 17, (i + intYNext) * 20 + 17), lngColorCur, BFEnd IfNextEnd If(3)五种方块形状:'I 型方块数据blnBlock(0, 0, 0, 0) = False: blnBlock(0, 0, 0, 1) = False: blnBlock(0, 0, 0, 2) = True: blnBlock(0, 0, 0, 3) = False blnBlock(0, 0, 1, 0) = False: blnBlock(0, 0, 1, 1) = False: blnBlock(0, 0, 1, 2) = True: blnBlock(0, 0, 1, 3) = False blnBlock(0, 0, 2, 0) = False: blnBlock(0, 0, 2, 1) = False: blnBlock(0, 0, 2, 2) = True: blnBlock(0, 0, 2, 3) = False blnBlock(0, 0, 3, 0) = False: blnBlock(0, 0, 3, 1) = False: blnBlock(0, 0, 3, 2) = True: blnBlock(0, 0, 3, 3) = FalseblnBlock(0, 1, 0, 0) = False: blnBlock(0, 1, 0, 1) = False: blnBlock(0, 1, 0, 2) = False: blnBlock(0, 1, 0, 3) = False blnBlock(0, 1, 1, 0) = True: blnBlock(0, 1, 1, 1) = True: blnBlock(0, 1, 1, 2) = True: blnBlock(0, 1, 1, 3) = TrueblnBlock(0, 1, 3, 0) = False: blnBlock(0, 1, 3, 1) = False: blnBlock(0, 1, 3, 2) = False: blnBlock(0, 1, 3, 3) = FalseblnBlock(0, 2, 0, 0) = False: blnBlock(0, 2, 0, 1) = False: blnBlock(0, 2, 0, 2) = True: blnBlock(0, 2, 0, 3) = False blnBlock(0, 2, 1, 0) = False: blnBlock(0, 2, 1, 1) = False: blnBlock(0, 2, 1, 2) = True: blnBlock(0, 2, 1, 3) = False blnBlock(0, 2, 2, 0) = False: blnBlock(0, 2, 2, 1) = False: blnBlock(0, 2, 2, 2) = True: blnBlock(0, 2, 2, 3) = False blnBlock(0, 2, 3, 0) = False: blnBlock(0, 2, 3, 1) = False: blnBlock(0, 2, 3, 2) = True: blnBlock(0, 2, 3, 3) = FalseblnBlock(0, 3, 0, 0) = False: blnBlock(0, 3, 0, 1) = False: blnBlock(0, 3, 0, 2) = False: blnBlock(0, 3, 0, 3) = False blnBlock(0, 3, 1, 0) = False: blnBlock(0, 3, 1, 1) = False: blnBlock(0, 3, 1, 2) = False: blnBlock(0, 3, 1, 3) = FalseblnBlock(0, 3, 2, 0) = True: blnBlock(0, 3, 2, 1) = True: blnBlock(0, 3, 2, 2) = True: blnBlock(0, 3, 2, 3) = True blnBlock(0, 3, 3, 0) = False: blnBlock(0, 3, 3, 1) = False: blnBlock(0, 3, 3, 2) = False: blnBlock(0, 3, 3, 3) = False'反L 型方块数据blnBlock(1, 0, 0, 0) = False: blnBlock(1, 0, 0, 1) = True: blnBlock(1, 0, 0, 2) = True: blnBlock(1, 0, 0, 3) = TrueblnBlock(1, 0, 1, 0) = False: blnBlock(1, 0, 1, 1) = False: blnBlock(1, 0, 1, 2) = False: blnBlock(1, 0, 1, 3) = True blnBlock(1, 0, 2, 0) = False: blnBlock(1, 0, 2, 1) = False: blnBlock(1, 0, 2, 2) = False: blnBlock(1, 0, 2, 3) = FalseblnBlock(1, 0, 3, 0) = False: blnBlock(1, 0, 3, 1) = False: blnBlock(1, 0, 3, 2) = False: blnBlock(1, 0, 3, 3) = FalseblnBlock(1, 1, 0, 0) = False: blnBlock(1, 1, 0, 1) = False: blnBlock(1, 1, 0, 2) = True: blnBlock(1, 1, 0, 3) = True blnBlock(1, 1, 1, 0) = False: blnBlock(1, 1, 1, 1) = False: blnBlock(1, 1, 1, 2) = True: blnBlock(1, 1, 1, 3) = False blnBlock(1, 1, 2, 0) = False: blnBlock(1, 1, 2, 1) = False: blnBlock(1, 1, 2, 2) = True: blnBlock(1, 1, 2, 3) = False blnBlock(1, 1, 3, 0) = False: blnBlock(1, 1, 3, 1) = False: blnBlock(1, 1, 3, 2) = False: blnBlock(1, 1, 3, 3) = FalseblnBlock(1, 2, 0, 0) = False: blnBlock(1, 2, 0, 1) = True: blnBlock(1, 2, 0, 2) = False: blnBlock(1, 2, 0, 3) = FalseblnBlock(1, 2, 1, 0) = False: blnBlock(1, 2, 1, 1) = True: blnBlock(1, 2, 1, 2) = True: blnBlock(1, 2, 1, 3) = TrueblnBlock(1, 2, 2, 0) = False: blnBlock(1, 2, 2, 1) = False: blnBlock(1, 2, 2, 2) = False: blnBlock(1, 2, 2, 3) = FalseblnBlock(1, 2, 3, 0) = False: blnBlock(1, 2, 3, 1) = False: blnBlock(1, 2, 3, 2) = False: blnBlock(1, 2, 3, 3) = FalseblnBlock(1, 3, 0, 0) = False: blnBlock(1, 3, 0, 1) = False: blnBlock(1, 3, 0, 2) = False: blnBlock(1, 3, 0, 3) = True blnBlock(1, 3, 1, 0) = False: blnBlock(1, 3, 1, 1) = False: blnBlock(1, 3, 1, 2) = False: blnBlock(1, 3, 1, 3) = True blnBlock(1, 3, 2, 0) = False: blnBlock(1, 3, 2, 1) = False: blnBlock(1, 3, 2, 2) = True: blnBlock(1, 3, 2, 3) = True blnBlock(1, 3, 3, 0) = False: blnBlock(1, 3, 3, 1) = False: blnBlock(1, 3, 3, 2) = False: blnBlock(1, 3, 3, 3) = False'正L型方块数据blnBlock(2, 0, 0, 0) = False: blnBlock(2, 0, 0, 1) = True: blnBlock(2, 0, 0, 2) = True: blnBlock(2, 0, 0, 3) = TrueblnBlock(2, 0, 2, 0) = False: blnBlock(2, 0, 2, 1) = False: blnBlock(2, 0, 2, 2) = False: blnBlock(2, 0, 2, 3) = False blnBlock(2, 0, 3, 0) = False: blnBlock(2, 0, 3, 1) = False: blnBlock(2, 0, 3, 2) = False: blnBlock(2, 0, 3, 3) = FalseblnBlock(2, 1, 0, 0) = False: blnBlock(2, 1, 0, 1) = False: blnBlock(2, 1, 0, 2) = True: blnBlock(2, 1, 0, 3) = False blnBlock(2, 1, 1, 0) = False: blnBlock(2, 1, 1, 1) = False: blnBlock(2, 1, 1, 2) = True: blnBlock(2, 1, 1, 3) = False blnBlock(2, 1, 2, 0) = False: blnBlock(2, 1, 2, 1) = False: blnBlock(2, 1, 2, 2) = True: blnBlock(2, 1, 2, 3) = True blnBlock(2, 1, 3, 0) = False: blnBlock(2, 1, 3, 1) = False: blnBlock(2, 1, 3, 2) = False: blnBlock(2, 1, 3, 3) = FalseblnBlock(2, 2, 0, 0) = False: blnBlock(2, 2, 0, 1) = False: blnBlock(2, 2, 0, 2) = False: blnBlock(2, 2, 0, 3) = True blnBlock(2, 2, 1, 0) = False: blnBlock(2, 2, 1, 1) = True: blnBlock(2, 2, 1, 2) = True: blnBlock(2, 2, 1, 3) = True blnBlock(2, 2, 2, 0) = False: blnBlock(2, 2, 2, 1) = False: blnBlock(2, 2, 2, 2) = False: blnBlock(2, 2, 2, 3) = False blnBlock(2, 2, 3, 0) = False: blnBlock(2, 2, 3, 1) = False: blnBlock(2, 2, 3, 2) = False: blnBlock(2, 2, 3, 3) = FalseblnBlock(2, 3, 0, 0) = False: blnBlock(2, 3, 0, 1) = False: blnBlock(2, 3, 0, 2) = True: blnBlock(2, 3, 0, 3) = True blnBlock(2, 3, 1, 0) = False: blnBlock(2, 3, 1, 1) = False: blnBlock(2, 3, 1, 2) = False: blnBlock(2, 3, 1, 3) = True blnBlock(2, 3, 2, 0) = False: blnBlock(2, 3, 2, 1) = False: blnBlock(2, 3, 2, 2) = False: blnBlock(2, 3, 2, 3) = True blnBlock(2, 3, 3, 0) = False: blnBlock(2, 3, 3, 1) = False: blnBlock(2, 3, 3, 2) = False: blnBlock(2, 3, 3, 3) = False'T型方块数据blnBlock(3, 0, 0, 0) = False: blnBlock(3, 0, 0, 1) = True: blnBlock(3, 0, 0, 2) = True: blnBlock(3, 0, 0, 3) = True blnBlock(3, 0, 1, 0) = False: blnBlock(3, 0, 1, 1) = False: blnBlock(3, 0, 1, 2) = True: blnBlock(3, 0, 1, 3) = False blnBlock(3, 0, 2, 0) = False: blnBlock(3, 0, 2, 1) = False: blnBlock(3, 0, 2, 2) = False: blnBlock(3, 0, 2, 3) = False blnBlock(3, 0, 3, 0) = False: blnBlock(3, 0, 3, 1) = False: blnBlock(3, 0, 3, 2) = False: blnBlock(3, 0, 3, 3) = FalseblnBlock(3, 1, 0, 0) = False: blnBlock(3, 1, 0, 1) = False: blnBlock(3, 1, 0, 2) = True: blnBlock(3, 1, 0, 3) = False blnBlock(3, 1, 1, 0) = False: blnBlock(3, 1, 1, 1) = False: blnBlock(3, 1, 1, 2) = True: blnBlock(3, 1, 1, 3) = True blnBlock(3, 1, 2, 0) = False: blnBlock(3, 1, 2, 1) = False: blnBlock(3, 1, 2, 2) = True: blnBlock(3, 1, 2, 3) = False blnBlock(3, 1, 3, 0) = False: blnBlock(3, 1, 3, 1) = False: blnBlock(3, 1, 3, 2) = False: blnBlock(3, 1, 3, 3) = FalseblnBlock(3, 2, 0, 0) = False: blnBlock(3, 2, 0, 1) = False: blnBlock(3, 2, 0, 2) = True: blnBlock(3, 2, 0, 3) = False blnBlock(3, 2, 1, 0) = False: blnBlock(3, 2, 1, 1) = True: blnBlock(3, 2, 1, 2) = True: blnBlock(3, 2, 1, 3) = True blnBlock(3, 2, 2, 0) = False: blnBlock(3, 2, 2, 1) = False: blnBlock(3, 2, 2, 2) = False: blnBlock(3, 2, 2, 3) = False blnBlock(3, 2, 3, 0) = False: blnBlock(3, 2, 3, 1) = False: blnBlock(3, 2, 3, 2) = False: blnBlock(3, 2, 3, 3) = FalseblnBlock(3, 3, 0, 0) = False: blnBlock(3, 3, 0, 1) = False: blnBlock(3, 3, 0, 2) = True: blnBlock(3, 3, 0, 3) = False blnBlock(3, 3, 1, 0) = False: blnBlock(3, 3, 1, 1) = True: blnBlock(3, 3, 1, 2) = True: blnBlock(3, 3, 1, 3) = False blnBlock(3, 3, 2, 0) = False: blnBlock(3, 3, 2, 1) = False: blnBlock(3, 3, 2, 2) = True: blnBlock(3, 3, 2, 3) = False blnBlock(3, 3, 3, 0) = False: blnBlock(3, 3, 3, 1) = False: blnBlock(3, 3, 3, 2) = False: blnBlock(3, 3, 3, 3) = False'正方形型方块数据blnBlock(4, 0, 0, 0) = False: blnBlock(4, 0, 0, 1) = True: blnBlock(4, 0, 0, 2) = True: blnBlock(4, 0, 0, 3) = False blnBlock(4, 0, 1, 0) = False: blnBlock(4, 0, 1, 1) = True: blnBlock(4, 0, 1, 2) = True: blnBlock(4, 0, 1, 3) = False blnBlock(4, 0, 2, 0) = False: blnBlock(4, 0, 2, 1) = False: blnBlock(4, 0, 2, 2) = False: blnBlock(4, 0, 2, 3) = FalseblnBlock(4, 1, 0, 0) = False: blnBlock(4, 1, 0, 1) = True: blnBlock(4, 1, 0, 2) = True: blnBlock(4, 1, 0, 3) = False blnBlock(4, 1, 1, 0) = False: blnBlock(4, 1, 1, 1) = True: blnBlock(4, 1, 1, 2) = True: blnBlock(4, 1, 1, 3) = False blnBlock(4, 1, 2, 0) = False: blnBlock(4, 1, 2, 1) = False: blnBlock(4, 1, 2, 2) = False: blnBlock(4, 1, 2, 3) = False blnBlock(4, 1, 3, 0) = False: blnBlock(4, 1, 3, 1) = False: blnBlock(4, 1, 3, 2) = False: blnBlock(4, 1, 3, 3) = FalseblnBlock(4, 2, 0, 0) = False: blnBlock(4, 2, 0, 1) = True: blnBlock(4, 2, 0, 2) = True: blnBlock(4, 2, 0, 3) = False blnBlock(4, 2, 1, 0) = False: blnBlock(4, 2, 1, 1) = True: blnBlock(4, 2, 1, 2) = True: blnBlock(4, 2, 1, 3) = False blnBlock(4, 2, 2, 0) = False: blnBlock(4, 2, 2, 1) = False: blnBlock(4, 2, 2, 2) = False: blnBlock(4, 2, 2, 3) = False blnBlock(4, 2, 3, 0) = False: blnBlock(4, 2, 3, 1) = False: blnBlock(4, 2, 3, 2) = False: blnBlock(4, 2, 3, 3) = FalseblnBlock(4, 3, 0, 0) = False: blnBlock(4, 3, 0, 1) = True: blnBlock(4, 3, 0, 2) = True: blnBlock(4, 3, 0, 3) = False blnBlock(4, 3, 1, 0) = False: blnBlock(4, 3, 1, 1) = True: blnBlock(4, 3, 1, 2) = True: blnBlock(4, 3, 1, 3) = False blnBlock(4, 3, 2, 0) = False: blnBlock(4, 3, 2, 1) = False: blnBlock(4, 3, 2, 2) = False: blnBlock(4, 3, 2, 3) = False blnBlock(4, 3, 3, 0) = False: blnBlock(4, 3, 3, 1) = False: blnBlock(4, 3, 3, 2) = False: blnBlock(4, 3, 3, 3) = False 3.窗体和模块说明:本程序有两个窗体,为frmMain和frmOption,两个PictureBox,是picGrid和picNext,四个TextBox,十四个Label,两个CommandButton,四个OptionButton,一个CheckBox,六个Frame,三个Line,一个Timer。
VB 俄罗斯方块的设计
一、课程设计的目的与要求 (2)1.1、俄罗斯方块的要求 (2)1.2、俄罗斯方块设计的目的 (3)二、题目分析 (4)2.1、概要设计 (4)2.2、详细设计 (4)游戏区模块的设计 (5)控制区模块的设计 (5)三、设计思路 (6)3.1、系统流程的总设计 (6)3.2、游戏区模块的设计 (7)3.2.1、Bitblt函数参数的意义与用法 (7)3.2.2、俄罗斯方块的旋转 (8)3.2.3、如何实现方自动消除满行的方块 (9)3.2.4、随机从 7 个方块中选择一个 (10)3.2.5、设置每个模块的测试计 (11)3.3、整体游戏程序的结构设计 (11)3.4、程序设计 (13)四、调试过程 (14)4.1、设计游戏界面 (14)4.2、完善与改善游戏界面 (15)五、运行结果 (18)六、课程设计总结 (20)附录 (22)一、课程设计的目的与要求1.1、俄罗斯方块的要求俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分,俄罗斯方块游戏是一款适合大众的游戏软件,它适合不同年龄的人玩。
本软件要实现的功能如下:(1)游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。
(2)游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。
(3)级别设置:玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏的速度越快,难度越大。
游戏规则如下:(1)电脑随机产生4个小方块组成的不同形状的游戏块,从上往下降落。
(2)游戏面板的宽度为12(以小方块的宽度为单位),高度为22,当一行被12个小方块填满时,此行便会被自动消除。
(3)利用键盘上的左右箭头键可以控制游戏块的左移与右移。
(4)利用键盘上的向上箭头键可以控制游戏块的旋转。
(5)利用键盘上的向下箭头键可以控制游戏块的快速下落。
(6)当游戏块无法下落时,游戏结束。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、课程设计的目的与要求 (2)1.1、俄罗斯方块的要求 (2)1.2、俄罗斯方块设计的目的 (3)二、题目分析 (4)2.1、概要设计 (4)2.2、详细设计 (4)游戏区模块的设计 (5)控制区模块的设计 (5)三、设计思路 (6)3.1、系统流程的总设计 (6)3.2、游戏区模块的设计 (7)3.2.1、Bitblt函数参数的意义与用法 (7)3.2.2、俄罗斯方块的旋转 (8)3.2.3、如何实现方自动消除满行的方块 (9)3.2.4、随机从 7 个方块中选择一个 (10)3.2.5、设置每个模块的测试计 (11)3.3、整体游戏程序的结构设计 (11)3.4、程序设计 (13)四、调试过程 (14)4.1、设计游戏界面 (14)4.2、完善与改善游戏界面 (15)五、运行结果 (18)六、课程设计总结 (20)附录 (22)一、课程设计的目的与要求1.1、俄罗斯方块的要求俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分,俄罗斯方块游戏是一款适合大众的游戏软件,它适合不同年龄的人玩。
本软件要实现的功能如下:(1)游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。
(2)游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。
(3)级别设置:玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏的速度越快,难度越大。
游戏规则如下:(1)电脑随机产生4个小方块组成的不同形状的游戏块,从上往下降落。
(2)游戏面板的宽度为12(以小方块的宽度为单位),高度为22,当一行被12个小方块填满时,此行便会被自动消除。
(3)利用键盘上的左右箭头键可以控制游戏块的左移与右移。
(4)利用键盘上的向上箭头键可以控制游戏块的旋转。
(5)利用键盘上的向下箭头键可以控制游戏块的快速下落。
(6)当游戏块无法下落时,游戏结束。
(7)在屏幕上可以显示将出现的下一个游戏块。
1.2、俄罗斯方块设计的目的无可争议,《俄罗斯方块》是有史以来最伟大的游戏之一。
它是永恒的娱乐经典,但它实际上又和那些传统的经典娱乐方式不同,因为它的本质是电子化的,所以它的确属于现代产物。
《俄罗斯方块》举世闻名的游戏性,在该游戏新鲜出炉时就显得非常直观。
某些与坠落的玩具碎片和它们的形状有关的东西,使得哪怕新手也会很自然地企图把它们排列起来,并加以适当组合,就好似《俄罗斯方块》触动了我们某些内在的感官,使得哪怕是我们当中最杂乱无章的人也要把事情整理妥当。
在曾经发布过的所有游戏中,《俄罗斯方块》还被认为是仅有的一个能够真正吸引广泛人群的作品。
某些批评家也许会声称,《俄罗斯方块》要比过去二十年间出现的任何东西都要浪费人们的时间。
至于我们,则要欣然提名它为GameSpot评选出的历史上最伟大游戏之一。
为了怀念经典,也为了能够给大多的计算机用户在工作之余找到一个休闲、娱乐的一个方式,我们小组开始着手用VB语言开发一个经典的俄罗斯方块游戏。
关键字:游戏,模块,多媒体。
二、题目分析2.1、概要设计设计一款游戏,必然少不了流程图,与整个开发的逻辑。
流程图如图1所示:图1 俄罗斯方块的设计流程图2.2、详细设计游戏区模块的设计游戏区的流程设计如图2所示:图2 游戏区模块的设计流程控制区模块的设计游戏区的流程设计如图3所示:图3游戏区模块的设计流程三、设计思路结合游戏区与控制去模板的设计流程,可以得出系统总流程,如图4所示:3.1、系统流程的总设计3.2、游戏区模块的设计游戏区模块总体上划分为三个模块,分别为游戏开始模块、游戏退出模块、帮助模块。
一个游戏必须是要有游戏规则的。
其中的帮助就是教会我的玩法,以及其中的规则3.2.1、Bitblt函数参数的意义与用法函数功能:该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。
函数原型:BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop);参数:dcDest:指向目标设备环境的句柄。
nXDest:指定目标矩形区域左上角的X轴逻辑坐标。
nYDest:指定目标矩形区域左上角的Y轴逻辑坐标。
nWidth:指定源和目标矩形区域的逻辑宽度。
nHeight:指定源和目标矩形区域的逻辑高度。
hdcSrc:指向源设备环境的句柄。
nXSrc:指定源矩形区域左上角的X轴逻辑坐标。
nYSrc:指定源矩形区域左上角的Y轴逻辑坐标。
光栅操作代码:SrcCopy:将源矩形区域直接拷贝到目标矩形区域。
dwRop:指定光栅操作代码。
这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。
3.2.2、俄罗斯方块的旋转俄罗斯方块的旋转主要将方块的位置加以变换得到的,例如上述范例,长条型有两中样式,根据小方块的编号变动来实现整个造型的旋转,比如:If Judge_Rotate ThenintRotate = intRotate + 1Select Case Type_NowCase 1 '长条If intRotate Mod 2 = 1 ThenpicPictureNow.Picture = LoadResPicture(12, 0)picPictureNow.Top = picPictureNow.Top + 3picPictureNow.Left = Adjust_LeftElsepicPictureNow.Picture = LoadResPicture(11, 0)picPictureNow.Top = Adjust_ToppicPictureNow.Left = picPictureNow.Left + 1End If3.2.3、如何实现方自动消除满行的方块我们的这个俄罗斯方块游戏主要是利用command控件的visible属性完成效果的,其实在游戏区图形框可以看成是由许多的command小方块组成,方块运动的过程就是造型里方块显示或者隐藏,就像现在的霓虹灯效果一样,由时钟控件控制visible 属性改变的速度,上一层的消失,下一层的显示,这样,从视觉效果可以看到方块的下落运动效果。
方块在下落的过程中会自动判断每一行方块的visible属性,如果全部为true时,就会将这一行小方块的visible属性全部变成false,在将上面的小方块向下移动,利用for语句进行循环判断,将所有这样情况的行改变小方块visible属性。
当有多行同时出现这样情况时使用递归调用,实现连续消行。
具体程序代码如下:R_Value = picPictureNow.Top + 1 'MinYrx_value = picPictureNow.Top + picPictureNow.Height 'MaxYFor i = rx_value To R_Value Step -1If Total(1, i) And Total(2, i) And Total(3, i) And Total(4, i) And Total(5, i) And _Total(6, i) And Total(7, i) And Total(8, i) And Total(9, i) And Total(10, i) Then'如果一行已经堆满,则将此行上面的图象全部向下移动一点k = BitBlt(picBackGround.hDC, 0, 20, 200, (i - 1) * 20, picBackGround.hDC, 0, 0, vbSrcCopy)For j = i To 1 Step -1For k = 1 To 10Total(k, j) = Total(k, j - 1)Next kNext ji = i + 1End IfNext i3.2.4、随机从 7 个方块中选择一个使用Randomize函数来进行选择。
用number将Rnd函数的随机数生成器初始化,该随机数生成器给number一个新的种子值。
例如:RandomizeType_Next = Int((7 * Rnd) + 1)Select Case Type_NextCase 1imgPictureNext.Picture = LoadResPicture(11, 0) Case 2imgPictureNext.Picture = LoadResPicture(13, 0) Case 3imgPictureNext.Picture = LoadResPicture(15, 0) Case 4imgPictureNext.Picture = LoadResPicture(19, 0) Case 5imgPictureNext.Picture = LoadResPicture(23, 0) Case 6imgPictureNext.Picture = LoadResPicture(27, 0) Case 7imgPictureNext.Picture = LoadResPicture(29, 0)End Select3.2.5、设置每个模块的测试计在每个模块中的某个控件功能代码编写完成后,需要将他们分别测试,以便及时发现问题,并及时调整问题,在该模块中的所有控件的功能代码都完成之后,需要对它的总体功能进行测试。
如果出现问题,可以在该功能所在的代码区中进行修改,多次测试,直到没有错误为止。
3.3、整体游戏程序的结构设计1.进入游戏窗体——一进入此窗体中,在菜单中有“新游戏”“退出”“键盘”“关于”。
开始游戏了之后用户可一按上下左右键来进行游戏。
在帮助中有“键盘”和“关于”,可以帮助人们了解此游戏的方法与规则。
2模块——主要对空件和要用到的函数进行了定义。
如,BitBlt 函数。
3.相关文件——主要在外部把方块模型进行了绘制,在这里我们使用LoadResPicture( ) 来调用。
1.要实现游戏中各种方块的图形,然后对其进行控制,如翻转、移动。
1)根据游戏规则,游戏块的运动有各种方式,如下降时左右移动和旋转,其中翻转又根据不同的方块有不同的翻转次数,因此必须在程序代码中很好地区分这些情况。
2)定义程序中常用的变量,包括目前方块的坐标,下一个方块的坐标。
Dim t As Integer 't表示c(2)小方块纵坐标Dim l As Integer 'l表示c(2)小方块横坐标Dim tt As Integer 'tt表示cc(2)小方块纵坐标Dim ll As Integer 'll表示cc(2)小方块横坐标,均以方块的左上角坐标来描述方块位置。