<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      使用VB創建貪吃蛇

             貪吃蛇作為一個經典游戲,在其開發成功后,有很長一段時間令很多人為之振奮,但隨著時間的流逝,貪吃蛇也逐漸淡出人們的視野。本次,我利用VB重現貪吃蛇的創建。主要使用到的控件:Label標簽,Command按鈕,Timer控件。

      以下為創建過程:

      貪吃蛇作為一個游戲來說,主要分為6個部分:

      1. 地圖創建部分;
      2. 地圖坐標初始化部分;
      3. 食物創建部分;
      4. 貪吃蛇創建部分;
      5. 貪吃蛇移動控制部分;
      6. 貪吃蛇吃食物身體變化部分。

       在創建之前,我們需要為我們需要的變量進行定義:

       1 Private MapXy(4900) As xy '用于存放全部的地圖坐標,這里以70*70為例
       2 Private Snake() As xy '用于存放蛇的身體及頭的坐標
       3 Private SnakeLength As Long '用于存放蛇身體長度
       4 Private wbtemp As xy '用于存放尾巴坐標及類型
       5 Private Food As xy '用于保存食物的坐標
       6 Private Alive As Boolean'用于判斷是否活著
       7 Private MapColors As Long
       8 Private SnakeHeadColors As Long
       9 Private SnakeBodyColors As Long
      10 Private FoodColors As Long
      11 Private MapCol As Long
      12 Private MapTotal As Long
      13 Private Key As Integer

       地圖的創建:

       1 Private Function CreateMap(ByVal TotalNum As Long, ByVal ColNum As Long, ByVal MapInitColor As Long) As Boolean  'Create the game map,if create success then return true,else return false
       2  On Error Resume Next
       3  Dim i As Long
       4  If TotalNum <= 2 Then
       5  CreateMap = False
       6  Exit Function
       7  Else
       8  Map(1).BackColor = MapInitColor '初始顏色
       9         For i = 2 To TotalNum '創建了70*70的區域
      10                 DoEvents
      11                 Load Map(i)
      12                 Map(i).Width = Map(i - 1).Width
      13                 Map(i).Visible = True
      14                 If (i - ColNum - 1) Mod ColNum = 0 Then
      15                         Map(i).Top = Map(i - 1).Top + Map(1).Height + 1
      16                         Map(i).Left = Map(1).Left
      17                 Else
      18                         Map(i).Top = Map(i - 1).Top
      19                         Map(i).Left = Map(i - 1).Left + Map(1).Width + 1
      20                 End If
      21 
      22         Next
      23         CreateMap = True
      24     End If
      25 End Function

      地圖坐標初始化:

      1 Private Sub MapXyInit() '地圖坐標初始化
      2 Dim i As Integer
      3 For i = 1 To MapTotal
      4 MapXy(i).lx = 0 '0是無障礙,1是障礙(包含蛇自身),2是食物
      5 MapXy(i).X = Fix(i / (1 + MapCol)) + 1 'x坐標是除數+1
      6 MapXy(i).Y = i - (MapXy(i).X - 1) * MapCol 'y做差
      7 Map(i).BackColor = MapColors
      8 Next
      9 End Sub

      創建食物Food:

       1 Sub CreatFood() '創建食物
       2 
       3         Randomize
       4 a:
       5         Food.X = Int(Rnd() * (MapCol - 1 + 1) + 1) '這是food的x坐標:1-MapCol
       6         Food.Y = Int(Rnd() * (MapCol - 1 + 1) + 1) '這是food的y坐標:1-MapCol
       7 
       8         If MapXy(((Food.X) - 1) * MapCol + Food.Y).lx = 1 Then '這里就以食物所在的位置是否為紅就可以判斷是不是在蛇身上
       9                 GoTo a
      10         Else
      11                MapXy(((Food.X) - 1) * MapCol + Food.Y).lx = 2 '表示創建了食物,類型是2
      12                Map((((Food.X) - 1) * MapCol + Food.Y)).BackColor = FoodColors '食物的顏色是綠色
      13         End If
      14 
      15 End Sub

      創建蛇:

       1 Private Sub CreateSnake() '創建蛇自身
       2 On Error Resume Next
       3 SnakeLength = 1
       4 ReDim Preserve Snake(SnakeLength) '重新定義蛇的長度
       5 Randomize
       6 Snake(SnakeLength).X = Int(Rnd() * (MapCol - 1 + 1) + 1)
       7 Snake(SnakeLength).Y = Int(Rnd() * (MapCol - 1 + 1) + 1)
       8 MapXy((Snake(SnakeLength).X - 1) * MapCol + Snake(SnakeLength).Y).lx = 1 '表示為有障礙
       9 Map((Snake(SnakeLength).X - 1) * MapCol + Snake(SnakeLength).Y).BackColor = SnakeHeadColors
      10 End Sub

      蛇吃食物的身體變化:

       1 Sub EatFood() '吃food的坐標變化
       2 
       3         Dim i
       4 
       5         Dim temp() As xy
       6 
       7         If Snake(SnakeLength).X = Food.X And Snake(SnakeLength).Y = Food.Y Then  '表示吃到食物
       8                 ReDim Preserve temp(SnakeLength + 1) '暫時存放
       9 
      10                 For i = 1 To UBound(Snake)
      11                         temp(i + 1) = Snake(i)
      12                 Next
      13 
      14                 temp(1) = wbtemp '將尾巴坐標置入
      15                 SnakeLength = SnakeLength + 1
      16                 ReDim Preserve Snake(SnakeLength) '重新改變長度
      17 
      18                 For i = 1 To SnakeLength
      19                         Snake(i) = temp(i)
      20                 Next
      21                 Call CreatFood
      22         End If
      23 
      24 End Sub

      蛇身體的移動:

       1 Private Function SnakeMove(a() As xy, b As xy) '這是蛇身體的移動
       2         Dim i As Long
       3         If UBound(a) > 1 Then
       4                 wbtemp = a(1)
       5                 Map((a(1).X - 1) * MapCol + a(1).Y).BackColor = MapColors '尾巴顏色黑
       6                 MapXy(((a(1).X - 1) * MapCol + a(1).Y)).lx = 0
       7                 For i = 1 To UBound(a) - 1
       8                         a(i) = a(i + 1)
       9                        Map((a(i).X - 1) * MapCol + a(i).Y).BackColor = SnakeBodyColors '尾巴紅
      10                 Next
      11                 a(UBound(a)) = b
      12                 Map((b.X - 1) * MapCol + b.Y).BackColor = SnakeHeadColors '頭顏色藍
      13                  MapXy((b.X - 1) * MapCol + b.Y).lx = 1
      14         Else '表明只有蛇頭
      15                 wbtemp = a(UBound(a))
      16                  Map((wbtemp.X - 1) * MapCol + (wbtemp.Y)).BackColor = MapColors '尾巴顏色黑
      17                 MapXy(((a(UBound(a)).X - 1) * MapCol + a(UBound(a)).Y)).lx = 0
      18                 a(UBound(a)) = b
      19                Map((b.X - 1) * MapCol + b.Y).BackColor = SnakeHeadColors '頭顏色藍
      20                  MapXy((b.X - 1) * MapCol + b.Y).lx = 1
      21         End If
      22         EatFood
      23 End Function

      蛇在移動的前提下向上移動,這里注意墻和障礙物的定義,不能穿墻和穿越自己的身體:

       1 Sub Move_Up() '向上移動
       2     Dim g As xy
       3         If Snake(SnakeLength).X > 1 Then
       4                 If MapXy((Snake(SnakeLength).X - 2) * MapCol + Snake(SnakeLength).Y).lx <> 1 Then
       5                            g.X = Snake(SnakeLength).X - 1
       6                            g.Y = Snake(SnakeLength).Y
       7                         SnakeMove Snake, g
       8                         Else
       9                         Alive = False
      10                 End If
      11 
      12         Else
      13                 Alive = False
      14         End If
      15 
      16 End Sub

      蛇向下移動:

       1 Sub Move_Down() '向下移動
       2     Dim g As xy
       3         If Snake(SnakeLength).X < MapCol Then
       4                 If MapXy((Snake(SnakeLength).X) * MapCol + Snake(SnakeLength).Y).lx <> 1 Then
       5                            g.X = Snake(SnakeLength).X + 1
       6                            g.Y = Snake(SnakeLength).Y
       7                         SnakeMove Snake, g
       8                         Else
       9                         Alive = False
      10                 End If
      11 
      12         Else
      13                 Alive = False
      14         End If
      15 
      16 End Sub

      蛇向左移動:

       1 Sub Move_Left() '向左移動
       2     Dim g As xy
       3         If Snake(SnakeLength).Y > 1 Then
       4                 If MapXy((Snake(SnakeLength).X - 1) * MapCol + Snake(SnakeLength).Y - 1).lx <> 1 Then
       5                            g.X = Snake(SnakeLength).X
       6                            g.Y = Snake(SnakeLength).Y - 1
       7                         SnakeMove Snake, g
       8                         Else
       9                         Alive = False
      10                 End If
      11 
      12         Else
      13                 Alive = False
      14         End If
      15 
      16 End Sub

      蛇向右移動:

       1 Sub Move_Right() '向右移動
       2     Dim g As xy
       3         If Snake(SnakeLength).Y < MapCol Then
       4                 If MapXy((Snake(SnakeLength).X - 1) * MapCol + Snake(SnakeLength).Y + 1).lx <> 1 Then
       5                            g.X = Snake(SnakeLength).X
       6                            g.Y = Snake(SnakeLength).Y + 1
       7                         SnakeMove Snake, g
       8                         Else
       9                         Alive = False
      10                 End If
      11 
      12         Else
      13                 Alive = False
      14         End If
      15 
      16 End Sub

      下面給出一個70*70的地圖下,貪吃蛇的初始定義實例:

      在這里我們可以隨便改變地圖的顏色,蛇頭的顏色,蛇身體的顏色,以及食物的顏色。

      實例:

      第一步:

       1 Alive = True
       2  MapColors = &HFF8080    '地圖自己的顏色
       3  SnakeHeadColors = vbBlue
       4  SnakeBodyColors = vbRed
       5  FoodColors = vbGreen
       6  MapCol = 70
       7  MapTotal = 4900
       8 CreateMap MapTotal, MapCol, MapColors '創建地圖
       9 MapXyInit '地圖坐標初始化
      10 CreateSnake
      11 CreatFood

      第二步:

       1 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
       2 Key = KeyCode
       3         Select Case KeyCode
       4 
       5                 Case vbKeyA:
       6                         Move_Left
       7 
       8                 Case vbKeyD:
       9                         Move_Right
      10 
      11                 Case vbKeyW:
      12                         Move_Up
      13 
      14                 Case vbKeyS:
      15                         Move_Down
      16         End Select
      17 
      18 End Sub

      這里的key是在接受鍵盤點擊后的緩存,保證蛇在操作后有一個開始的方向,這位貪吃蛇游戲增加難度,如同給蛇一個初速度。

      這里我們再使用時間控件,進行事件處理:

       1 If SnakeLength <= 20 Then
       2 Timer2.Interval = 900
       3 End If
       4 If SnakeLength > 100 Then
       5 Timer2.Interval = 200
       6 End If
       7 If SnakeLength > 20 And SnakeLength <= 100 Then
       8 Timer2.Interval = 500
       9 End If
      10 If Key <> 0 And Alive = True Then
      11 Call Form_KeyDown(Key, 0)
      12 End If

      這里分別以蛇的長度作為速度的改變,20,100。

      這基礎之上,你還可以增加分數,例如我們使用時間控件,在事件中寫入:

      Label1.Caption = "Score:" & 90 + SnakeLength * 10 & "           Length:" & SnakeLength

      這就是在初始化得分100的前提下得分,并顯示長度。

      在此基礎上一個完整的貪吃蛇就完成了。與一般不同的是,這個貪吃蛇的地圖是label數組。移動全部在數組中。另外還需要我們定義一種新數據結構類型:

      1 Type xy '二維坐標數據類型
      2 X As Long 'x坐標
      3 Y As Long 'y坐標
      4 lx As Long '坐標的類型
      5 End Type

      如此,貪吃蛇就創建成功了。如下圖:

      posted @ 2017-02-04 22:17  onedayismway  閱讀(1009)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成人免费无遮挡无码黄漫视频| 国产成人精品亚洲精品日日| 日韩av在线不卡一区二区三区| 蜜臀久久综合一本av| 怡红院一区二区三区在线| 四虎永久免费高清视频| 武义县| 欧洲美熟女乱又伦免费视频| 亚洲欧美日韩综合一区在线| 欧美午夜成人片在线观看| 亚洲av一本二本三本| 日韩av无码精品人妻系列| 亚洲精品日本久久久中文字幕 | 亚洲av产在线精品亚洲第一站| 精品日韩人妻中文字幕| 亚洲精品国产精品国在线| 日本高清视频网站www| 亚洲狼人久久伊人久久伊| 人妻丝袜无码专区视频网站| 成人精品国产一区二区网| 中文无码乱人伦中文视频在线| 忘忧草在线社区www中国中文| 婷婷综合缴情亚洲| 成人做爰www网站视频| 午夜夜福利一区二区三区| 亚洲最大日韩精品一区| 久久人人97超碰精品| 亚洲色大成网站www在线| 亚洲精品香蕉一区二区| 97se亚洲国产综合自在线观看| 丝袜美腿亚洲综合在线观看视频| 高清无码爆乳潮喷在线观看| 国产又黄又爽又不遮挡视频| 邻居少妇张开腿让我爽了一夜| 天天躁夜夜躁天干天干2020| 亚洲欧美中文日韩v在线97| 国产美女久久精品香蕉| 国产精品美女一区二区三| 四虎国产精品免费久久| 成年女人免费v片| 亚州av第二区国产精品|