【正文】
繼續(xù) If KeyCode = KEY_PAUSE Then blnPause = Not blnPause = blnPause = Not blnPause Exit Sub End If If blnPause Then Exit Sub 39。暫停Timer事件,等到本次移動操作全部完成后(即sub RefreshSnake(...)過程執(zhí)行完畢),再啟動Timer Call PlayerMove End Sub [返回]本文來自編程入門網():VB 貪吃蛇 單人版游戲(三) 文章來源: CSDN 文章作者: Bugs1984 Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) blnOnKeyEvents = True 39。你的得分是: amp。準備新一輪游戲End Sub39。找出蛇頭的新坐標 = Snake_P1(0).X + = Snake_P1(0).Y + If blnThroughWall Then 39??瞻椎? 39。 If Not ( = Snake_P1(UBound(Snake_P1)).X And = Snake_P1(UBound(Snake_P1)).Y) Then Call GameOver Exit Sub End If Case MAP_FOOD 39。顯示總共吃進的 食物數量 Call ChangeScore(AddScorePerFood, True) 39。統(tǒng)計玩家吃進的 炸彈數量 = 39。獎品 Call ChangeScore(PrizeRemain, False) Call ShowPrize(False) 39。39。根據級別,設置速度End SubPrivate Sub tmrMove_Timer() Call PlayerMoveEnd Sub39。記錄(累加)當前吃進的物品 39。增加地圖上的 食物Private Sub AddFood() Dim tempFood As thePosition 39。增加地圖上的 炸彈Private Sub AddBomb() Dim tempBomb As thePosition 39。在地圖上顯示 獎品 和 獎勵分數39。記錄獎品的坐標 MapProperty(, ) = MAP_PRIZE 39。隨機設定 起始的獎勵分數 = FULL_COLOR tempColor 39。 = True = True 39。標記地圖格的屬性為 空白地 = False = False End If End Sub 本文來自編程入門網():VB 貪吃蛇 單人版游戲(四)文章來源: CSDN 文章作者: Bugs1984 刷新蛇身坐標,更新 地圖網格屬性 以及畫面 39。在地圖上 擦除舊的的蛇頭 (NewHead_X * MAP_SCALE, NewHead_Y * MAP_SCALE)Step(MAP_SCALE, MAP_SCALE), , BF 39。否則會出錯 For i = (UBound(Snake_P1)) To 1 Step 1 Snake_P1(i) = Snake_P1(i 1) Next 39。最后才設定新的 蛇尾坐標(關鍵字“Preserve”的作用是:保留原數組的內容) Snake_P1(UBound(Snake_P1)) = OldTail 39。如果蛇頭的新坐標與舊蛇尾的坐標重合,就不用在舊蛇尾的坐標下 繪畫空白地的圖案(因為該網格屬性已經是 蛇頭,而不是空白地) If Not (NewHead_X = And NewHead_Y = ) Then MapProperty(, ) = MAP_EMPTY 39。pos 排名 Dim Name As String 39。循環(huán),設置玩家玩家名稱 Name = InputBox(你的得分是第 amp。 請輸入你的名稱(不超過15個字符), 進入前10名!) If Len(Name) = 0 Then MsgBox 你取消了 Top 10 得分登記, vbInformation Exit Sub End If If Len(RTrim(Name)) 15 Then Ans = MsgBox(玩家名稱的長度不能超過15個字符! amp。 ” amp。 是否同意?, vbQuestion Or vbYesNo, 輸入玩家名稱) If Ans = vbYes Then Name = Left(Name, 15) End If Loop Until Len(RTrim(Name)) = 15 And Len(RTrim(Name)) 0 39。 RECORD_FILE_NAME For Random As FileNum Len = Len(Record(0)) For i = 0 To 9 Record(i).Score = Val((i)) Record(i).Name = (i) Put FileNum, , Record(i) Next Close FileNumEnd Sub39。在地圖上用 隨機顏色繪畫 獎品 = FULL_COLOR tempColor 39。讀入得分記錄 FileNum = FreeFile Open amp。 ( 當蛇頭和蛇身任一節(jié)重合時,游戲結束(2)地圖: 藍色方格--食物 (吃進食物后,蛇身長度增加一節(jié)); 紅色方格--炸彈; 淡紫色方格--蛇頭; 亮綠色長條--蛇身。 (例如 等級為6,則玩家起始分數是13分;每吃進一個食物加6分;每吃進一個炸彈減12分) 游戲運行之后會在所在目錄下創(chuàng)建一個的文件,存放得分記錄。) ( 每個獎品分數的 初始值是20~50之間的隨機數,當獎品出現后獎勵的分數就會不斷減少。 Call ScoreSort(FileNum) For i = 0 To 9 Get FileNum, , Record(i) Record(i).Score, i Record(i).Name, i Next Close FileNum End Sub39。顯示當前剩余的 獎勵分數 End Sub《排行榜窗體 frmScoreList 代碼》——Private Record(9) As theRecord 39。當獎勵的分數減少到零,就擦除獎品 Exit Sub End If tempColor = Int(Rnd() * (FULL_COLOR + 1)) 39。刷新 記錄文件的內容 End If End Sub39。 Left(Name, 15) amp。 你輸入的 “ amp。 名 amp。判斷得分是否進入前十名 Dim Ans As Integer FileNum = FreeFile Set list = 39。在地圖上擦除舊蛇尾,繪畫空白地 End If End If = TrueEnd Sub39。蛇身長度 + 1 Else 39。判斷是否需要 增加蛇身長度 If blnAddLength Then 39。標記蛇頭新坐標下的地圖格屬性為 玩家蛇身 39。用于在更新蛇身坐標之前,保存原來的 蛇尾坐標 OldTail = Snake_P1(UBound(Snake_P1)) 39。清除獎品 ( * MAP_SCALE, * MAP_SCALE)Step(MAP_SCALE, MAP_SCALE), Map_Empty_Color, BF 39。顯示當前剩余的 獎勵分數 * MAP_SCALE, * MAP_SCALE, MAP_SCALE, MAP_SCALE 39。產生隨機顏色 ( * MAP_SCALE, * MAP_SCALE)Step(MAP_SCALE, MAP_SCALE), tempColor, BF 39。顯示獎品 39。標記地圖格的屬性為 炸彈 ( * MAP_SCALE, * MAP_SCALE)Step(MAP_SCALE, MAP_SCALE), Map_Bomb_Color, BF 39。標記地圖格的屬性為 食物 ( * MAP_SCALE, * MAP_SCALE)Step(MAP_SCALE, MAP_SCALE), Map_Food_Color, BF 39。重新累計 吃進的物品數 39。參數:AddScore--增加的分數(正數=加分,負數=扣分)39。如果游戲正在進行,則發(fā)送“暫?!卑存I事件,暫停游戲 Ans = MsgBox(游戲尚未結束,確定要退出嗎?, vbQuestion Or vbYesNo Or vbDefaultButton2) If Ans = vbYes Then End Else Cancel = True End If Else End End IfEnd Sub39。刷新地圖 上的蛇身圖像39??鄯? Call AddBomb 39。補充地圖上的 食物 Case MAP_BOMB 39。增加蛇身長度 = + 1 39。蛇身 39。非 穿墻模式的移動代碼未設置 End If 39。臨時存放蛇頭的新坐標 Dim blnAddLengh As Boolean 39。 , vbInformation, GAME OVER Call CheckRecord() 39。默認級別:6 = curLevel End Sub39。當蛇以 水平 方向移動時,LF 和 RT 按鍵無效 Case KEY_LF blnOnKeyEvents = False If = 0 Then = 1 = 0 End If Case KEY_RT blnOnKeyEvents = False If = 0 Then = 1 = 0 End If 39。以下情況(游戲結束、游戲還沒有開始、禁用擊鍵事件)不接收按鍵操作。放置炸彈 For i = 1 To BombCount_AtOneTime Call AddBomb Next = False = = = = False = False 39。設定蛇身各段的起始位置 Snake_P1(i).X = MAX_COL_INDEX UBound(Snake_P1) + i Snake_P1(i).Y = MAX_ROW_INDEX 39。每吃進一個 炸彈,所扣掉的分數 = Abs(AddScorePerBomb) + 1 39。地圖上同時存在的 食物數量 BombCount_AtOneTime = 1 39。玩家的初始分數 = 0 = 0 cur