为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

编程高手之路—vb入门和游戏编写—VB 贪吃蛇 单人版游戏(二)

2010-07-24 7页 doc 51KB 45阅读

用户头像

is_457520

暂无简介

举报
编程高手之路—vb入门和游戏编写—VB 贪吃蛇 单人版游戏(二)编程高手之路—vb入门和游戏编写—VB 贪吃蛇 单人版游戏(二) 《主窗体 FrmPlay 代码》—— Private blnStartGame As Boolean '标记是否已经开始 新游戏(T=游戏已经开始) Private blnPause As Boolean '标记当前是否处于暂停状态(T=暂停) Private blnThroughWall As Boolean '标记是否为穿墙模式(T=可以穿墙) Private blnOnKeyEvents As Boolean '标记是否能够 接收键盘事件(T=可以接收...
编程高手之路—vb入门和游戏编写—VB 贪吃蛇 单人版游戏(二)
编程高手之路—vb入门和游戏编写—VB 贪吃蛇 单人版游戏(二) 《主窗体 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 Explicit Private 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 '穿墙模式     blnOnKeyEvents = 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     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 Sub Private 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 '在暂停状态下不接受“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                 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         tmrMove.Enabled = False '暂停Timer事件,等到本次移动操作全部完成后(即sub RefreshSnake(...)过程执行完毕),再启动Timer         Call PlayerMove     End Sub
/
本文档为【编程高手之路—vb入门和游戏编写—VB 贪吃蛇 单人版游戏(二)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索