【正文】
Fen ctFen Then ctMaxFen = ctFen Select Case Index Case m_Start = Not If Then Call KjInit: Call ShowBack Case m_Auto 33 ctAuto = Not ctAuto: mmFast(Index).Checked = ctAuto = ctAuto If Then Call KjInit: Call ShowBack Case m_Fast mmFast(Index).Checked = Not mmFast(Index).Checked If mmFast(Index).Checked Then = 50 Else = 100 LabSnake(I).BorderStyle = 0 End Select If Then If ctAuto Then LabTai(1).Caption = 游戲中(自動) Else LabTai(1).Caption = 游戲中 ctAutoFen = 0: ctFen = 0 Else LabTai(1).Caption = 游戲已停止 End If Call ShowFen End Sub Private Sub Timer1_Timer() Dim nHead As Long, nEnd As Long, X As Long, Y As Long, I As Long Dim H As Long, L As Long, H1 As Long, L1 As Long If ctSize = 0 Then Exit Sub nHead = ctHead: nEnd = KjIndex(ctHead, 1) 39。當前蛇頭、蛇尾序號 MoveHL: Call GetHL(LabSnake(nHead).Left, LabSnake(nHead).Top, H, L) 39。獲得當前蛇頭 行列號 Select Case ctTo Case to_Up: H = H 1 Case to_Down: H = H + 1 Case to_Left: L = L 1 Case to_Right: L = L + 1 34 End Select If L ctL Or L 1 Then LabSnake(nHead).ZOrder = False LabTai(1).Caption = 游戲結(jié)束 Call ShowStr(Game Over, 36) MsgBox GAME OVER 貪食蛇 .Hide 貪食蛇小游戲 .Show End If If H ctH Or H 1 Then LabSnake(nHead).ZOrder = False LabTai(1).Caption = 游戲結(jié)束 Call ShowStr(Game Over, 36) MsgBox GAME OVER 貪食蛇 .Hide 貪食蛇小游戲 .Show End If nHead = nEnd 39。新蛇頭 Call MoveTo(LabSnake(nHead), H, L) 39。蛇尾 移到 蛇頭 前 If ctAuto Then Call AutoPlay(nHead, H, L) 39。自動避免碰到身體,會修改 H, L If InBody(nHead, H, L) 1 Then LabSnake(nHead).ZOrder = False LabTai(1).Caption = 游戲結(jié)束 Call ShowStr(Game Over, 36) MsgBox GAME OVER 貪食蛇 .Hide 貪食蛇小游 戲 .Show 35 GoTo SetNewHead End If 39。是否吃到食物 For I = 0 To ctFoot 1 Call GetHL(ShaFoot(I).Left, ShaFoot(I).Top, H1, L1) 39。獲得食物 行列號 If H = H1 And L = L1 Then ctZong = ctZong + 1 39。蛇身增加一節(jié) Load LabSnake(ctZong): LabSnake(ctZong).Visible = True If mmFast(m_ShowNum).Checked Then LabSnake(ctZong).Caption = ctZong Else LabSnake(I).Caption = LabSnake(ctZong).Move LabSnake(0).Left, LabSnake(0).Top 39。新控件與序號 0重疊 Call ShowFen(True) Call RndFoot(I) 39。重新設(shè)置食物的位置 Exit For End If Next SetNewHead: 39。新蛇頭 LabSnake(nHead).BackColor = 255 If mmFast(m_ShowWen).Checked Then If LabSnake(ctHead).Caption = ● Then LabSnake(nHead).Caption = ◎ Else LabSnake(nHead).Caption = ● End If 39。原蛇頭變蛇身 LabSnake(ctHead).BackColor = RGB(0, 0, 255) If mmFast(m_ShowNum).Checked Then LabSnake(ctHead).Caption = ctHead ctHead = nHead If ctAuto Then FindFoot LabSnake(ctHead).Left, LabSnake(ctHead).Top 39。自動查找食物,修改運動方向。 36 End Sub Private Sub ShowFen(Optional AddFen As Boolean) Dim Adds As Long If mmFast(m_Fast).Checked Then Adds = 20 Else Adds = 10 If ctAuto Then If AddFen Then ctAutoFen = ctAutoFen + Adds LabTai(2).Caption = 最高分 amp。 ctAutoMax LabTai(3).Caption = 得 分 amp。 ctAutoFen 貪食蛇 .Tag = ctAutoMax Else If AddFen Then ctFen = ctFen + Adds LabTai(2).Caption = 最高分 amp。 ctMaxFen LabTai(3).Caption = 得 分 amp。 ctFen 貪食蛇 .Tag = ctMaxFen End If End Sub Private Function ToStr(nTo As enTo) As String Select Case nTo Case to_Up: ToStr = ↑ Case to_Down: ToStr = ↓ Case to_Left: ToStr = ← Case to_Right: ToStr = → End Select End Function Private Sub MoveTo(Kj, H As Long, L As Long) ctB + ctSize * (L 1), ctB + ctSize * (H 1) End Sub Private Sub GetHL(X As Long, Y As Long, H As Long, L As Long) 39。將坐標轉(zhuǎn)變?yōu)樾辛形恢? If ctSize = 0 Then Exit Sub 37 L = 1 + Int((X ctB) / ctSize): H = 1 + Int((Y ctB) / ctSize) End Sub Private Sub ShowStr(nStr As String, Optional FontSize As Long = 9, Optional T As Single) = 14 = FontSize = ctB + (ctRight ctB (nStr)) * If T = 0 Then = ctB + (ctDown ctB (nStr)) * nStr = 13 End Sub Private Sub AutoPlay(Head As Long, H As Long, L As Long) 39。自動避免碰到身體, Head:蛇頭序號 H,L:蛇頭行列位置 39。如果碰到會修改 H,L Dim BodyS As Long, H2 As Long, L2 As Long Dim Head1 As Long, H1 As Long, L1 As Long, ToH As Long, ToL As Long BodyS = InBody(Head, H, L) 39。碰到處的序號 If BodyS 0 Then Exit Sub BodyS = KjIndex(BodyS, 1) 39。碰到處的前面一個 GetHL LabSnake(BodyS).Left, LabSnake(BodyS).Top, H2, L2 39。H2, L2: BodyS 的行列位置 Head1 = KjIndex(Head, 1) 39。蛇頭的后面一個 GetHL LabSnake(Head1).Left, LabSnake(Head1).Top, H1, L1 39。H1, L1: Head1 的行列位置 ToH = H1: ToL = L1 If ctTo = to_Down Or ctTo = to_Up Then 39。垂直運動 If L L2 0 Then ctTo = to_Right Else ctTo = to_Left If ctTo = to_Right Then ToL = ToL + 1 Else ToL = ToL 1 If ToL 1 Then ToL = 1 If ToL ctL Then ToL = ctL If InBody(1, ToH, ToL) 1 Then 39。ToH,ToL 處不是空白 38 ToL = L1 If L L2 0 Then ToH = H1 1: ctTo = to_Down Else ToH = H1 + 1: ctTo = to_Up End If Else 39。水平運動 If H H2 0 Then ctTo = to_Down Else ctTo = to_Up 39。首選遠離 BodyS If ctTo = to_Down Then ToH = ToH + 1 Else ToH = ToH 1 If ToH 1 Then ToH = 1 If ToH ctH Then ToH = ctH If InBody(1, ToH, ToL) 1 Then 39。ToH,ToL 處不是空白 ToH = H1 If H H2 0 Then ToL = L1 1: ctTo = to_Left Else ToL = L1 + 1: ctTo = to_Right End If End If If ToH 1 Or ToH ctH Then Exit Sub