签到

05月05日
尚未签到

共有回帖数 1

    长街旧港00

    等级:


    《主窗体 FrmPlay 代码》——Private blnStartGame As Boolean '标记是否已经开始 新游戏(T=游戏已经开始)
    Private blnPause As Boolean '标记当前是否处于暂停状态(T=暂停)
    Private blnThroughWall As Boolean '标记是否为穿墙模式(T=可以穿墙)
    Private blnOnKeyEvents As Boolean '标记是否能够 接收键盘事件(T=可以接收),此变量可防止 Form_KeyDown()事件重复执行Private Map_Width As Integer '地图宽度(象素)
    Private Map_Height As Integer '地图高度(象素)
    Private Map_Empty_Color '地图-空白地颜色
    Private Map_Bomb_Color '地图-炸弹颜色
    Private Map_Food_Color '地图-食物颜色
    Private MapProperty() As Integer '记录地图各个网格的属性Private curEatCount As Integer '记录 每次出现奖品之前,一共吃进多少物品(包括食物和炸弹,奖品不计),当奖品出现后,此变量值变为 零"0",然后进入下一次统计
    Private curLevel As Integer '当前级别
    Private P1 As thePlayerInfo '记录Player1 的信息Private Snake_P1() As thePosition '记录蛇身坐标
    Private PrizePos As thePosition '记录奖品的坐标Private Record(9) As theRecord '存放前十名的 得分记录信息Option ExplicitPrivate Sub cmdHelp_Click()
       If blnPause = False Then Call Form_KeyDown(KEY_PAUSE, 0) '如果游戏正在进行,则发送“暂停”按键事件,暂停游戏
       frmHelp.Show
       
    End Sub'开始新游戏
    Private Sub cmdNewGame_Click()
       Dim i As Integer
       
       Randomize '重新生成随机数列
       
       blnStartGame = Not blnStartGame
       If blnStartGame Then
           cmdNewGame.Caption = "停止"
       Else
           cmdNewGame.Caption = "新
    游戏"
       End If
       
       
       '中止游戏
       If blnStartGame = False Then
           '如果上一次的奖品还没有消失(以 PrizeRemain  0 为标志),就先清除旧的奖品,然后才显示新的奖品
           If PrizeRemain  0 Then Call ShowPrize(False)        picDisplay.Cls
           
           P1.Score = 0 '玩家的初始分数
           P1.Food = 0
           P1.Bomb = 0
           curEatCount = 0
           PrizeRemain = 0
           blnPause = False
           lblPause.Visible = False
           lblScore.Caption = P1.Score
           lblFoodCount.Caption = P1.Food
           lblBombCount.Caption = P1.Bomb
           P1.blnGameOver = True
           HscrLevel.Enabled = True
           tmrMove.Enabled = False
           Exit Sub
       End If
       
       blnThroughWall = True '穿墙模式
       blnO
    nKeyEvents = True
       
       '暂时使用默认填充色
       Map_Bomb_Color = BOMB_COLOR
       Map_Empty_Color = EMPTY_COLOR
       Map_Food_Color = FOOD_COLOR
       P1.BodyColor = BODY_COLOR
       P1.HeadColor = HEAD_COLOR
       
       '地图初始化
       ReDim MapProperty(MAX_COL_INDEX, MAX_ROW_INDEX)
       Map_Width = (MAX_COL_INDEX + 1) * MAP_SCALE
       Map_Height = (MAX_ROW_INDEX + 1) * MAP_SCALE
       picDisplay.Cls
       picDisplay.Width = Map_Width + 2
       picDisplay.Height = Map_Height + 2
       picDisplay.Line (0, 0)-Step(Map_Width, Map_Height), Map_Empty_Color, BF
           
       FoodCount_AtOneTime = 2 '地图上同时存在的 食物数量
       BombCount_AtOneTime = 1 '地图上同时存在的 炸弹数量
       
       EatCountPerShowPrize = 5 '设置 蛇每吃进多少物品(包括食物和炸弹,奖品不计)才显示一次奖品
       
       curLevel = HscrLevel.Value
       AddScorePerFood = curLevel '每吃进一个 食物,所增加的分数=当前的级别值
       AddScorePerBomb = -curLevel * 2 '每吃进一个 炸弹,所扣掉的分数
           
       P1.Score = Abs(AddScorePerBomb) + 1 '玩家的初始分数='每吃进一个 炸弹,所扣掉的分数+1
       P1.Food = 0
       P1.Bomb = 0
     

    楼主 2016-07-15 09:31 回复

    长街旧港00

    等级:
    ; PrizeRemain = 0
       P1.blnGameOver = False
       lblScore.Caption = P1.Score
       lblFoodCount.Caption = P1.Food
       lblBombCount.Caption = P1.Bomb
       
       '初始化P1蛇身
       ReDim Snake_P1(START_SNAKE_LENGTH)
       For i = 0 To UBound(Snake_P1)
           '设定蛇身各段的起始位置
           Snake_P1(i).X = MAX_COL_INDEX - UBound(Snake_P1) + i
           Snake_P1(i).Y = MAX_ROW_INDEX
           '初始化移动方向
           P1.X_Way = -1
           P1.Y_Way = 0
           MapProperty(Snake_P1(i).X, Snake_P1(i).Y) = MAP_SNAKE
           picDisplay.Line (Snake_P1(i).X * MAP_SCALE, Snake_P1(i).Y * MAP_SCALE)-Step(MAP_SCALE, MAP_SCALE), BODY_COLOR, BF
       Next
       '使用蛇头颜色 重新绘画蛇头
       picDisplay.Line (Snake_P1(0).X * MAP_SCALE, Snake_P1(0).Y * MAP_SCALE)-Step(MAP_SCALE, MAP_SCALE), HEAD_COLOR, BF
       
       
       '放置食物
       For i = 1 To FoodCount_AtOneTime
           Call AddFood
       Next
       
       '放置炸弹
     
    ; For i = 1 To BombCount_AtOneTime
           Call AddBomb
       Next
       
       lblPause.Visible = False
       lblScore.Caption = P1.Score
       lblFoodCount.Caption = P1.Food
       lblBombCount.Caption = P1.Bomb
       
       P1.blnGameOver = False
       HscrLevel.Enabled = False '游戏进行期间不能改变级别
       tmrMove.Enabled = True
    End Sub'显示得分榜
    Private Sub cmdShowScoreList_Click()
       If blnPause = False Then Call Form_KeyDown(KEY_PAUSE, 0) '如果游戏正在进行,则发送“暂停”按键事件,暂停游戏
       frmScoreList.Show
       
    End SubPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
       
       If P1.blnGameOver Or blnStartGame = False Or blnOnKeyEvents = False Then Exit Sub '以下情况(游戏结束、游戏还没有开始、禁用击键事件)不接收按键操作。
       
       '按“Numpad 5”键--暂停/继续
       If KeyCode = KEY_PAUSE Then
           blnPause = Not blnPause
           lblPause.Visible = blnPause
           tmrMove.Enabled = Not blnPause
           Exit Sub
       End If
       
       If blnPause Then Exit Sub '在暂停状态下不接受&ldqu
    o;ESC”外的其它按键
       
       Select Case KeyCode
           Case KEY_LFUP
               blnOnKeyEvents = False
               If P1.X_Way  0 Then
                   P1.X_Way = 0
                   P1.Y_Way = -1
               ElseIf P1.Y_Way  0 Then
                   P1.X_Way = -1
                   P1.Y_Way = 0
               End If
           Case KEY_LFDN
               blnOnKeyEvents = False
               If P1.X_Way  0 Then
                   P1.X_Way = 0
                   P1.Y_Way = 1
               ElseIf P1.Y_Way  0 Then
        P1.X_Way = -1
                   P1.Y_Way = 0
               End If
           
           Case KEY_RTUP
               blnOnKeyEvents = False
               If P1.X_Way  0 Then
                   P1.X_Way = 0
                   P1.Y_Way = -1
               ElseIf P1.Y_Way  0 Then
                   P1.X_Way = 1
                   P1.Y_Way = 0
               End If
           Case KEY_RTDN
               blnOnKeyEvents = False
               If P1.X_Way  0 Then
                   P1.X

    _Way = 0
                   P1.Y_Way = 1
               ElseIf P1.Y_Way  0 Then
                   P1.X_Way = 1
                   P1.Y_Way = 0
               End If
           
       '当蛇以 水平 方向移动时,LF 和 RT 按键无效
           Case KEY_LF
               blnOnKeyEvents = False
               If P1.X_Way = 0 Then
                   P1.X_Way = -1
                   P1.Y_Way = 0
               End If
           Case KEY_RT
               blnOnKeyEvents = False
               If P1.X_Way = 0 Then
                   P1.X_Way = 1
         &nbs
    p;         P1.Y_Way = 0
               End If
           
       '当蛇以 垂直 方向移动时,UP 和 DN 按键无效
           Case KEY_UP
               blnOnKeyEvents = False
               If P1.Y_Way = 0 Then
                   P1.X_Way = 0
                   P1.Y_Way = -1
               End If
           Case KEY_DN
               blnOnKeyEvents = False
               If P1.Y_Way = 0 Then
                   P1.X_Way = 0
                   P1.Y_Way = 1
               End If
           
           Case Else
               Exit Sub
       End Select
    &n
    bsp;  
       tmrMove.Enabled = False '暂停Timer事件,等到本次移动操作全部完成后(即sub RefreshSnake(...)过程执行完毕),再启动Timer
       
       Call PlayerMove
       
    End Sub

    1楼 2016-07-15 09:32 回复

共有回帖数 1
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知