红玫瑰打砖块-VB.NET之课程小设计
红玫瑰打砖块
2008241079 王金龙
【实验名称】
红玫瑰打砖块 V1.0
【实验目的】
利用Visual Basic.NET强大的图形特性和Microsoft Visual Studio 2010可视化开发工具来开发红玫瑰打砖块这款简单的小游戏,旨在加强我们对Visual Basic.NET基本语法、控件的动态生成与添加、事件的添加与控制等的掌握。
【掌握内容】
通过完成红玫瑰打砖块的实验,我进一步掌握了Visual Basic.NET的基本语法、窗体的布局、控件的动态生成与添加、事件的控制、碰撞的检验,最重要的是了解了一个小游戏的开发过程,以及在开发的过程中我们要更多的去考虑怎样才能满足用户的需求。
【问题描述及基本要求】
红玫瑰打砖块这款小游戏基本上满足用户的基本要求。该游戏有三个级别,即初级、中级、高级,用户只有过了每一级之后才能进入下一级,并且每一级如果没有通过都有重玩的机会。控制功能全面,有开始按钮、暂停按钮、向左移按钮、向右移按钮可以给用户很好的体验度,完全符合以人为本的思想,用户控制度更高。
【调试结果及说明】
(1) 本程序的运行环境为Microsoft Visual Studio 2010。
(3) 游戏时单击暂停按钮可以暂停。如下图所示:
(4) 游戏时单击左右按钮可以自己控制小球的路线。
(5) 游戏时右下角记录着分数和级数。
(6) 每一级不通过可以重玩。如下图所示:
(8) 关于窗体如下图所示:
【程序清单】

1 Public Class Form1
2 Dim x As Integer = 2
3 Dim y As Integer = 2
4 Dim fenShu As Integer = 0
5 Dim guanShu As Integer = 1
6 Dim jiShu As Integer = 2
7 Dim rs1 As DialogResult
8 Dim rs2 As DialogResult
9 Dim rs3 As DialogResult
10 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
11 yuan.Left = yuan.Left + x
12 yuan.Top = yuan.Top + y
13 If yuan.Top >= 330 And yuan.Top <= 332 Then
14 If (yuan.Left >= L.Left - 3) And (yuan.Left <= L.Left + 58) Then
15 y = -y
16 End If
17 End If
18 If (yuan.Left >= 648 And yuan.Left <= 650) Or (yuan.Left >= 2 And yuan.Left <= 4) Then
19 x = -x
20 End If
21 If yuan.Top >= 18 And yuan.Top <= 20 Then
22 y = -y
23 End If
24 If yuan.Top >= 338 Then
25 Timer1.Enabled = False
26 rs1 = MessageBox.Show("游戏结束,是否再来一次?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
27 If (rs1 = Windows.Forms.DialogResult.Yes) Then
28 If Timer1.Enabled = False Then
29 yuan.Left = Me.youXiQu.ClientSize.Width / 2 - yuan.Width / 2
30 yuan.Top = Me.youXiQu.ClientSize.Height - yuan.Height - 50
31 qingChu()
32 sheZhi()
33 zaiWan()
34 fenShu = 0
35 Label3.Text = fenShu.ToString
36 Timer1.Enabled = True
37 End If
38 ElseIf (rs1 = Windows.Forms.DialogResult.No) Then
39 Me.Close()
40 End If
41 End If
42 End Sub
43 Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
44 Timer1.Enabled = True
45 Timer2.Enabled = True
46 L.Focus()
47 End Sub
48 Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
49 Timer1.Enabled = False
50 Timer2.Enabled = False
51 End Sub
52 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
53 qingChu()
54 sheZhi()
55 L.Focus()
56 Label5.Text = "初级"
57 Label1.Text = guanShu.ToString
58 End Sub
59 Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
60 Dim newbtn As Control
61 For Each newbtn In Me.youXiQu.Controls
62 If newbtn.Text = "" Then
63 If newbtn.Visible = True And yuan.Left >= newbtn.Left And yuan.Left <= newbtn.Left + newbtn.Width Then
64 If yuan.Top <= newbtn.Top + newbtn.Height And yuan.Top >= newbtn.Top Then
65 Me.youXiQu.Controls.Remove(newbtn)
66 newbtn.Visible = False
67 fenShu += 1
68 Label3.Text = fenShu.ToString
69 End If
70 End If
71 End If
72 If fenShu = (jiShu + 1) * 11 Then
73 Timer1.Enabled = False
74 Timer2.Enabled = False
75 If Label7.Text = "高级" And fenShu = 55 Then
76 MessageBox.Show("您已通关!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
77 fenShu = 0
78 Label3.Text = fenShu.ToString
79 jiShu = 2
80 qingChu()
81 sheZhi()
82 L.Focus()
83 Label5.Text = "初级"
84 Label1.Text = guanShu.ToString
85 yuan.Left = Me.youXiQu.ClientSize.Width / 2 - yuan.Width / 2
86 yuan.Top = Me.youXiQu.ClientSize.Height - yuan.Height - 50
87 zaiWan()
88 Timer1.Enabled = True
89 Timer2.Enabled = True
90 Else
91 rs2 = MessageBox.Show("闯关成功,是否进行下一关?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
92 End If
93 End If
94 If (rs2 = Windows.Forms.DialogResult.Yes) Then
95 If Label5.Text = "初级" And fenShu = 33 Then
96 Label6.Text = "中级"
97 Label5.Text = ""
98 jiShu = 3
99 qingChu()
100 sheZhi()
101 fenShu = 0
102 Label3.Text = fenShu.ToString
103 yuan.Left = Me.youXiQu.ClientSize.Width / 2 - yuan.Width / 2
104 yuan.Top = Me.youXiQu.ClientSize.Height - yuan.Height - 50
105 zaiWan()
106 Timer1.Enabled = True
107 Timer2.Enabled = True
108 End If
109 If Label6.Text = "中级" And fenShu = 44 Then
110 Label7.Text = "高级"
111 Label6.Text = ""
112 jiShu = 4
113 qingChu()
114 sheZhi()
115 fenShu = 0
116 Label3.Text = fenShu.ToString
117 yuan.Left = Me.youXiQu.ClientSize.Width / 2 - yuan.Width / 2
118 yuan.Top = Me.youXiQu.ClientSize.Height - yuan.Height - 50
119 zaiWan()
120 Timer1.Enabled = True
121 Timer2.Enabled = True
122 End If
123 ElseIf (rs2 = Windows.Forms.DialogResult.No) Then
124 Me.Close()
125 End If
126 Next
127 End Sub
128 Private Sub sheZhi() '动态的添加砖块
129 Dim btn As Button
130 Dim k As Integer = 0
131 Dim l As Integer = 0
132 For k = 0 To Me.ClientSize.Width \ 60
133 For l = 0 To jiShu
134 btn = New Button
135 btn.Text = ""
136 btn.Size = New Size(60, 20)
137 btn.Left = k * btn.Width
138 btn.Top = l * btn.Height
139 Me.youXiQu.Controls.Add(btn)
140 Next
141 Next
142 End Sub
143 Private Sub qingChu() '清除砖块的函数
144 Dim newbtn As Control
145 Dim k As Integer
146 For k = 0 To 10
147 For Each newbtn In Me.youXiQu.Controls
148 If newbtn.Text = "" Then
149 Me.youXiQu.Controls.Remove(newbtn)
150 newbtn.Visible = False
151 End If
152 Next
153 Next
154 End Sub
155 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
156 yuan.Left = yuan.Left - 10
157 If yuan.Left < 0 Then
158 yuan.Left = 12
159 End If
160 End Sub
161 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
162 yuan.Left = yuan.Left + 10
163 If yuan.Left > Me.youXiQu.Width Then
164 yuan.Left = Me.youXiQu.Width - 12
165 End If
166 End Sub
167 Private Sub zaiWan()
168 y = -y
169 End Sub
170 Private Sub exitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 退出ToolStripMenuItem.Click
171 rs3 = MessageBox.Show("确定退出系统?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
172 If (rs3 = Windows.Forms.DialogResult.Yes) Then
173 Me.Close()
174 ElseIf (rs3 = Windows.Forms.DialogResult.No) Then
175 End If
176 End Sub
177 Private Sub aboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 关于ToolStripMenuItem.Click
178 Dim about As Form2 = New Form2()
179 about.ShowDialog()
180 End Sub
181 Private Sub L_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles youXiQu.MouseMove
182 If e.X > 0 And e.X < 602 Then
183 L.Left = e.X
184 End If
185 End Sub
186 End Class
【结论及问题讨论】
通过开发红玫瑰打砖块这款小游戏,我基本完成了预期的目标,确实掌握了Visual Basic.NET的基本语法、窗体的布局、控件的动态生成与添加、事件的控制、碰撞的检验以及知道了在游戏的开发过程中从用户角度出发的重要性。由于完成的比较仓促,对Visual Basic.NET知识还缺少深入的理解,该款小游戏中还有许多不尽人意的地方,将在后续版本中进一步改善。
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架