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

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

2010-07-24 4页 doc 28KB 144阅读

用户头像

is_457520

暂无简介

举报
编程高手之路—vb入门和游戏编写—VB 贪吃蛇 单人版游戏(一)编程高手之路—vb入门和游戏编写—VB 贪吃蛇 单人版游戏(一) 本文介绍编制贪吃蛇游戏的一般方法, 其中不含什么高深的算法,只使用了初级的VB编程方法,通俗易懂。 各位如有任何见解,请不吝赐教。 本人QQ : 190317890 (请在身份验证里面写上“CSDN”) 邮箱 bugs1984@126.com 需要本程序VB源码文件的朋友,请留下你的 E-mail,我会尽快寄出。 设计思路: (一)开始新游戏 1.1 获取并应用各个参数(当前级别,控制键等),初始化随机数(Randomize)。 1.2 清除地图上的所...
编程高手之路—vb入门和游戏编写—VB 贪吃蛇 单人版游戏(一)
编程高手之路—vb入门和游戏编写—VB 贪吃蛇 单人版游戏(一) 本文介绍编制贪吃蛇游戏的一般方法, 其中不含什么高深的算法,只使用了初级的VB编程方法,通俗易懂。 各位如有任何见解,请不吝赐教。 本人QQ : 190317890 (请在身份验证里面写上“CSDN”) 邮箱 bugs1984@126.com 需要本程序VB源码文件的朋友,请留下你的 E-mail,我会尽快寄出。 设计思路: (一)开始新游戏 1.1 获取并应用各个参数(当前级别,控制键等),初始化随机数(Randomize)。 1.2 清除地图上的所有物品,各个统计数值置零。 1.3 初始化地图:布置食物,炸弹,蛇身位置以及蛇头的移动方向——在PictureBox上绘画图像 并修改对应的地图格属性值(MapProperty()数组)。 1.4 启动Timer定时器,游戏开始。 (二)游戏操作 2.1 暂停\恢复—— 修改示游戏状态的Boolean型变量值; 显示\隐藏 表示游戏状态的Label; 暂停\恢复 Timer定时器。 2.2 控制方向(根据Nokia贪吃蛇的操作方式)—— 由于蛇头只能朝上下左右4个方向移动,但是方向键有8个,所以“斜线方向”的控制键和水平,垂直方向的控制键编码上有点不同 2.2.1 斜线方向键(以“右上”方向键为例)—— 如果当前蛇头朝着左边(水平方向)运动,则将水平方向的分量变为0,再将垂直方向的分量变为-1(向上运动); 如果当前蛇头朝着上方(垂直方向)运动,则将垂直方向的分量变为0,再将水平方向的分量变为 1(向右运动)。 其余“左上,左下,右下”的方向键编码与上述雷同。 2.2.2“水平,垂直”方向键—— 当蛇以 水平 方向移动时,“左”和“右”的按键无效;(即不处理按键事件) 当蛇以 垂直 方向移动时,“上”和“下”的按键无效。 (三)移动蛇身 3.1 根据运动方向,找出蛇头的新坐标; 3.2 判断蛇头新坐标下的 地图属性—— (1)如果蛇头的新坐标 和当前 蛇尾 的坐标重合,那不算GameOver--因为随着蛇头的移动,蛇身各个节点都会向前跟进,使得当前 蛇尾 坐标下的网格在移动之后会变成 空白地。 (2)如果当前蛇头位置的地图属性是“食物”——增加蛇身长度,统计玩家吃进的食物数量,增加分数,补充地图上的食物,记录(累加)当前吃进的物品,如果吃进的物品(curEatCount) 达到一定数量(EatCountPerShowPrize)就在地图上显示奖品。 (3)如果当前蛇头位置的地图属性是“炸弹“(陷阱)——统计玩家吃进的炸弹数量,扣分(如果分数小于0,就GameOver),补充地图上的炸弹,记录(累加)当前吃进的物品,如果吃进的物品达到一定数量就显示奖品。 (4)如果当前蛇头位置的地图属性是“奖品”——加分,重新累计 吃进的物品数(curEatCount = 0) 3.3 刷新蛇身坐标,更新 地图网格属性 以及画面 (1)在更新蛇身坐标之前,保存原来的 蛇尾坐标; (2)先在地图上 擦除旧的的蛇头,然后在地图上 绘画出新的蛇头; (3)修改变量值,标记蛇头新坐标下的地图格属性为:蛇身; (4)要先更新 蛇身除了蛇头外其余部分的坐标; (5)之后才更新 蛇头的坐标; (6)判断是否需要 增加蛇身长度——如果要增加长度:旧蛇尾的坐标不变,蛇身长度 + 1; 否则(无需增加蛇身长度):如果蛇头的新坐标与旧蛇尾的坐标重合,就不用在旧蛇尾的坐标下 绘画空白地的图案(因为该网格属性已经是 蛇头,而不是空白地) (7)在地图上擦除旧蛇尾,绘画空白地; (8)在地图上把 旧蛇尾坐标 下的地图格的属性设置为 空白地; 《模块 Module1 代码》—— Option Explicit '全局 常量 Public Enum MAP_PROPERTY '地图属性 MAP_EMPTY = 0 '空白地 MAP_FOOD '食物 MAP_BOMB '炸弹,陷阱 MAP_PRIZE '加分奖品 MAP_SNAKE '蛇身 End Enum Public Const MAP_SCALE As Integer = 15 '地图放大倍数 '地图网格数(Index值,首值为0) Public Const MAX_COL_INDEX As Integer = 19 Public Const MAX_ROW_INDEX As Integer = 10 Public Const START_SNAKE_LENGTH As Integer = 8 '蛇身初始长度 Public Const SPEED_LV1 As Integer = 200 '第一级(最慢)的速度(Timer.Interval,最快第9级=40) Public Const SPEED_CHANGE As Integer = 20 '前后2个等级之间的 Interval差值(毫秒) '定义控制键 Public Const KEY_PAUSE As Integer = vbKeyNumpad5 Public Const KEY_UP As Integer = vbKeyNumpad8 Public Const KEY_DN As Integer = vbKeyNumpad2 Public Const KEY_LF As Integer = vbKeyNumpad4 Public Const KEY_RT As Integer = vbKeyNumpad6 Public Const KEY_LFUP As Integer = vbKeyNumpad7 Public Const KEY_LFDN As Integer = vbKeyNumpad1 Public Const KEY_RTUP As Integer = vbKeyNumpad9 Public Const KEY_RTDN As Integer = vbKeyNumpad3 '定义填充色 Public Const HEAD_COLOR As Long = &H80FF '蛇头颜色 Public Const BODY_COLOR As Long = vbGreen '蛇身颜色 Public Const EMPTY_COLOR As Long = &HE0E0E0 '空白地颜色 Public Const FOOD_COLOR As Long = vbBlue '食物颜色 Public Const BOMB_COLOR As Long = vbRed '炸弹颜色 Public Const FULL_COLOR As Long = 255 ^ 3 Public Const RECORD_FILE_NAME As String = "\record.dat" '记录得分榜的 文件名 Public Const MAX_PRIZE As Integer = 50 '起始 奖励分数的 上限 Public Const MIN_PRIZE As Integer = 20 '起始 奖励分数的 下限 '全局 变量 '记录玩家的相关信息和设置值: Public Type thePlayerInfo Score As Integer '记录得分 HeadColor As Long '蛇头填充色 BodyColor As Long '蛇身填充色 Food As Integer '记录吃进的 食物数量 Bomb As Integer '记录吃进的 炸弹数量 blnGameOver As Boolean '标记该玩家是否已经game over ' SnakeColor As Long '绘画蛇身使用的填充色……暂时省略…… SnakeLength As Integer '蛇身长度 '蛇头移动方向(值为 -1,0,1) X_Way As Integer Y_Way As Integer '控制键(8个)……暂时省略(采用默认控制键) End Type '记录 玩家的得分和名字 Type theRecord Name As String * 15 Score As Integer End Type '用于表示二维坐标值 Public Type thePosition X As Integer Y As Integer End Type Public FoodCount_AtOneTime As Integer '地图上同时出现的 食物数量 Public BombCount_AtOneTime As Integer '地图上同时出现的 炸弹数量 Public PrizeRemain As Integer '当前剩余的 奖励分数 Public EatCountPerShowPrize '记录 蛇每吃进多少物品(包括食物和炸弹,奖品不计)才显示一次奖品 Public AddScorePerFood As Integer '每吃进一个 食物,所增加的分数 Public AddScorePerBomb As Integer '每吃进一个 炸弹,所扣掉的分数 Sub Main() frmPlay.Show frmScoreList.Show '第一次运行时先显示得分榜 End Sub
/
本文档为【编程高手之路—vb入门和游戏编写—VB 贪吃蛇 单人版游戏(一)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索