




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编程高手之路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 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 穿墙模式 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 = TrueEnd 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 在暂停状态下不接受“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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 森林防疫基本知识培训课件
- 工勤技能试题及答案
- 2025年红白理事会工作职责与招聘考试模拟题详解
- 2025年物流师职业资格考试全真模拟卷及答案解析
- 2025年初级产品经理面试宝典与案例分析题集
- 湖北省利川市第五中学2026届化学高三第一学期期末达标测试试题含解析
- 2025年初入教育行业者教学技能面试模拟题集解析
- 2025年心理咨询师专业笔试模拟卷及解析
- 2025年乡村振兴大课堂村级专干招聘笔试模拟题及备考策略
- 2025年农业科技发展前沿动态及趋势分析预测题
- 心电监护的并发症及预防
- 风电场知识培训课件下载
- 生态经济学-杨建州-课件专题
- 《民用无人机作业气象条件等级 植保》
- 香港借住合同范例
- 安全伴我行-大学生安全教育知到智慧树章节测试课后答案2024年秋哈尔滨工程大学
- 《采购部相关培训》课件
- 围手术期的ERAS营养护理管理
- 2024年数据泄露一次性赔偿合同
- 有害物质过程管理系统HSPM培训教材
- 乒乓球馆合伙人协议
评论
0/150
提交评论