文章作者:小珂[EST-EvilOctal Security Team]
信息来源:中国 邪恶八进制(
www.EvilOctal.com)
今天感觉很无聊,所以就想写个小游戏,写个什么垃圾呢,对了
就来个掌上型游戏机里的赛车(·#¥%,靠,谁拿鸡蛋扔俺干什么)
虽然没什么技术可言,程序也很简单,只有50来行,但可以帮助VB初学
熟悉VB,就这么几十行代码也能成游戏~~~,挺来兴趣吧,其实编程也并
不总是枯燥无味滴,现在先不急着看代码,先分析一下思路
第一步,当然要制作主角了也就是赛车0,别激动,所谓的赛车也只是四个方块
(谁又砸我了,555
你看那掌上游戏机上的赛车不也是这样做的吗)
用函数drawcar()就可以画出赛车
下面就是这个私有函数的代码
Private Sub drawcar()
Line (cx, BT - 100)-Step(3 * D, D), BackColor, BF
Line (cx + D, BT - 200)-Step(D, D), BackColor, BF ‘先擦去
Line (cx, BT - 100)-Step(3 * D, D), RGB(225, 0, 0), BF
Line (cx + D, BT - 200)-Step(D, D), RGB(225, 0, 0), BF
End Sub
有了赛车,下面当然是要设计跑道了
再做个画跑道的函数,
drawway(n)画跑道的第n层
下面是这个函数的代码
Private Sub drawway(n)‘参数n代表跑道的第n层
Line (Width/2-3*D/2-2*D,BT-n*D)-Step(7*D,D),BackColor, BF
’先擦后画
Line (Width/2-3*D/2-2*D,BT-n*D)-Step(l1(n)*D, D), ,BF
Line (Width/2-3*D/2+5*D,BT-n*D)-Step(-l2(n)*D,D), ,BF
End Sub
接下来就要做游戏控制啦
用键盘控制赛车的移动,方法有很多,现在介绍一种比较简单的哦
Form的KeyPreview属性要设为true,
在Form_KeyPress函数中通过改变全局变量cx来控制赛车的位置。
下面是这一部分的代码,为了照顾广大CS战友,现把A和D键分别设为控制左和右的移动(长出了一空气,总算没人再浪费鸡蛋了-_-)
Private Sub Form_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case Asc("a"), Asc("A") 'A键控制小车向左移动
cx = cx - D
Case Asc("d"), Asc("D") 'D键控制小车向左移动
cx = cx + D
End Select
End Sub
下面再填加个Timer控件就基本完事了~~ 好累哦~~
说了这么多了,下面该把核心代码完整的拿出来了
以下代码在windowxp+vb6.0中文企业版通过
需要添加的控件只是command+timer,timer1的interval建议设为100
当然,在设计时也可以通过控制timer1的interval的数值来实现对游戏速度的控制
Const D = 100 '方格的宽度
Const BT = 3000 '跑道底部的y坐标
Dim l1(22) As Integer '每层跑道左边有几个方块
Dim l2(22) As Integer '每层跑道右边有几个方块
Dim cx As Single '赛车的在x轴的位置
Private Sub Command1_Click()
cx = Width / 2 - 3 * D / 2
cy = Height - D
drawcar
For i = 1 To 20
l1(i) = 0
l2(i) = 0
drawway (i)
Next i
Timer1.Enabled = True
End Sub
Private Sub drawcar()
Line (cx, BT - 100)-Step(3 * D, D), BackColor, BF
Line (cx + D, BT - 200)-Step(D, D), BackColor, BF '先擦
Line (cx, BT - 100)-Step(3 * D, D), RGB(225, 0, 0), BF
Line (cx + D, BT - 200)-Step(D, D), RGB(225, 0, 0), BF
End Sub
Private Sub drawway(n)
Line (Width / 2 - 3 * D / 2 - 2 * D, BT - n * D)-Step(7 * D, D), BackColor, BF
' 先擦后画
Line (Width / 2 - 3 * D / 2 - 2 * D, BT - n * D)-Step(l1(n) * D, D), , BF
Line (Width / 2 - 3 * D / 2 + 5 * D, BT - n * D)-Step(-l2(n) * D, D), , BF
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case Asc("a"), Asc("A") 'A键控制小车向左移动
cx = cx - D
Case Asc("d"), Asc("D") 'D键控制小车向左移动
cx = cx + D
End Select
End Sub
Private Sub Timer1_Timer()
Randomize
For i = 1 To 19
l1(i) = l1(i + 1)
l2(i) = l2(i + 1)
drawway (i)
Next i
Do
l1(20) = Int(Rnd * 5)
l2(20) = Int(Rnd * 5)
Loop Until ((l1(20) + l2(20) <= 4) And (l1(20) - l1(19) <= 1) And _
(l2(20) - l2(19) <= 1) And (l1(19) + l2(20) <= 4) And _
(l1(20) + l2(19) <= 4)) '这里生成新一层跑道,
' 注意要筛去玩家不可能通过的情况!
drawway (20)
' 以上画出跑道
drawcar
test
End Sub
Private Sub test()
If 3.5 * D - Width / 2 + cx < l1(1) * D Then Timer1.Enabled = False
If 3.5 * D - Width / 2 + cx + D < l1(2) * D Then Timer1.Enabled = False
If 3.5 * D - (cx + 3 * D - Width / 2) < l2(1) * D Then Timer1.Enabled = False
If 3.5 * D - (cx + 2 * D - Width / 2) < l2(2) * D Then Timer1.Enabled = False
End Sub
真的好累哦,先出去玩玩买个面包吃再继续,大家如果有问题或有好的修改意见请跟帖子
先谢谢哦~~