私有枚舉速度
快速= 0
慢慢地= 1
結束枚舉
定義蛇移動方向的枚舉值
私有枚舉tpsDirection
D_UP = 38
D_DOWN = 40
左= 37
右= 39
結束枚舉
定義運動區域中四個禁區的枚舉值。
私有枚舉tpsForbiddenZone
FZ _托普= 30
FZ底部= 5330
FZ _左= 30
FZ右= 5730
結束枚舉
定義蛇頭和蛇身初始值設定項的枚舉值。
私有枚舉tpsSnake
SNAKEONE = 1
蛇二= 2
蛇三= 3
蛇四= 4
結束枚舉
定義蛇的寬度的常數
私有Const snake width As Integer = 100
這個程序用來顯示遊戲信息。
私有子窗體_Load()
我。顯示
Me.lblTitle = "BS Snake-(版本" &;App。專業與藝術。"."& ampApp。未成年人與未成年人。"."& ampApp。修訂版& amp")"
我。Caption = Me.lblTitle.Caption
frmSplash。顯示1
末端接頭
此過程用於將表單恢復到其原始大小。
私有子窗體_Resize()
如果我。WindowState & lt& gt那麽1
我。標題= " "
我。Height = 6405 '表單的高度是6405緹。
我。Width = 8535 '窗體的寬度是8535緹。
我。Left =(屏幕。寬度-寬度)\ 2
我。Top =(屏幕。高度-高度)\ 2
如果…就會結束
末端接頭
這個過程用於重新啟動遊戲。
private Sub cmdGameStart _ MouseDown(Button為整數,Shift為整數,X為Single,Y為Single)
嗶嗶聲
Msg = MsgBox("妳確定要重啟遊戲嗎?",4+32,《BS蛇》)
如果msg = 6,則調用m_subGameInitialize
末端接頭
這個程序用於暫停/運行遊戲。
private Sub chk pause _ MouseDown(Button為整數,Shift為整數,X為Single,Y為Single)
If Me.chkPause.Caption = "暫停& amp(&;p)“那麽
Me.tmrSnakeMove.Enabled = False
Me.tmrGameTime.Enabled = False
Me.picMoveArea.Enabled = False
Me.lblPauseLab.Visible = True
Me.chkPause.Caption = "繼續& amp(&;r)"
其他
Me.tmrSnakeMove.Enabled = True
Me.tmrGameTime.Enabled = True
Me.picMoveArea.Enabled = True
Me.lblPauseLab.Visible = False
Me.chkPause.Caption = "暫停& amp(&;p)"
如果…就會結束
末端接頭
這個程序是用來顯示遊戲規則的。
private Sub cmd gamerules _ MouseDown(Button為整數,Shift為整數,X為Single,Y為Single)
嗶嗶聲
壹個有趣的遊戲&用最簡單的規則,妳會使用鍵盤。Chr(13)_
屏幕上的四個方向鍵控制蛇的移動方向。運動過程中的蛇”&;Chr(13)_
“不能後退,蛇頭不能摸到運動區域邊線以外”&;Chr(13)_
“還有蛇自己的身體,否則遊戲會失敗。亂吃”&;Chr(13)_
“果實之後,蛇的身體會變長,越長越難纏。祝妳好運!!",0+64,《遊戲規則》
末端接頭
這個過程用於顯示遊戲開發信息。
private Sub cmd about _ MouseDown(Button為整數,Shift為整數,X為Single,Y為Single)
嗶嗶聲
MsgBox“BS蛇”&;”(V-& amp;App。專業與藝術。"."& ampApp。未成年人與未成年人。“版本)”&;Chr(13)Chr(13)_
”& ampChr(13)Chr(13)_
“PigheadPrince設計制作”&;Chr(13)_
"版權所有(c) 2002,bestsoft.tcg ",0,"關於此遊戲"
末端接頭
這個程序用於退出遊戲。
private Sub cmdExit _ MouseDown(Button為整數,Shift為整數,X為Single,Y為Single)
嗶嗶聲
Msg = MsgBox("妳想退出這個遊戲嗎?",4+32,《BS蛇》)
選擇案例消息
案例6
結束
案例7
Me.chkWindowButton(2)。值= 0
出口接頭
結束選擇
末端接頭
本程序用於拖動表單_(點擊圖標)
private Sub imgWindowTop _ MouseDown(Button為整數,Shift為整數,X為Single,Y為Single)
釋放捕獲
發送消息Me.hwnd,WM_SYSCOMMAND,SC_MOVE,0
末端接頭
這個* * *程序用於處理窗體控件按鈕組的相關操作(鎖定、最小化和退出)。
private Sub chkWindowButton _ MouseUp(Index為整數,Button為整數,Shift為整數,X為Single,Y為Single)
If按鈕& lt& gt1然後退出接頭
選擇案例索引
大小寫為0的鎖形式
If Me.chkWindowButton(0)。那麽值= 1
Me.imgWindowTop.BorderStyle = 0
Me.imgWindowTop.Enabled = False
其他
me . imgwindowtop . border style = 1
Me.imgWindowTop.Enabled = True
如果…就會結束
案例1 '最小化
我。WindowState = 1
Me.chkWindowButton(1)。值= 0
我。Caption = "BS蛇-(v-" &;App。專業與藝術。"."& ampApp。未成年人與未成年人。"版本)"
案例2 '出口
嗶嗶聲
Msg = MsgBox("妳想退出這個遊戲嗎?",4+32,《BS蛇》)
選擇案例消息
案例6
結束
案例7
Me.chkWindowButton(2)。值= 0
出口接頭
結束選擇
結束選擇
末端接頭
該程序用於設置蛇移動的速度。
私有Sub hsbGameSpeed_Change()
me . tmrsnakemove . interval = me . hsbgamespeed . value
末端接頭
這個過程是用來通過鍵盤的方向鍵來改變蛇的移動方向。
private Sub picMoveArea _ KeyDown(key code為整數,Shift為整數)
選擇案例g_intDirection
案例D_UP
如果KeyCode = D_DOWN,則退出Sub
案例D_DOWN
如果KeyCode = D_UP,則退出Sub
案例D _左
如果KeyCode = D_RIGHT,則退出Sub
案例D _右
如果KeyCode = D_LEFT,則退出Sub
結束選擇
g_intDirection = KeyCode
末端接頭
這個計時循環過程用於計算和顯示遊戲消耗的秒數。
私有Sub tmrGameTime_Timer()
g _ lngGameTime = g _ lngGameTime+1
me . lblgametime . caption = g _ lngGameTime & amp;"秒"
末端接頭
這個定時循環過程用來控制蛇的動作軌跡。
私有Sub tmrSnakeMove_Timer()
Dim lngSnakeX壹樣長,lngSnakeY壹樣長,lngSnakeColor壹樣長
Dim lngPointX為Long,lngPointY為Long,lngPointColor為Long
使不規則化
Me.picMoveArea.SetFocus
Me.picMoveArea.Cls
確認蛇頭的移動方向,獲得新的位置。
選擇案例g_intDirection
格D_UP上移。
g_udtSnake(SNAKEONE)。Snake_CurX = g_udtSnake(SNAKEONE)。Snake_OldX
g_udtSnake(SNAKEONE)。Snake_CurY = g_udtSnake(SNAKEONE)。蛇老了
g_udtSnake(SNAKEONE)。Snake_CurY = g_udtSnake(SNAKEONE)。蛇形寬度
案例D_DOWN向下移動。
g_udtSnake(SNAKEONE)。Snake_CurX = g_udtSnake(SNAKEONE)。Snake_OldX
g_udtSnake(SNAKEONE)。Snake_CurY = g_udtSnake(SNAKEONE)。蛇老了
g_udtSnake(SNAKEONE)。Snake_CurY = g_udtSnake(SNAKEONE)。Snake_CurY +蛇寬
案例D_LEFT '移動到左邊。
g_udtSnake(SNAKEONE)。Snake_CurX = g_udtSnake(SNAKEONE)。Snake_OldX
g_udtSnake(SNAKEONE)。Snake_CurX = g_udtSnake(SNAKEONE)。Snake_CurX -蛇寬
g_udtSnake(SNAKEONE)。Snake_CurY = g_udtSnake(SNAKEONE)。蛇老了
“事例D_RIGHT”向右移動。
g_udtSnake(SNAKEONE)。Snake_CurX = g_udtSnake(SNAKEONE)。Snake_OldX
g_udtSnake(SNAKEONE)。Snake_CurX = g_udtSnake(SNAKEONE)。Snake_CurX + SNAKEWIDTH
g_udtSnake(SNAKEONE)。Snake_CurY = g_udtSnake(SNAKEONE)。蛇老了
結束選擇
根據新的位置畫蛇頭。
lngSnakeX = g_udtSnake(SNAKEONE)。Snake_CurX
lngSnakeY = g_udtSnake(SNAKEONE)。Snake_CurY
lngSnakeColor = g _ udtSnake(snake one)。蛇的顏色
Me.picMoveArea.PSet (lngSnakeX,lngSnakeY),lngSnakeColor
移動蛇身體的其他部分。
對於i = 2到g_intSnakeLength
g_udtSnake(i)。snake _ CurX = g _ udtSnake(I-1)。Snake_OldX
g_udtSnake(i)。snake _ CurY = g _ udtSnake(I-1)。蛇老了
lngSnakeX = g_udtSnake(i)。Snake_CurX
lngSnakeY = g_udtSnake(i)。Snake_CurY
lngSnakeColor = g_udtSnake(i)。蛇的顏色
Me.picMoveArea.PSet (lngSnakeX,lngSnakeY),lngSnakeColor
接下來我
更新蛇的舊坐標位置
對於j = 1到g_intSnakeLength
g_udtSnake(j)。Snake_OldX = g_udtSnake(j)。Snake_CurX
g_udtSnake(j)。Snake_OldY = g_udtSnake(j)。Snake_CurY
下壹個j
判斷蛇在移動過程中是否在禁區內,導致遊戲失敗。
if m _ funMoveForbiddenZone(g _ udtSnake(snake one)。Snake_CurX,g_udtSnake(SNAKEONE)。Snake_CurY)那麽
嗶嗶聲
MsgBox“妳的蛇移動到了禁區,遊戲失敗!”0+16,“BS蛇”
Me.tmrSnakeMove.Enabled = False
Me.tmrGameTime.Enabled = False
Me.picMoveArea.Visible = False
出口接頭
如果…就會結束
判斷蛇是否在運動中觸碰到自己的身體導致遊戲失敗。
if m _ funTouchSnakeBody(g _ udtSnake(snake one)。Snake_CurX,g_udtSnake(SNAKEONE)。Snake_CurY)那麽
嗶嗶聲
MsgBox“妳的蛇在移動的時候碰到了自己的身體,遊戲失敗!”0+16,“BS蛇”
Me.tmrSnakeMove.Enabled = False
Me.tmrGameTime.Enabled = False
Me.picMoveArea.Visible = False
出口接頭
如果…就會結束
判斷蛇是否吃了水果。
if m _ funEatPoint(g _ udtSnake(snake one)。Snake_CurX,g_udtSnake(SNAKEONE)。Snake_CurY)那麽
累積玩家分數,刷新分數顯示。
g _ intPlayerScore = g _ intPlayerScore+1
me . lblyourscore . caption = g _ intPlayerScore & amp;“分”
叫m_subAddSnake '加長蛇的身體。
調用m_subGetPoint '獲取下壹個水果的位置和顏色。
其他
畫水果
lngPointX = g_udtPoint。X點
lngPointY = g_udtPoint。Y點
lngPointColor = g_udtPoint。點顏色
Me.picMoveArea.PSet (lngPointX,lngPointY),lngPointColor
如果…就會結束
末端接頭
這個私有子進程用於初始化遊戲。
私有Sub m_subGameInitialize()
' Erase g_udtSnake '清空蛇的結構數組。
' G_intPlayerScore = 0 '清除玩家的分數。
G_lngGameTime = 0 '秒清除遊戲。
' G_intDirection = D_DOWN '設置蛇的初始移動方向為向下。
G_intSnakeLength = 4 '設置蛇的初始長度。
redim g _ udt snake(1 tog _ intsnakelength)'重新定義了蛇的長度。
定義蛇頭的數據
用g_udtSnake(SNAKEONE)
。Snake_OldX = 530
。蛇老= 530
。Snake_Color = vbBlack
以…結尾
定義蛇體第2節的數據。
用g_udtSnake(SNAKETWO)
。Snake_OldX = 530
。Snake_OldY = 430
。Snake _ Color =格林
以…結尾
定義蛇體第3節的數據。
用g_udtSnake(SNAKETHREE)
。Snake_OldX = 530
。Snake_OldY = 330
。Snake _ Color =黃色
以…結尾
定義蛇體第4節的數據。
用g_udtSnake(SNAKEFOUR)
。Snake_OldX = 530
。Snake_OldY = 230
。Snake_Color = vbRed
以…結尾
Me.picMoveArea.Visible = True
me . lblyourscore . caption = g _ intPlayerScore & amp;“分”
me . lblgametime . caption = g _ lngGameTime & amp;"秒"
me . tmrsnakemove . interval = me . hsbgamespeed . value
Me.tmrSnakeMove.Enabled = True
Me.tmrGameTime.Enabled = True
調用m_subGetPoint '獲取第壹個水果的位置和顏色。
末端接頭
這個私有子進程用於返回獲得的水果的位置和顏色信息。
私有Sub m_subGetPoint()
Dim lngRedValue為長整型,lngGreenValue為長整型,lngBlueValue為長整型
Dim lngPointX為Long,lngPointY為Long,lngPointColor為Long
隨機獲取水果的顏色。
lngRedValue = Int((255-0+1)* Rnd+0)
lngGreenValue = Int((255-0+1)* Rnd+0)
lngBlueValue = Int((255-0+1)* Rnd+0)
lngPointColor = RGB(lngRedValue,lngGreenValue,lngBlueValue)
隨機獲取水果的位置
lngPointX = Int((FZ _左-FZ _右+1)* Rnd+FZ _右)
lngPointY = Int((FZ _頂-FZ _底+1)* Rnd+FZ _底)
我。PSet (lngPointX,lngPointY),lngPointColor
設置函數返回值
使用g_udtPoint
。Point_X = lngPointX
。Point_Y = lngPointY
。Point_Color = lngPointColor
以…結尾
末端接頭
這個私有的子過程用於延長蛇的身體
私有Sub m_subAddSnake()
Dim udtSnakeTemp() As Snake
Dim lngSnakeX壹樣長,lngSnakeY壹樣長,lngSnakeColor壹樣長
備份蛇原身體的數據,加長蛇的身體
ReDim udtSnakeTemp(1到g_intSnakeLength)
對於k = 1到g_intSnakeLength
帶有udtSnakeTemp(k)
。Snake_CurX = g_udtSnake(k)。Snake_CurX
。Snake_CurY = g_udtSnake(k)。Snake_CurY
。Snake_OldX = g_udtSnake(k)。Snake_OldX
。Snake_OldY = g_udtSnake(k)。蛇老了
。Snake_Color = g_udtSnake(k)。蛇的顏色
以…結尾
下壹個k
g _ intSnakeLength = g _ intSnakeLength+1
ReDim g _ udtSnake(g _ intSnakeLength)
將備份蛇體的數據返回到加長蛇體數組中。
對於l = 1到g_intSnakeLength - 1
用g_udtSnake(l)
。Snake_CurX = udtSnakeTemp(l)。Snake_CurX
。Snake_CurY = udtSnakeTemp(l)。Snake_CurY
。Snake_OldX = udtSnakeTemp(l)。Snake_OldX
。Snake_OldY = udtSnakeTemp(l)。蛇老了
。Snake_Color = udtSnakeTemp(l)。蛇的顏色
以…結尾
下壹個l
寫入新添加的正文數據
選擇案例g_intDirection
案例D_UP
with g _ udtSnake(g _ intSnakeLength)
。snake _ OldX = g _ udtSnake(g _ intSnakeLength-1)。Snake_CurX + SNAKEWIDTH
。snake _ OldY = g _ udtSnake(g _ intSnakeLength-1)。Snake_CurY
。Snake_Color = g_udtPoint。點顏色
以…結尾
案例D_DOWN
with g _ udtSnake(g _ intSnakeLength)
。snake _ OldX = g _ udtSnake(g _ intSnakeLength-1)。Snake_CurX -蛇寬
。snake _ OldY = g _ udtSnake(g _ intSnakeLength-1)。Snake_CurY
。Snake_Color = g_udtPoint。點顏色
以…結尾
案例D _左
with g _ udtSnake(g _ intSnakeLength)
。snake _ OldX = g _ udtSnake(g _ intSnakeLength-1)。Snake_CurX
。snake _ OldY = g _ udtSnake(g _ intSnakeLength-1)。Snake_CurY +蛇寬
。Snake_Color = g_udtPoint。點顏色
以…結尾
案例D _右
with g _ udtSnake(g _ intSnakeLength)
。snake _ OldX = g _ udtSnake(g _ intSnakeLength-1)。Snake_CurX
。snake _ OldY = g _ udtSnake(g _ intSnakeLength-1)。蛇形寬度
。Snake_Color = g_udtPoint。點顏色
以…結尾
結束選擇
lngSnakeX = g _ udtSnake(g _ intSnakeLength)。Snake_CurX
lngSnakeY = g _ udtSnake(g _ intSnakeLength)。Snake_CurY
lngSnakeColor = g _ udtSnake(g _ intSnakeLength)。蛇的顏色
Me.picMoveArea.PSet (lngSnakeX,lngSnakeY),lngSnakeColor
末端接頭
這個自定義函數用於返回移動的蛇是否到達禁區,遊戲是否失敗。
私有函數m _ funMoveForbiddenZone(SnakeX As Long,SnakeY As Long)為布爾值
如果(SnakeX & gt= FZ _左和SnakeX & lt= FZ _右)和(蛇& gt= FZ _托普和蛇& lt= FZ _底部)然後
m_funMoveForbiddenZone = False
其他
m_funMoveForbiddenZone = True
如果…就會結束
結束功能
這個自定義函數用於返回移動的蛇是否觸碰到自己的身體,遊戲失敗。
私有函數m _ funTouchSnakeBody(SnakeX As Long,SnakeY As Long)為布爾值
對於m = 2到g_intSnakeLength
如果SnakeX = g_udtSnake(m)。Snake_CurX和SnakeY = g_udtSnake(m)。那麽Snake_CurY
m_funTouchSnakeBody = True
為...退出
其他
m_funTouchSnakeBody = False
如果…就會結束
下壹個m
結束功能
這個自定義函數用於返回移動的蛇是否吃了水果。
私有函數m_funEatPoint(SnakeX As Long,SnakeY As Long)為布爾值
如果Abs(SnakeX - g_udtPoint。point _ X)& lt;= SNAKEWIDTH和Abs(SnakeY - g_udtPoint。point _ Y)& lt;=那麽蛇的寬度
m_funEatPoint = True
其他
m_funEatPoint = False
如果…就會結束
結束功能
(API函數調用過程_用於實現無標題表單的拖動操作)-。
RleaseCapture函數用於釋放鼠標捕獲。
公共聲明函數ReleaseCapture Lib "user32 "()為Long
“SendMessage”函數用於發送消息,將表單移動到Windows。
公共聲明函數SendMessage Lib“user 32”別名“SendMessage a”(ByVal hwnd As _
Long、ByVal wMsg壹樣長、ByVal wParam壹樣長、IParam壹樣長)
公共Const WM _ SYSCOMMAND = & amp“H112”聲明了壹個用於向Windows發送消息的常數。
公共Const SC _ MOVE = & amp“HF012”聲明了控制移動窗體的常數。
(遊戲變量聲明部分)-。
定義snakes的數據類型結構。
公共型蛇
Snake_OldX壹樣長
蛇壹樣長
Snake_CurX壹樣長
Snake_CurY壹樣長
蛇_顏色壹樣長
結束類型
定義水果的數據類型結構。
公共類型點
點X壹樣長
點Y壹樣長
點顏色壹樣長
結束類型
定義壹個動態蛇數組
Public g_udtSnake() As Snake
定義水果
公共g_udtPoint作為點
定義蛇的長度。
Public g_intSnakeLength為整數
定義蛇的顏色
Public g_lngSnakeColor As Long
定義蛇移動的方向
Public g_intDirection為整數
定義玩家的分數
Public g_intPlayerScore為整數
定義遊戲花費的秒數。
Public g_lngGameTime As Long