VB语言程序设计报告
系(院):计算机科学与技术
专业班级:计科1006 学号(序号): 04101191(26)
学生姓名:杨娜
指导老师:王博
完成日期: 2012年5月26日
一.要求分析
俄罗斯方块游戏是一款适合大众的游戏软件,它适合不同年龄的人玩。本软件要实现的功能如下:
(1)游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。(2)游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。(3)级别设置:玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏的速度越快,难度越大。
二.概要设计
三.详细设计
1.游戏区模块
2.控制区模块
3.系统流程
4. 系统操作界面
5.游戏界面
四.编码实现
Dim GameNum(3) As Integer
Dim PreviewNum(3) As Integer
Dim PreviewSituation As Integer
Dim GameSituation As Integer
Dim LineNum As Integer
Dim t As Integer
'定义使方块不可见的过程
Private Sub HideFanku(HideNum As Integer)
'按参数确定隐藏游戏区或预览区方块
Select Case HideNum
'HideNum=0时使游戏区方块不可见
Case 0
Command1(GameNum(0)).Visible = False
Command1(GameNum(1)).Visible = False
Command1(GameNum(2)).Visible = False
Command1(GameNum(3)).Visible = False
'HideNum=1时使预览区方块不可见
Case 1
Command2(PreviewNum(0)).Visible = False
Command2(PreviewNum(1)).Visible = False
Command2(PreviewNum(2)).Visible = False
Command2(PreviewNum(3)).Visible = False
End Select
End Sub
'定义使方块可见的过程
Private Sub ShowFanku(ShowNum As Integer)
'按参数确定显示游戏区或预览区方块
Select Case ShowNum
'ShowNum=0时使游戏区方块可见
Case 0
Command1(GameNum(0)).Visible = True
Command1(GameNum(1)).Visible = True
Command1(GameNum(2)).Visible = True
Command1(GameNum(3)).Visible = True
'ShowNum=1时使预览区方块可见
Case 1
Command2(PreviewNum(0)).Visible = True
Command2(PreviewNum(1)).Visible = True
Command2(PreviewNum(2)).Visible = True
Command2(PreviewNum(3)).Visible = True
End Select
End Sub
Private Sub beginGame_Click()
Dim i As Integer
Dim j As Integer
'游戏区图片控件获得焦点
Picture1.SetFocus
'根据设置的游戏速度来定义方块的下降速度
Timer2.Interval = 1000 / Val(Text2.Text)
'根据设置的游戏难度来产生不同的地基
For i = 19 To 20 - Val(Text1.Text) Step -1
For j = i * 10 To i * 10 + 9
If Rnd >= 0.5 Then Command1(j).Visible = True Next
Next
'引用预览区已经产生的方块
For i = 0 To 3
GameNum(i) = PreviewNum(i)
Next
'在游戏区显示方块
ShowFanku (0)
'获得当前方块状态
GameSituation = PreviewSituation
'打开计时器
Timer2.Enabled = True
'将预览区的方块设置为不可见
HideFanku (1)
'在预览区重新产生方块
LoadFanku
ShowFanku (1)
StopGame.Enabled = True
End Sub
Private Sub Command3_Click()
End Sub
'退出游戏菜单
Private Sub ExitGame_Click()
End
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If t = 0 Then
HideFanku (0)
Select Case KeyCode
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''
'点击向左键
Case vbKeyLeft
If LeftAble() = True Then
For j = 0 To 3
Command1(GameNum(j) - 1).Visible = True
GameNum(j) = GameNum(j) - 1
Next j
End If
ShowFanku (0)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''
'点击向下键
Case vbKeyDown
If DownAble() = True Then
For j = 0 To 3
Command1(GameNum(j) + 10).Visible = True
GameNum(j) = GameNum(j) + 10
Next j
End If
ShowFanku (0)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''
'点击向右键
Case vbKeyRight
If RightAble() = True Then
For j = 0 To 3
Command1(GameNum(j) + 1).Visible = True
GameNum(j) = GameNum(j) + 1
Next j
End If
ShowFanku (0)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''
'点击旋转键(向上键)
Case vbKeyUp
ShowFanku (0)
Zhuan
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''
Case Else
ShowFanku (0)
End Select
End If
End Sub
Private Sub Form_Load()
Dim i As Integer
'创建游戏区的方块
For i = 1 To 199
Load Command1(i)
Next i
'在游戏区以10×20排列方块
For i = 0 To 199
Command1(i).Left = (i Mod 10)
Command1(i).Top = i \ 10
Command1(i).Visible = False
Next i
'创建预览区的方块
For i = 1 To 39
Load Command2(i)
Next i
'在预览区排列方块
For i = 0 To 39
Command2(i).Left = (i Mod 10) - 3
Command2(i).Top = i \ 10
Command2(i).Visible = False
Next i
Randomize
LoadFanku
ShowFanku (1)
End Sub
'级别菜单组,索引值从1开始
Private Sub grade_Click(Index As Integer)
Dim j As Integer
'取消所有级别的复选
For j = 1 To 5
grade(j).Checked = False
Next
'在当前选择的级别后打勾
grade(Index).Checked = True
'修改游戏设置中的级别
Text1.Text = Index
End Sub
'帮助菜单
Private Sub helpAbout_Click()
Dim Msg As String
Msg = "键盘控制方法:" & vbCrLf
Msg = Msg & "1.左右光标键控制方块左右移动。" & vbCrLf
Msg = Msg & "2.上光标键控制方块顺时针旋转90度。" & vbCrLf
Msg = Msg & "3.下光标键控制方块加速向下移动。" & vbCrLf & vbCrLf MsgBox Msg, vbOKOnly + vbQuestion, Me.Caption
End Sub
'继续游戏菜单
Private Sub ResumeGame_Click()
Timer2.Enabled = True
ResumeGame.Enabled = False
StopGame.Enabled = True
End Sub
'速度菜单组,索引值从1开始
Private Sub speed_Click(Index As Integer)
Dim j As Integer
'取消所有速度的复选
For j = 1 To 5
speed(j).Checked = False
Next
'在当前选择的速度后打勾
speed(Index).Checked = True
'修改游戏设置中的速度
Text2.Text = Index
End Sub
'暂停游戏菜单
Private Sub StopGame_Click()
Timer2.Enabled = False
ResumeGame.Enabled = True
StopGame.Enabled = False
End Sub
Private Sub Timer1_Timer()
'产生随机的RGB颜色,改变字体的颜色
Randomize
Label1.ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
End Sub
Private Sub LoadFanku()
'随机产生一种方块的过程
Select Case Int(Rnd * 6)
'长条型方块
Case 0
'长条型方块的两种变形
Select Case Int(Rnd * 2)
Case 0
PreviewNum(0) = 3
PreviewNum(1) = 4
PreviewNum(2) = 5
PreviewNum(3) = 6
PreviewSituation = 0
Case 1
PreviewNum(0) = 5
PreviewNum(1) = 15
PreviewNum(2) = 25
PreviewNum(3) = 35
PreviewSituation = 1
End Select
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''
'正方形方块
Case 1
PreviewNum(0) = 4
PreviewNum(1) = 5
PreviewNum(2) = 14
PreviewNum(3) = 15
PreviewSituation = 2
'正S型方块
Case 2
'正S型方块的两种变形
Select Case Int(Rnd * 2)
Case 0
PreviewNum(0) = 6
PreviewNum(1) = 5
PreviewNum(2) = 15
PreviewNum(3) = 14
PreviewSituation = 3
Case 1
PreviewNum(0) = 4
PreviewNum(1) = 14
PreviewNum(2) = 15
PreviewNum(3) = 25
PreviewSituation = 4
End Select
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''
'反S型方块
Case 3
'反S型方块的两种变形
Select Case Int(Rnd * 2)
Case 0
PreviewNum(0) = 4
PreviewNum(1) = 5
PreviewNum(2) = 15
PreviewNum(3) = 16
PreviewSituation = 5
Case 1
PreviewNum(0) = 5
PreviewNum(1) = 15
PreviewNum(2) = 14
PreviewNum(3) = 24
PreviewSituation = 6
End Select
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''
'T型方块
Case 4
'T型方块的四种变形
Select Case Int(Rnd * 4)
Case 0
PreviewNum(0) = 4
PreviewNum(1) = 5
PreviewNum(3) = 15
PreviewSituation = 7
Case 1
PreviewNum(0) = 5
PreviewNum(1) = 15
PreviewNum(2) = 25
PreviewNum(3) = 14
PreviewSituation = 8
Case 2
PreviewNum(0) = 16
PreviewNum(1) = 15
PreviewNum(2) = 14
PreviewNum(3) = 5
PreviewSituation = 9
Case 3
PreviewNum(0) = 24
PreviewNum(1) = 14
PreviewNum(2) = 4
PreviewNum(3) = 15
PreviewSituation = 10
End Select
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''
'正7字型方块
Case 5
'正7字型方块的四种变形
Select Case Int(Rnd * 4)
Case 0
PreviewNum(0) = 4
PreviewNum(1) = 5
PreviewNum(2) = 15
PreviewNum(3) = 25
PreviewSituation = 11
Case 1
PreviewNum(0) = 5
PreviewNum(1) = 15
PreviewNum(2) = 14
PreviewNum(3) = 13
PreviewSituation = 12
Case 2
PreviewNum(0) = 25
PreviewNum(1) = 24
PreviewNum(3) = 4
PreviewSituation = 13
Case 3
PreviewNum(0) = 14
PreviewNum(1) = 4
PreviewNum(2) = 5
PreviewNum(3) = 6
PreviewSituation = 14
End Select
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''
'反7字型方块
Case 6
'反7字型方块的四种变形
Select Case Int(Rnd * 4)
Case 0
PreviewNum(0) = 5
PreviewNum(1) = 4
PreviewNum(2) = 14
PreviewNum(3) = 24
PreviewSituation = 15
Case 1
PreviewNum(0) = 15
PreviewNum(1) = 5
PreviewNum(2) = 4
PreviewNum(3) = 3
PreviewSituation = 16
Case 2
PreviewNum(0) = 24
PreviewNum(1) = 25
PreviewNum(2) = 15
PreviewNum(3) = 5
PreviewSituation = 17
Case 3
PreviewNum(0) = 4
PreviewNum(1) = 14
PreviewNum(2) = 15
PreviewNum(3) = 16
PreviewSituation = 18
End Select
End Select
End Sub
Private Sub Timer2_Timer()
Dim j As Integer
Dim i As Integer
'隐藏当前位置的游戏区方块
HideFanku 0
'判断是否能够下降
If DownAble() = True Then
'将游戏区方块下移一行
For j = 0 To 3
GameNum(j) = GameNum(j) + 10
Next j
'显示新的方块位置
ShowFanku (0)
Else
'不能继续下降了
ShowFanku (0)
'引用自定义方法,判断是否消除满行
ClearLine
'判断方块是否叠至最上层
For i = 0 To 9
If Command1(i).Visible = True Then Exit For
Next
Dim myMsg As String
Dim myRef As Integer
If i < 10 Then
'如果到达最上层,则提示用记是否重新开始游戏
myMsg = "输了请不要灰心" & vbCrLf & "是否重新开始玩游戏?"
myRef = MsgBox(myMsg, vbYesNo + vbQuestion, "俄罗斯方块游戏")
'选择是
If myRef = vbYes Then
'将游戏区的方块全部隐藏
For i = 1 To 199
Command1(i).Visible = False
Next i
'积分清0
Text3.Text = "0"
LineNum = 0
'根据难度系数添加基数
For i = 19 To 20 - Val(Text1.Text) Step -1
For j = i * 10 To i * 10 + 9
If Rnd >= 0.5 Then Command1(j).Visible = True Next
Next
Else
'否则退出程序
End
End If
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''
'没有达到最上层,引用预览区已经产生的方块
For i = 0 To 3
GameNum(i) = PreviewNum(i)
Next
ShowFanku (0)
GameSituation = PreviewSituation
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''
'计算得分
Text3.Text = Str(Val(Text3.Text) + 100 * (2 ^ LineNum - 1))
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''
'根据积分判断是否升级
If Val(Right(Text3.Text, 4)) < Val(Right(Str(Val(Text3.Text) - 100 * (2 ^ LineNum - 1)), 4)) Then
Text2.Text = Str(Val(Text2.Text) + 1)
Timer2.Interval = 1000 / Val(Text2.Text)
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''
LineNum = 0
HideFanku (1)
LoadFanku
ShowFanku (1)
End If
End Sub
'定义消除整行的过程
Private Sub ClearLine()
'检查游戏区的各行
Dim i As Integer
Dim j As Integer
Dim k As Integer
For i = 190 To 10 Step -10
If Command1(i).Visible = True And _
Command1(i + 1).Visible = True And _
Command1(i + 2).Visible = True And _
Command1(i + 3).Visible = True And _
Command1(i + 4).Visible = True And _
Command1(i + 5).Visible = True And _
Command1(i + 6).Visible = True And _
Command1(i + 7).Visible = True And _
Command1(i + 8).Visible = True And _
Command1(i + 9).Visible = True Then
For j = i + 4 To i Step -1
t = 1
Command1(j).Visible = False
Command1(2 * i + 9 - j).Visible = False
For k = 1 To 4000
DoEvents
Next
t = 0
Next
LineNum = LineNum + 1
For j = i - 1 To 0 Step -1
If Command1(j).Visible = True Then
Command1(j).Visible = False
Command1(j + 10).Visible = True
End If
Next
'为了实现连消数行,这里使用递归调用
ClearLine
End If
Next
End Sub
'自定义函数,确定方块是否能下降
Private Function DownAble() As Boolean
If GameNum(0) < 190 And GameNum(1) < 190 And GameNum(2) < 190 And GameNum(3) < 190 Then
If Command1(GameNum(0) + 10).Visible = False And _
Command1(GameNum(1) + 10).Visible = False And _
Command1(GameNum(2) + 10).Visible = False And _
Command1(GameNum(3) + 10).Visible = False Then
DownAble = True
Else
DownAble = False
End If
Else
DownAble = False
End If
End Function
'自定义函数,确定方块是否能左移
Private Function LeftAble() As Boolean
If GameNum(0) Mod 10 <> 0 And GameNum(1) Mod 10 <> 0 And GameNum(2) Mod 10 <> 0 And GameNum(3) Mod 10 <> 0 Then
If Command1(GameNum(0) - 1).Visible = False And _
Command1(GameNum(1) - 1).Visible = False And _
Command1(GameNum(2) - 1).Visible = False And _
Command1(GameNum(3) - 1).Visible = False Then
LeftAble = True
Else
LeftAble = False
End If
Else
LeftAble = False
End If
End Function
'自定义函数,确定方块是否能右移
Private Function RightAble() As Boolean
If GameNum(0) Mod 10 <> 9 And GameNum(1) Mod 10 <> 9 And GameNum(2) Mod 10 <> 9 And GameNum(3) Mod 10 <> 9 Then
If Command1(GameNum(0) + 1).Visible = False And _
Command1(GameNum(1) + 1).Visible = False And _
Command1(GameNum(2) + 1).Visible = False And _
Command1(GameNum(3) + 1).Visible = False Then
RightAble = True
Else
RightAble = False
End If
Else
RightAble = False
End If
End Function
'定义使方块旋转的过程
Private Sub Zhuan()
Select Case GameSituation
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''
'长条型方块由横着变成竖立状态
Case 0
If GameNum(0) - 18 >= 2 And GameNum(3) + 9 <= 198 Then
If Command1(GameNum(0) - 18).Visible = False And _
Command1(GameNum(1) - 9).Visible = False And _
Command1(GameNum(3) + 9).Visible = False Then
HideFanku (0)
GameNum(0) = GameNum(0) - 18
GameNum(1) = GameNum(1) - 9
GameNum(3) = GameNum(3) + 9
ShowFanku (0)
GameSituation = 1
End If
End If
'由竖立变成横着状态
Case 1
If (GameNum(0) + 18) Mod 10 < 8 And (GameNum(3) - 9) Mod 10 > 0 Then
If Command1(GameNum(0) + 18).Visible = False And _
Command1(GameNum(1) + 9).Visible = False And _
Command1(GameNum(3) - 9).Visible = False Then
HideFanku (0)
GameNum(0) = GameNum(0) + 18
GameNum(1) = GameNum(1) + 9
GameNum(3) = GameNum(3) - 9
ShowFanku (0)
GameSituation = 0
End If
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''
'正方形方块无变化
Case 2
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''
'正S型方块的变化
Case 3
If GameNum(0) - 11 > 1 Then
If Command1(GameNum(0) - 11).Visible = False And _
Command1(GameNum(3) + 2).Visible = False Then
HideFanku (0)
GameNum(0) = GameNum(0) - 11
GameNum(2) = GameNum(2) - 9
GameNum(3) = GameNum(3) + 2
ShowFanku (0)
GameSituation = 4
End If
End If
Case 4
If (GameNum(3) - 2) Mod 10 < 9 Then
If Command1(GameNum(2) + 9).Visible = False And _
Command1(GameNum(3) - 2).Visible = False Then
HideFanku (0)
GameNum(0) = GameNum(0) + 11
GameNum(2) = GameNum(2) + 9
GameNum(3) = GameNum(3) - 2
ShowFanku (0)
GameSituation = 3
End If
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''
'反S型方块的变化
Case 5
If GameNum(0) - 9 > 1 Then
If Command1(GameNum(0) - 9).Visible = False And _
Command1(GameNum(3) - 2).Visible = False Then
HideFanku (0)
GameNum(0) = GameNum(0) - 9
GameNum(2) = GameNum(2) - 11
GameNum(3) = GameNum(3) - 2
ShowFanku (0)
GameSituation = 6
End If
End If
Case 6
If (GameNum(3) + 2) Mod 10 > 0 Then
If Command1(GameNum(2) + 11).Visible = False And _
Command1(GameNum(3) + 2).Visible = False Then
HideFanku (0)
GameNum(0) = GameNum(0) + 9
GameNum(2) = GameNum(2) + 11
GameNum(3) = GameNum(3) + 2
ShowFanku (0)
GameSituation = 5
End If
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''
'T型方块的变化
Case 7
If GameNum(0) - 9 > 0 Then
If Command1(GameNum(0) - 9).Visible = False Then
HideFanku (0)
GameNum(0) = GameNum(0) - 9
GameNum(2) = GameNum(2) + 9
GameNum(3) = GameNum(3) - 11
ShowFanku (0)
GameSituation = 8
End If
End If
Case 8
If (GameNum(0) + 11) Mod 10 > 0 Then
If Command1(GameNum(0) + 11).Visible = False Then
HideFanku (0)
GameNum(0) = GameNum(0) + 11
GameNum(2) = GameNum(2) - 11
GameNum(3) = GameNum(3) - 9
ShowFanku (0)
GameSituation = 9
End If
End If
Case 9
If GameNum(0) + 9 < 199 Then
If Command1(GameNum(0) + 9).Visible = False Then
HideFanku (0)
GameNum(0) = GameNum(0) + 9
GameNum(2) = GameNum(2) - 9
GameNum(3) = GameNum(3) + 11
ShowFanku (0)
GameSituation = 10
俄罗斯方块游戏的开发 组长:XXX 组员:XXX XXX XXX XXX 05软件工程一班 一、课程设计的目的和意义 俄罗斯方块游戏是一个经典的小游戏,由于它简单有趣,因而得到了广泛的流行,男女老幼都适合。而俄罗斯方块游戏的设计工作复杂且富有挑战性,它包含的内容多,涉及的知识广泛,与图形界面联系较大,包括界面的显示与更新、数据收集等,在设计的过程中,必将运用到各方面的知识,这对于visualbasi语言设 计者而言,是个很好的锻炼机会。 二、系统功能设计 本系统主要设计以下几种功能 1、游戏难度选择功能 游戏难度选择界面设置在程序运行开始时,一共有九种难度供玩家选择,每选一级难度,都会相应地显示出代表该难度的图片。开始时不设置任何默认的难度,如果玩家不选难度直接按“Enter”进入,将会弹出提示框,提示其先选难度再 进入。 2、方块下落、变形功能 在整个俄罗斯方块游戏中,方块的设计是核心。这里设计了一个方块类:Square(),用来生成方块以及实现块的左移、右移、向下、变形、重画、同步显 示、初始化新块等。 3、自动升级功能 当分数累积到一定大小时,系统将自动为玩家提高难度。这里设置了每消除10行方块,就增加一级难度。当难度增加的时候,方块会相应地改变颜色,以作为 对玩家的提示。 4、游戏音乐功能 游戏开始音乐就自动播放,游戏暂停与结束时音乐相应消除。 5、获取帮助功能 这里设置了一个类,用来显示帮助,按F1键就能弹出窗口,显示游戏规则。
三、系统功能设计分析 俄罗斯方块游戏根据功能的不同,设置了如下12个类:Square,Command, GameArea,GameSetting,GameOver,Help,ImagePanel,JieMian,MyPanel, MyTimer,PlayMidi,WinListener,每个类的描述如下: 1、Square,方块类。这个类中定义了生成方块的方法,用二维数组int[][]pattern,存放7种方块的四种状态。在构造方法中以随机的形式生成方块,同时提供了以下几种方法:reset(),leftTurn(),leftMove(),rightMove(),fallDown(),assertValid(int t,int s,int row,int col),dispBlock(int s)。分别实现方块的重画、翻转、 左移、右移、下落、同步显示等功能。 2、Command,处理控制类。这是一个实现ActionListener接口的类,主要处理点击按钮事件。类中定义了三个int型变量:button_play,button_quit,button_pause,和一个boolean型的变量:pause_resume,并赋值。在GameArea类中通过事件响应,在按钮执行方法中调用其值,使用switch语句,根据不同按钮不同的值, 来响应不同的事件。 3、GameArea,游戏界面类。GameArea继承了JFrame,是俄罗斯方块的主要游 戏界面。这个类定义了GameSetting类的gameScr对象和ImagePanel类的imagepanel对象作为游戏区域面板和控制区域面板。在游戏区域,主要是根据相应格子的设置标志来显示相应的图形图片,这样就实现了俄罗斯方块的实时显 示。 4、GameSetting,游戏画布类。这个类生成的对象将作为游戏界面的方块下落区域,画布的设置为15行10列,当中的方格边长为30,类中还定义了一个二维数组int[][]scrArr作为屏幕数组,表示每一个方格。游戏区域中每一个方格是否存在游戏方块是由该方格的值来决定的,如果该方格的值为1,则表示该方格中存在游戏方块;如果该方格中的值为0,则表示该方格中不存在游戏方块,因此二维数组用于记录游戏区域中每个小方格的值。此外,类中还定义了画方块的方法,根据不同的难度画出不同颜色的方块。单击Play按钮时,系统调用initScr()方法,初始化屏幕,将屏幕数组清零。当满足满行删除的条件时,系统调用deleteFullLine()方法,进行删行加分,而且每删除十行,难度自动增加一级,方块颜色改变,并在难度显示框中相应显示。 5、GameOver,游戏结束弹出提示框类。当游戏结束时,系统弹出提示,包括玩 家分数以及询问玩家要继续游戏还是退出。 6、Help,帮助类。在游戏界面,按F1键,弹出提示窗口,获取帮助。 7、ImagePanel,背景图片类。这个类继承了JPanel类,用来作为游戏界面中控 制区域的容器,并添加图片。 8、JieMian,主界面类。这个类继承了JPanel类,作为游戏的第一个界面,也是难度选择界面。定义了9个单选按钮,当玩家未选任何难度就按Enter时,系统会弹出一个提示框,提示玩家先选难度再进入。 9、MyPanel,重写MyPanel类,使Panel的四周留空间。
C语言课程设计 报告 设计题目:俄罗斯方块游戏设计 院系: 班级: 学号: 姓名: 指导教师: 设计地点: 开课时间:
学生姓名成绩 评语: 指导教师(签名) 年月日
目录 1.设计目的和任务....................................................................................................................................... - 1 - 1.1目的: .............................................................................................................................................. - 1 - 1.2任务: .............................................................................................................................................. - 1 - 2.开发环境.................................................................................................................................................... - 1 - 2.1硬件环境:.................................................................................................................................... - 1 - 2.2软件环境:.................................................................................................................................... - 1 - 3.设计题目...................................................................................................................................................... - 2 - 3.1题目名称:.................................................................................................................................... - 2 - 3.2题目详细描述: ........................................................................................................................... - 2 - 3.3功能要求: ............................................................................................................................................ - 2 - 4.相关技术以及知识点.......................................................................................................................... - 3 - 4.1编写BLOCK类:............................................................................................................................... - 3 - 4.2 PATHGRADIENTBRUSH 类: ........................................................................................................ - 3 - 4.3 RANDOM类:.................................................................................................................................. - 3 - 4.4 GDI图形处理: ........................................................................................................................... - 3 - 5. 设计与实现 .............................................................................................................................................. - 4 - 5.1 设计流程图................................................................................................................................... - 4 - 5.2 游戏主体界面 .............................................................................................................................. - 4 - 5.3 游戏图形界面 ............................................................................................................................ - 11 - 5.4 图形的移动与消行 ................................................................................................................... - 13 - 5.5 得分的实现................................................................................................................................. - 15 -6.总结 ........................................................................................................................................................ - 16 -7.参考资料................................................................................................................................................ - 16 -
/*学无止境*/ #include
void Init(); void Down(); void GoOn(); void ksdown(); void Display(int color); void Give(); int Touch(int x,int y,int dx,int dy); int GeyKey(); void Select(); void DetectFill(); void GetScores(); void Fail(); void Help(); void Quit(); void DrawBox(int x,int y,int Color); void OutTextXY(int x,int y,char *String); void DispScore(int x,int y,char Ch); void DrawNext(int Color); int Heng=12,Shu=20; /*横竖*/ int Position[MAX][MAX]; int middle[MAX][MAX]; int ActH,ActS;
【转载】88行代码实现俄罗斯方块游戏(含讲解) 来源:https://www.doczj.com/doc/f25435678.html,/p/8 在正式阅读本文之前,请你记得你应该用娱乐的心态来看, 本代码所使用到的技巧,在工作了的人眼里会觉得很纠结,很蛋疼,很不可理喻,很丑, 注意,是你蛋疼,不关我的事 通常,写一个俄罗斯方块,往往动不动就几百行,甚至上千行,而这里只有88行 正所谓头脑风暴,打破常规。这里将使用很多不平常的手段来减少代码 以下是Win-TC可以成功编译并执行的代码(代码保证单行长度不超过80字符,如果你是Win7系统,那请看后文): 程序代码: #include"graphics.h" #include
课程设计 俄罗斯方块改进 2016年4月20 日 设计题目 学号 专业班级 学生姓名 指导教师
目录 1. 课程设计目的错误!未定义书签。 2. 功能分析错误!未定义书签。 3. 程序设计实现过程错误!未定义书签。 程序总体设计结构错误!未定义书签。 界面设计错误!未定义书签。 重要数据的数据结构设计错误!未定义书签。函数设计错误!未定义书签。 4. 运行效果错误!未定义书签。 5. 源代码详解错误!未定义书签。 6. 参考文献错误!未定义书签。
俄罗斯方块改进 1. 课程设计问题 据百度百科,俄罗斯方块(Tetris)是一款由俄罗斯人阿列克谢·帕基特诺夫于1984年6月发明的休闲游戏。游戏的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。 要求支持键盘操作和7种不同类型方块的旋转变换,并且界面上显示下一个方块的提示以及当前的玩家的得分,随着游戏的进行,等级越高,游戏难度越大,即方块的下落速度越快,相应的等级,等级越高,消去一行所得到的分数越高,为玩家提供了不同的选择。 2. 功能分析 俄罗斯方块游戏需要解决的问题包括: ⑴按任意键开始游戏,随机产生方块并自动下移 ⑵用Esc键退出游戏。 ⑶用键变换方块 ⑷用键和键左右移动方块 ⑸用键使方块加速下移 ⑹用空格键使方块暂停 ⑺能正确判断满行并消行、计分、定级别 ⑻设定游戏方块为不同形状重点: *游戏面包的数据结构:二维数组 *7种形状方块的数据结构:结构体保存每种形状方块的坐标 3. 程序设计实现过程 程序总体设计结构 首先初始化进入图形模式,进入欢迎界面,玩家按任意进入主菜单界面,按键进入游戏界面,键然后设置新的时钟中断。开始游戏后,进入该程序最核心的部分——处理和实现进行过程中的各种事件和函数。在处理中判断游戏是否结束,如果没有结束,则重新开始游戏,否则结束游戏。 详解如下: (1)游戏方块预览功能。在游戏过程中,当在游戏底板中出现一个游戏方块时,必须在游戏方块预览区域中出现下一个游戏方块,这样有利于游戏玩家控制游戏的策略。由于在此游戏中存在19种不同的游戏方块,所以在游戏方块预览区域中需要显示随机生成的游戏方块。
南京邮电大学 通达学院 算法与数据结构设计报告( 2016/ 2017学年第二学期) 专业软件工程嵌入式 学号姓名 学号姓名 学号姓名 学号姓名 指导教师陈兴国 指导单位计算机学院计算机科学与技术系 日期2017-5-26
俄罗斯方块 一、课题内容 实现俄罗斯方块游戏。主要功能为游戏界面显示、上下左右键响应以及当前得分统计。通过该课题全面熟悉数组、字符串等的使用。掌握设计的基本方法及友好界面的设计。 课题要求: 1、游戏界面显示:下落方块和方块堆、左右移动、旋转、删除行等特效以及得分。 2、动作选择:上下左右键对应于旋转、加速、左右移动的功能。 3、得分统计判断:判定能否消除行、并统计得分总数等。 扩展要求: 1、用户数据管理。 二、算法设计与分析 I、俄罗斯方块游戏需要解决的问题包括 (1)、随机产生方块并自动下移 (2)键变体 (3)Q退出,按space暂停 II (1)、声明俄罗斯方块的结构体 (2)、函数原型声明 (3)、制作游戏窗口 (4)、制作俄罗斯方块 (5)、判断是否可动 (6)、随机产生俄罗斯方块类型序号 (7)、判断是否满行并删除满行的俄罗斯方块 (8)暂停,继续功能 (9)新游戏创建 (10)用户的创建,分数用户名的保存,查看分数
Tetris类(主要类) 该类包含m a i n方法,应为应用程序的主类。该类用来创建游戏的用户界面,事件处理功能和menu餐单,用户信息的存储。整个程序从该类的m a i n方法开始执行。 成员变量:String userName; 构造方法:Tetris 内部类:Members,Tetrisblock Tetrisblok类: 用来设计游戏界面。游戏界面显示在由Tetrisblok类创建的整个用户界面的中(Center)区,游戏的即时分数、方块的效果图及方的预览功能都在整个类里面实现。用来封装俄罗斯小方块。一个方块的属性是由方块1位置即x和y的坐标、颜色决定的。 成员变量 private int blockType; Timer timer=null; private int turnState; private int x; private int y; private int i = 0; int j = 0; static int score = 0; int flag = 0; int delay=1000; // 定义已经放下的方块x=0-12,y=0-22; int[][] map = new int[14][24]; // 方块的形状第一组代表方块类型有S、Z、L、J、I、O、T 7种第二组代表旋转几次第三四组为方块矩阵 private final int shapes[][][] 成员方法:public void newblock() public void drawwall() public void newmap() public void newgame()
#include
C语言课程设计报告 俄罗斯方块程序设计报告 一、问题描述 俄罗斯方块(Tetris,俄文:Тетрис)是一款电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。 在本次设计中,要求支持键盘操作和若干种不同类型方块的旋转变换,并且界面上显示下一个方块的提示以及当前的玩家的得分,随着游戏的进行,等级越高,游戏难度越大,即方块的下落速度越快,相应的等级,等级越高,为玩家提供了不同的选择。 二、功能分析 I、俄罗斯方块游戏需要解决的问题包括: ⑴、随机产生方块并自动下移 ⑵、用Esc键退出游戏 ⑶、用键变体 ⑷、用键和键左右移动方块 ⑸、用空格键使游戏暂停
⑹、能正确判断满行并消行、计分、定级别 ⑺、设定游戏为不同级别,级别越高难度越大 II、俄罗斯方块游戏需要设计的功能函数包括: ⑴、声明俄罗斯方块的结构体 ⑵、函数原型声明 ⑶、制作游戏窗口 ⑷、制作俄罗斯方块 ⑸、判断是否可动 ⑹、随机产生俄罗斯方块类型的序号 ⑺、打印俄罗斯方块 ⑻、清除俄罗斯方块的痕迹 ⑼、判断是否满行并删除满行的俄罗斯方块 三、程序设计 1、程序总体结构设计 (1)、游戏方块预览功能。在游戏过程中,游戏界面右侧会有预览区。由于在此游戏中存在多种不同的游戏方块,所以在游戏方块预览区域中显示随机生成的游戏方块有利于游戏玩家控制游戏的策略。 (2)、游戏方块控制功能。通过各种条件的判断,实现对游戏方块的左移、右移、自由下落、旋转功能,以及行满消除行的功能。 (3)、游戏数据显示功能。在游戏玩家进行游戏过程中,需要按照一定的游戏规则给玩家计算游戏分数。例如,消除一行加100分,游戏分数达到一定数量
C#程序设计实训报告 题目:俄罗斯方块 专业____计算机科学与技术 _ 年级班别___ 计算机09-2班__ 学号 学生姓名_____ _______ 指导教师_ 成绩 2012 年 1 月
目录 一系统设计要求 (3) 课题分析............................................................................. 错误!未定义书签。 设计环境 (3) 设计思路 (3) 二课题总体框架设计 (3) 程序流程图 (4) 类的结构图 (5) 三课题实现 (6) 程序主界面 (6) 开始游戏界面 (6) 游戏结束界面 (7) 暂停游戏界面 (7) 使用说明界面 (8) 关键程序代码 (8) 四总结 (21) 设计总结 (21) 设计体会 (22)
一、系统设计要求 1.1课题分析 本游戏系统是利用C#实现的,是制作为我们所熟悉的非常简单的俄罗斯方块游戏,该系统能实现的具体功能如下: 1).能简便的开始游戏,游戏中的方块的功能与日常我们所熟悉的游戏的功能一致,各种块的设置也一致,包括方块的旋转,加速下降,左右移动,满行消去,满行消去自动加分,以及到顶游戏结束等功能; 2).能够通过对话框窗体说明各个功能的使用说明,以及一些其他功能。 3).界面简洁美观,简单易用。跟其他一般的游戏相差不大。 1.2设计环境 本程序选择Visual Studio 2010作为实验环境。 设计思路 用面向对象的方法分析系统 对于俄罗斯方块的程序制作,我们可以定义一个或者几个类,专门来描述俄罗斯方块,在这个类中,包含与之相关的方法、属性和字段,通过封装,实现其业务逻辑。其中,每一个俄罗斯方块都有相同的特征,由4个小正方形构成,有旋转,左右移动,下落的动作,整行被填满除去并计算分数而构成行的小正方体块。基中块的形状类型有7种:田、一、L、倒L、Z、倒Z、上。 在窗口中通过调用主窗体Form1当中的菜单栏来设置游戏的开始、暂停、结束、重新开始以及推出程序。还可以通过其菜单中游戏说明选项来查看游戏各个键的使用说明,还可调用帮助菜单来查看版权说明。 二、课题总体框架设计
基于单片机的俄罗斯方块设计与实现 摘要 随着单片机在手持娱乐设备上应用的发展,越来越多的应用在电子领域中,如:电子宠物,俄罗斯方块,智能IC卡等。俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。 本文选用STC89C52RC单片机作为系统的芯片,实现人机交互、娱乐等功能。选用LCD12864实现俄罗斯方块游戏界面、图形显示;选用独立按键实现游戏控制。本设计实现的基本功能是:用按键控制目标方块的变换与移动;消除一行并计分,方块堆满时结束游戏等俄罗斯方块的基本功能。 此次设计初期是在keil和proteus联合仿真中进行,编程语言为c语言,后期是进行实物焊接。 关键词:俄罗斯方块;单片机;控制;仿真
Abstract With the development of the single chip microcomputer application on handheld entertainment equipment, more and more application in the field of electronics.Such as: electronic pet, tetris, smart IC card, etc.Tetris is a popular global TV game and PSP games, it consists of the Russian alexei palmer jeter's invention, therefore the name. This article chooses STC89C52RC single-chip microcomputer as the system of chip, realize human-machine interaction, entertainment, etc.Selection of tetris game interface, graphical display LCD12864 implementation;Choose independent control game buttons.This design is to realize the basic function of: key control target square transformation and movement;Remove a row and scoring, square pile end game tetris, such as the basic functions. The early stage of design is done in keil and proteus simulation, programming language is the c language, is late for real welding. Keywords:Russian square;Microprocessor;Control;Simulation
来个房子的吧: Private Sub Command1_Click() Dim i As Integer, n As Integer Cls n = 5 For i = 1 To 3 Print String(4 - i, " ") & String(2 * i - 1, "*") & String(10, "*") Next For i = 1 To 4 Print " * *" & String(9, " ") & "*" Next Print " " & String(15, "*") End Sub VB 填充封闭区间 Private Declare Function FloodFill Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Sub Command1_Click() Dim hBrush As Long Dim OldhBrush As Long hBrush = CreateSolidBrush(RGB(0, 0, 255))'要填充的颜色 OldhBrush = SelectObject(Me.hdc, hBrush) Me.Line (10, 10)-(100, 100), RGB(255, 0, 0), B FloodFill Me.hdc, 20, 20, RGB(255, 0, 0)'区间边界颜色 SelectObject Me.hdc, OldhBrush DeleteObject hBrush End Sub
JAVA程序设计课程设计 之 俄罗斯方块 年级:13级 班级:T412 网络工程 指导老师:朱林 小组成员: 20138346021 许浩洋
时间:2015年11月11日 目录 摘要................................................................. 第一章课程设计要求.................................................. 第二章设计概要...................................................... 2.1 功能设计...................................................... 2.2 功能分析...................................................... 2.2.1 系统操作界面............................................... 2.2.2 程序主要功能说明........................................... 第三章调试分析与测试结果............................................ 3.1 游戏运行界面.................................................. 3.2 测试项目...................................................... 3.2.1 功能区按键测试............................................ 3.2.2 键盘功能测试.............................................. 3.2.3 游戏结束测试.............................................. 第四章设计总结...................................................... 4.1 改进意见...................................................... 4.2 《Java课程设计》心得体会 ......................................
河南城建学院 课程设计报告书 专业:计算机科学与技术 课程设计名称:《Java高级应用》 题目:俄罗斯方块 班级: 学号: 设计者: 同组人员: 指导老师: 完成时间:2016年06月08
目录 一、设计目的 (1) 二、需求分析 (1) 2.1游戏功能的需求分析 (1) 2.2方块及旋转变换需求分析 (1) 2.3游戏运行需求分析 (1) 2.4消行和分数统计需求分析 (1) 三、模块分析及设计 (1) 3.1 总体设计思想 (1) 3.2功能模块 (1) 四、制作过程及要点 (1) 4.1 游戏一个单元块的设计与实现 (1) 4.2俄罗斯方块的控制设计 (1) 4.3 俄罗斯方块的设计与实现 (1) 4.4要点分析 (1) 五、设计总结 (1) 六、参考资料 (1)
一、设计目的 在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众的认可,因此开发此游戏软件可满足人们的一些娱乐的需求。此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。 俄罗斯方块是家喻户晓的益智小游戏,它由俄罗斯人阿列克谢帕基特诺夫(Alexey Pazhitnov)在1984年6月利用空暇时间编写的游戏程序,故此得名。俄罗斯方块的基本规则是移动、旋转和摆放游戏随机产生的各种方块,使之排列成完整的一行或多行并且消除得分。它看似简单却变化无穷,俄罗斯方块上手极其简单,且游戏过程变化无穷,作为游戏本身很有魅力,但是要熟练掌握其中的操作和摆放技巧,难度却不低。此软件给用户提供了一个展现自己高超技艺的场所,在这里,它不仅放松自己,还能感受到游戏中的乐趣。游戏区域会从顶部不断随机落下7种方块类型的一种,游戏区域右上角有一个区域可以显示下一个方块的形状,玩家可以控制俄罗斯方块移动、旋转。通过玩家的操作,下坠物在游戏区域以“摆积木”的形式出现。下坠物在一行或多行堆满后就可以自动消除,消行后会得到相应的分数,如果当前下坠物堆积至窗口顶端,则游戏结束。
1、新建“.h”头文件,将“头文件” 代码粘贴至其中, 2、新建“.c”源文件,将“源代码” 代码粘贴到其中。 3、新建空白工程,将头文件和源代码 添加进去,调试使用。 //头文件 //1.自定义枚举类型,定义7种形态的游戏方块 typedef enum tetris_shape { ZShape=0, SShape, LineShape, TShape, SquareShape, LShape, MirroredLShape }shape; //2.函数声明 //(1)操作方块函数 int maxX();//取得当前方块的最大x坐标 int minX();//取得当前方块的最小x坐标 void turn_left();//当前方块逆时针旋转90度 void turn_right(); int out_of_table(); void transform(); int leftable(); int rightable(); int downable(); void move_left(); void move_right(); //(2)操作游戏桌面的函数 int add_to_table();
void remove_full(); //(3)控制游戏函数 void new_game(); void run_game(); void next_shape(); int random(int seed); //(4)绘图函数 void paint(); void draw_table(); //(5)其他功能函数 void key_down(WPARAM wParam); void resize(); void initialize(); void finalize(); //(6)回调函数,用来处理Windows消息 LRESULT CALLBACK WndProc (HWND,UINT,WPARAM,LPARAM); //源代码 //1.文件包含 #include
//不多说,直接可以拷贝下面的东西,就可以运行。 package day04; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.applet.*; import https://www.doczj.com/doc/f25435678.html,ng.String.*; import https://www.doczj.com/doc/f25435678.html,ng.*; import java.io.*; public class ERSBlock extends JPanel implements ActionListener,KeyListener//应该是继承JPanel { static Button but[] = new Button[6]; static Button noStop = new Button("取消暂停"); static Label scoreLab = new Label("分数:"); static Label infoLab = new Label("提示:"); static Label speedLab = new Label("级数:"); static Label scoreTex = new Label("0"); static Label infoTex = new Label(" "); static Label speedTex = new Label("1");
static JFrame jf = new JFrame(); static MyTimer timer; static ImageIcon icon=new ImageIcon("resource/Block.jpg"); static JMenuBar mb = new JMenuBar(); static JMenu menu0 = new JMenu("游戏 "); static JMenu menu1 = new JMenu("帮助 "); static JMenuItem mi0 = new JMenuItem("新游戏"); static JMenuItem mi1 = new JMenuItem("退出"); static JMenuItem mi1_0 = new JMenuItem("关于"); static JDialog dlg_1; static JTextArea dlg_1_text = new JTextArea(); static int startSign= 0;//游戏开始标志 0 未开始 1 开始 2 暂停 static String butLab[] = {"开始游戏","重新开始","降低级数","提高级数","游戏暂停","退出游戏"}; static int game_body[][] = new int[19][10]; static int game_sign_x[] = new int[4];//用于记录4个方格的水平位置 static int game_sign_y[] = new int[4];//用于记录4个方格的垂直位置