VB实现贪吃蛇小游戏.docx
《VB实现贪吃蛇小游戏.docx》由会员分享,可在线阅读,更多相关《VB实现贪吃蛇小游戏.docx(15页珍藏版)》请在冰豆网上搜索。
VB实现贪吃蛇小游戏
VB实现贪吃蛇小游戏
——比较适合VB初学者,属原创作品
图1
图2
图3
如图1所示,布置控件,其中有4个timer控件,1个picture控件(底图),4个command控件(上下左右),10个label控件。
其他功能都在程序里实现,其中贪吃蛇都是由点来组成的,初学者主要学习一下timer控件的应用,还有贪吃蛇拐弯怎么实现的。
图2、图3是游戏视图。
主程序:
Publica,b,fAsDouble:
Publici,j,c,d,e,g,h,zAsInteger
Dimaa(100)AsDouble:
Dimbb(100)AsDouble
PrivateSubForm_Load()
a=100:
b=300:
c=4'a、b定义第一个点(红点)位置,c能控制蓝点数量
g=2000:
h=2000
Timer1.Interval=(200-z*30)'定义每个定时器间隔时间0.2S
Timer2.Interval=(200-z*30)
Timer3.Interval=(200-z*30)
Timer4.Interval=(200-z*30)
Timer5.Interval=300
Timer1.Enabled=True'初设一开始向右走
Timer2.Enabled=False
Timer3.Enabled=False
Timer4.Enabled=False
EndSub
PrivateSubTimer1_Timer()'向右走
Picture1.Cls'没循环一次就清除上一次画的图像,要不就看不出运动了
Picture1.DrawWidth=10'定义画图粗细
b=b+100'b每次都加100,画图后坐标就变了
aa(i)=a
bb(j)=b
Picture1.PSet(b,a),vbRed'绘制第一个点(红)
Fork=1Toc'此k-for循环从1到c,绘制c个蓝色点
Ifaa(99)=0Then'如果游戏刚开始,以下绘制方法,一开始j=0,j-k为负,bb(j-k)与aa(j-k)数组无效,因此在j<=c时单独绘制
Ifj<=cAndi<=cThen
f=400-100*(k-j)
Picture1.PSet(f,100),vbBlue
Else
Picture1.PSet(bb(j-k),aa(i-k)),vbBlue'其他情况时,蓝点走过红点的轨迹
EndIf
EndIf
Ifaa(99)<>0Orbb(99)<>0Then'如果时j和i运行到99后变为0,则bb(0)为红点时,蓝点必须走bb(99)、bb(98)....
Ifj<=cAndi<=cThen
d=100-k+j:
e=100-k+i'此行与以下两行作用就是为了实现蓝点绘制时混合了...bb(0)、bb(99)...的情况
Ifd>=100Thend=d-100
Ife>=100Thene=e-100
Picture1.PSet(bb(d),aa(e)),vbBlue
Else
Picture1.PSet(bb(j-k),aa(i-k)),vbBlue
EndIf
EndIf
Nextk
Ifb>4900Orb<100Ora>4900Ora<100Then'碰墙则重新开始,以下进行了数据重置和清零
j=-1:
i=-1:
b=300:
a=100:
c=4:
z=0'如果碰墙了,j=-1时因为运行完了后面有j=j+1,这样j就等于0了,把a、b重置
MsgBox("对不起!
您碰墙了!
接下来将重新开始游戏!
")
Foro=0To99
aa(o)=0:
bb(o)=0'把aa()、bb()数组中所有的数清零
Nexto
EndIf
Ifj>cThen'咬尾了就重新开始游戏,以下进行了数据重置和清零
Forp=1Toc
Ifbb(j)=bb(j-p)Andaa(i)=aa(i-p)Then
j=-1:
i=-1:
b=300:
a=100:
c=4:
z=0
MsgBox("对不起!
您咬尾了!
接下来将重新开始游戏!
")
Foro=0To99
aa(o)=0:
bb(o)=0
Nexto
ExitFor
EndIf
Nextp
EndIf
j=j+1
i=i+1
Ifj=100Ori=100Thenj=0:
i=0'j不能持续增长,有可能会溢出,现在另j到了100就变0
EndSub
PrivateSubTimer2_Timer()'向左走
Picture1.Cls
Picture1.DrawWidth=10
b=b-100
aa(i)=a
bb(j)=b
Picture1.PSet(b,a),vbRed
Fork=1Toc
Ifaa(99)=0Then
Ifj<=cAndi<=cThen
Picture1.PSet(400-100*(k-j),100),vbBlue
Else
Picture1.PSet(bb(j-k),aa(i-k)),vbBlue
EndIf
EndIf
Ifaa(99)<>0Orbb(99)<>0Then
Ifj<=cAndi<=cThen
d=100-k+j:
e=100-k+i
Ifd>=100Thend=d-100
Ife>=100Thene=e-100
Picture1.PSet(bb(d),aa(e)),vbBlue
Else
Picture1.PSet(bb(j-k),aa(i-k)),vbBlue
EndIf
EndIf
Nextk
Ifb>4900Orb<100Ora>4900Ora<100Then
j=-1:
i=-1:
b=300:
a=100:
c=4:
z=0
MsgBox("对不起!
您碰墙了!
接下来将重新开始游戏!
")
Foro=0To99
aa(o)=0:
bb(o)=0
Nexto
Timer2.Enabled=False
Timer1.Enabled=True
EndIf
Ifj>cThen
Forp=1Toc
Ifbb(j)=bb(j-p)Andaa(i)=aa(i-p)Then
j=-1:
i=-1:
b=300:
a=100:
c=4:
z=0
MsgBox("对不起!
您咬尾了!
接下来将重新开始游戏!
")
Foro=0To99
aa(o)=0:
bb(o)=0
Nexto
Timer2.Enabled=False
Timer1.Enabled=True
ExitFor
EndIf
Nextp
EndIf
j=j+1
i=i+1
Ifj=100Ori=100Thenj=0:
i=0
EndSub
PrivateSubTimer3_Timer()'向下走
Picture1.Cls
Picture1.DrawWidth=10
a=a+100
aa(i)=a
bb(j)=b
Picture1.PSet(b,a),vbRed
Fork=1Toc
Ifaa(99)=0Then
Ifj<=cAndi<=cThen
Picture1.PSet(f,100-100*(k-j)),vbBlue
Else
Picture1.PSet(bb(j-k),aa(i-k)),vbBlue
EndIf
EndIf
Ifaa(99)<>0Orbb(99)<>0Then
Ifj<=cAndi<=cThen
d=100-k+j:
e=100-k+i
Ifd>=100Thend=d-100
Ife>=100Thene=e-100
Picture1.PSet(bb(d),aa(e)),vbBlue
Else
Picture1.PSet(bb(j-k),aa(i-k)),vbBlue
EndIf
EndIf
Nextk
Ifb>4900Orb<100Ora>4900Ora<100Then
j=-1:
i=-1:
b=300:
a=100:
c=4:
z=0
MsgBox("对不起!
您碰墙了!
接下来将重新开始游戏!
")
Foro=0To99
aa(o)=0:
bb(o)=0
Nexto
Timer3.Enabled=False
Timer1.Enabled=True
EndIf
Ifj>cThen
Forp=1Toc
Ifbb(j)=bb(j-p)Andaa(i)=aa(i-p)Then
j=-1:
i=-1:
b=300:
a=100:
c=4:
z=0
MsgBox("对不起!
您咬尾了!
接下来将重新开始游戏!
")
Foro=0To99
aa(o)=0:
bb(o)=0
Nexto
Timer3.Enabled=False
Timer1.Enabled=True
ExitFor
EndIf
Nextp
EndIf
j=j+1
i=i+1
Ifj=100Ori=100Thenj=0:
i=0
EndSub
PrivateSubTimer4_Timer()'向上走
Picture1.Cls
Picture1.DrawWidth=10
a=a-100
aa(i)=a
bb(j)=b
Picture1.PSet(b,a),vbRed
Fork=1Toc
Ifaa(99)=0Then
Ifj<=cAndi<=cThen
Picture1.PSet(400-100*(k-j),100),vbBlue
Else
Picture1.PSet(bb(j-k),aa(i-k)),vbBlue
EndIf
EndIf
Ifaa(99)<>0Orbb(99)<>0Then
Ifj<=cAndi<=cThen
d=100-k+j:
e=100-k+i
Ifd>=100Thend=d-100
Ife>=100Thene=e-100
Picture1.PSet(bb(d),aa(e)),vbBlue
Else
Picture1.PSet(bb(j-k),aa(i-k)),vbBlue
EndIf
EndIf
Nextk
Ifb>4900Orb<100Ora>4900Ora<100Then
j=-1:
i=-1:
b=300:
a=100:
c=4:
z=0
MsgBox("对不起!
您碰墙了!
接下来将重新开始游戏!
")
Foro=0To99
aa(o)=0:
bb(o)=0
Nexto
Timer4.Enabled=False
Timer1.Enabled=True
EndIf
Ifj>cThen
Forp=1Toc
Ifbb(j)=bb(j-p)Andaa(i)=aa(i-p)Then
j=-1:
i=-1:
b=300:
a=100:
c=4:
z=0
MsgBox("对不起!
您咬尾了!
接下来将重新开始游戏!
")
Foro=0To99
aa(o)=0:
bb(o)=0
Nexto
Timer4.Enabled=False
Timer1.Enabled=True
ExitFor
EndIf
Nextp
EndIf
j=j+1
i=i+1
Ifj=100Ori=100Thenj=0:
i=0
EndSub
PrivateSubCommand1_Click()'上
IfTimer3.Enabled=FalseThen
Timer2.Enabled=False
Timer1.Enabled=False
Timer4.Enabled=True
EndIf
EndSub
PrivateSubCommand2_Click()'下
IfTimer4.Enabled=FalseAndj>cThen
Timer1.Enabled=False
Timer2.Enabled=False
Timer3.Enabled=True
EndIf
EndSub
PrivateSubCommand3_Click()'左
IfTimer1.Enabled=FalseThen
Timer3.Enabled=False
Timer4.Enabled=False
Timer2.Enabled=True
EndIf
EndSub
PrivateSubCommand4_Click()'右
IfTimer2.Enabled=FalseThen
Timer4.Enabled=False
Timer3.Enabled=False
Timer1.Enabled=True
EndIf
EndSub
PrivateSubpicture1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)
IfKeyCode=38AndTimer3.Enabled=FalseThen'上
Timer2.Enabled=False
'Timer3.Enabled=False
Timer1.Enabled=False
Timer4.Enabled=True
EndIf
IfKeyCode=40AndTimer4.Enabled=FalseAndj>cThen'下
Timer2.Enabled=False
Timer1.Enabled=False
'Timer4.Enabled=False
Timer3.Enabled=True
EndIf
IfKeyCode=37AndTimer1.Enabled=FalseThen'左
'Timer1.Enabled=False
Timer3.Enabled=False
Timer4.Enabled=False
Timer2.Enabled=True
EndIf
IfKeyCode=39AndTimer2.Enabled=FalseThen'右
'Timer2.Enabled=False
Timer3.Enabled=False
Timer4.Enabled=False
Timer1.Enabled=True
EndIf
EndSub
PrivateSubTimer5_Timer()
Picture1.DrawWidth=7
Picture1.PSet(g,h),RGB(50,50,0)
Ifb=gAnda=hThen
g=(Int(Rnd*48)+1)*100
h=(Int(Rnd*48)+1)*100
c=c+1
EndIf
Ifc=30Then
z=z+1
j=0:
i=0:
b=300:
a=100:
c=4
MsgBox("恭喜您!
进入下一关!
")
Foro=0To99
aa(o)=0:
bb(o)=0
Nexto
Timer4.Enabled=False
Timer3.Enabled=False
Timer2.Enabled=False
Timer1.Enabled=True
EndIf
Ifp=6Then
MsgBox("您真是快手王啊!
重新开始吧!
")
j=-1:
i=-1:
b=300:
a=100:
c=4:
z=0
MsgBox("对不起!
您咬尾了!
接下来将重新开始游戏!
")
Foro=0To99
aa(o)=0:
bb(o)=0
Nexto
EndIf
Timer1.Interval=(200-z*30)'定义每个定时器间隔时间0.2S
Timer2.Interval=(200-z*30)
Timer3.Interval=(200-z*30)
Timer4.Interval=(200-z*30)
Label3.Caption=g
Label4.Caption=h
Label5.Caption=c+1
Label6.Caption=z+1
EndSub
主程序结束