3000多学生课间操玩真人版贪吃蛇,这样的活动有什么作用和意义?

游戏攻略07

3000多学生课间操玩真人版贪吃蛇,这样的活动有什么作用和意义?,第1张

3000多学生课间操玩真人版贪吃蛇,这样的活动有什么作用和意义?
导读:我觉得让学生们进行这样的活动,意义主要有以下几个。第一,放松学生们的心情。现在学生们的压力实际上是非常大的,他们每天呢除了学习就是学习,睁开眼睛的第1件事情就是去上学,然后呢一直到很晚才能够睡觉,所以呢,现在学生的压力是非常大的,但是呢,学

我觉得让学生们进行这样的活动,意义主要有以下几个。

第一,放松学生们的心情。

现在学生们的压力实际上是非常大的,他们每天呢除了学习就是学习,睁开眼睛的第1件事情就是去上学,然后呢一直到很晚才能够睡觉,所以呢,现在学生的压力是非常大的,但是呢,学生有一个课间操就是为了让学生放松的。

但是由于学校里面的在课间通组织上面并不是很好,仅仅只是让学生们自由活动,或者让学生们跳一个广播体操,但这种方式往往不能够让学生们真正放松,只有在进行团队活动的时候才能够真正起到放松身心的作用,所以呢,这样的活动能够放松学生的心情,减轻学生的压力。

第二,可以增强班级凝聚力。

很多时候呢一个人他往往是历代世博的,但是如果每一个个人的组成一个团体,那么这个团体的力量是非常大的。但是那么多人在一个团体中,它往往是会有矛盾的或者往往有一些不好的东西,如果让这个团体能凝聚成一股绳,然后呢,去做同样的事情。

久而久之这样的话班级凝聚力会变强很多,班主任呢在考虑如何增加自己班级的凝聚力的时候,都会非常头疼,我觉得这是一个非常好的办法,就是让他们参加这样的活动,在活动中培养班级凝聚力,培养集体荣誉。

第三,增强学生们的娱乐能力。

现在学校呢,只顾培养孩子的计算能力,背诵能力等等一系列跟知识有关的能力,但是培养孩子的娱乐能力也是非常重要的,如果一个学生除了学习或者工作之外,什么事儿都不会往往他这个人是非常孤独和无聊的,他的社交能力是存在问题的,所以呢,参加这样的活动能够增强学生们的娱乐能力。

在网络上有这样一则比较有意思的视频,受到了大家的热议和好评。视频当中有3000多名学生玩真人版贪吃蛇的游戏,非常的壮观。当然也有很多网友说,学生组织如此大,消耗人力和精力的游戏,会影响到孩子们的学习。不过让人欣慰的是,也有很多网友和我一样,对这样的游戏非常的赞同,觉得很有意义。那么这个活动对学生有哪些影响呢?

 

释放压力

现在的学生虽然没有繁重的课后作业,但是面临的学习压力却比10多年前高出很多。在如此的重压之下,以至于很多学生出现了一些极端的行为。所以适当的释放学习压力对于学生来说非常的有必要,这种贪吃蛇的游戏需要几千名学生共同的加入。能体会到游戏的乐趣,又能锻炼身体,最重要的是更好的释放学习压力。学生感受到乐趣的同时,也更愿意将精力投入到学习中来,所以对学习是一种促进的作用。

 

锻炼身体

大家从视频中可以看到有3000多名的学生共同完成了贪吃蛇真人游戏,场面非常的壮观,尤其是排在前面的学生需要不停的奔跑,同时还要按照预定的轨迹进行来回的穿梭,会消耗掉很大的体力,对于学生来说是一种锻炼和考验。通过这个游戏,相信很多学生一定会体力不支,但是他们都坚强的完成了说明让大家感受到了体育锻炼是非常重要的事情。也给所有的师生带来了启示的作用,在注重学习的同时,还要多锻炼学生们的身体素质,增强抵抗力,不易生病,这样才能更好的和更多的精力投入到学习中来。

 

培养孩子团结的精神

贪吃蛇游戏需要很多人共同来完成,从视频当中应该能看出来,只要有1~2个人出现了差错,最终都会导致贪吃蛇游戏失败,这就要考虑到孩子们之间的互相配合。当然这种配合并不是一天和两天能锻炼完成的,在这个游戏当中能使得学生们体会到学生和学生之间需要团结合作,这样才能干成大事。让学生之间的情谊更深厚。共同品尝胜利的果实。无论是在以后学习还是在人生的成长过程当中,这一次的游戏都会给他们带来深远的教育意义,在面对挫折和困难的时候,只要想到这一件事情一定会振奋精神,迎难而上,发挥刻苦的钻研精神。

(一)开始新游戏

11 获取并应用各个参数(当前级别,控制键等),初始化随机数(Randomize)。

12 清除地图上的所有物品,各个统计数值置零。

13 初始化地图:布置食物,炸弹,蛇身位置以及蛇头的移动方向——在PictureBox上绘画图像 并修改对应的地图格属性值(MapProperty()数组)。

14 启动Timer定时器,游戏开始。

(二)游戏操作

21 暂停\恢复——

修改表示游戏状态的Boolean型变量值;

显示\隐藏 表示游戏状态的Label;

暂停\恢复 Timer定时器。

22 控制方向(根据Nokia贪吃蛇的操作方式)——

由于蛇头只能朝上下左右4个方向移动,但是方向键有8个,所以“斜线方向”的控制键和水平,垂直方向的控制键编码上有点不同

221 斜线方向键(以“右上”方向键为例)——

如果当前蛇头朝着左边(水平方向)运动,则将水平方向的分量变为0,再将垂直方向的分量变为-1(向上运动);

如果当前蛇头朝着上方(垂直方向)运动,则将垂直方向的分量变为0,再将水平方向的分量变为 1(向右运动)。

其余“左上,左下,右下”的方向键编码与上述雷同。

222“水平,垂直”方向键——

当蛇以 水平 方向移动时,“左”和“右”的按键无效;(即不处理按键事件)

当蛇以 垂直 方向移动时,“上”和“下”的按键无效。

(三)移动蛇身

31 根据运动方向,找出蛇头的新坐标;

32 判断蛇头新坐标下的 地图属性——

(1)如果蛇头的新坐标 和当前 蛇尾 的坐标重合,那不算GameOver--因为随着蛇头的移动,蛇身各个节点都会向前跟进,使得当前 蛇尾 坐标下的网格在移动之后会变成 空白地。

(2)如果当前蛇头位置的地图属性是“食物”——增加蛇身长度,统计玩家吃进的食物数量,增加分数,补充地图上的食物,记录(累加)当前吃进的物品,如果吃进的物品(curEatCount) 达到一定数量(EatCountPerShowPrize)就在地图上显示奖品。

(3)如果当前蛇头位置的地图属性是“炸弹“(陷阱)——统计玩家吃进的炸弹数量,扣分(如果分数小于0,就GameOver),补充地图上的炸弹,记录(累加)当前吃进的物品,如果吃进的物品达到一定数量就显示奖品。

(4)如果当前蛇头位置的地图属性是“奖品”——加分,重新累计 吃进的物品数(curEatCount = 0)

33 刷新蛇身坐标,更新 地图网格属性 以及画面

(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 '第一级(最慢)的速度(TimerInterval,最快第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 = "\recorddat" '记录得分榜的 文件名

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()

frmPlayShow

frmScoreListShow '第一次运行时先显示得分榜

End Sub

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) '如果游戏正在进行,则发送“暂停”按键事件,暂停游戏

frmHelpShow

End Sub

'开始新游戏

Private Sub cmdNewGame_Click()

Dim i As Integer

Randomize '重新生成随机数列

blnStartGame = Not blnStartGame

If blnStartGame Then

cmdNewGameCaption = "停止"

Else

cmdNewGameCaption = "新游戏"

End If

'中止游戏

If blnStartGame = False Then

'如果上一次的奖品还没有消失(以 PrizeRemain > 0 为标志),就先清除旧的奖品,然后才显示新的奖品

If PrizeRemain > 0 Then Call ShowPrize(False)

picDisplayCls

P1Score = 0 '玩家的初始分数

P1Food = 0

P1Bomb = 0

curEatCount = 0

PrizeRemain = 0

blnPause = False

lblPauseVisible = False

lblScoreCaption = P1Score

lblFoodCountCaption = P1Food

lblBombCountCaption = P1Bomb

P1blnGameOver = True

HscrLevelEnabled = True

tmrMoveEnabled = False

Exit Sub

End If

blnThroughWall = True '穿墙模式

blnOnKeyEvents = True

'暂时使用默认填充色

Map_Bomb_Color = BOMB_COLOR

Map_Empty_Color = EMPTY_COLOR

Map_Food_Color = FOOD_COLOR

P1BodyColor = BODY_COLOR

P1HeadColor = 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

picDisplayCls

picDisplayWidth = Map_Width + 2

picDisplayHeight = Map_Height + 2

picDisplayLine (0, 0)-Step(Map_Width, Map_Height), Map_Empty_Color, BF

FoodCount_AtOneTime = 2 '地图上同时存在的 食物数量

BombCount_AtOneTime = 1 '地图上同时存在的 炸弹数量

EatCountPerShowPrize = 5 '设置 蛇每吃进多少物品(包括食物和炸弹,奖品不计)才显示一次奖品

curLevel = HscrLevelValue

AddScorePerFood = curLevel '每吃进一个 食物,所增加的分数=当前的级别值

AddScorePerBomb = -curLevel 2 '每吃进一个 炸弹,所扣掉的分数

P1Score = Abs(AddScorePerBomb) + 1 '玩家的初始分数='每吃进一个 炸弹,所扣掉的分数+1

P1Food = 0

P1Bomb = 0

PrizeRemain = 0

P1blnGameOver = False

lblScoreCaption = P1Score

lblFoodCountCaption = P1Food

lblBombCountCaption = P1Bomb

'初始化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

'初始化移动方向

P1X_Way = -1

P1Y_Way = 0

MapProperty(Snake_P1(i)X, Snake_P1(i)Y) = MAP_SNAKE

picDisplayLine (Snake_P1(i)X MAP_SCALE, Snake_P1(i)Y MAP_SCALE)-Step(MAP_SCALE, MAP_SCALE), BODY_COLOR, BF

Next

'使用蛇头颜色 重新绘画蛇头

picDisplayLine (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

lblPauseVisible = False

lblScoreCaption = P1Score

lblFoodCountCaption = P1Food

lblBombCountCaption = P1Bomb

P1blnGameOver = False

HscrLevelEnabled = False '游戏进行期间不能改变级别

tmrMoveEnabled = True

End Sub

'显示得分榜

Private Sub cmdShowScoreList_Click()

If blnPause = False Then Call Form_KeyDown(KEY_PAUSE, 0) '如果游戏正在进行,则发送“暂停”按键事件,暂停游戏

frmScoreListShow

End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If P1blnGameOver Or blnStartGame = False Or blnOnKeyEvents = False Then Exit Sub '以下情况(游戏结束、游戏还没有开始、禁用击键事件)不接收按键操作。

'按“Numpad 5”键--暂停/继续

If KeyCode = KEY_PAUSE Then

blnPause = Not blnPause

lblPauseVisible = blnPause

tmrMoveEnabled = Not blnPause

Exit Sub

End If

If blnPause Then Exit Sub '在暂停状态下不接受“ESC”外的其它按键

Select Case KeyCode

Case KEY_LFUP

blnOnKeyEvents = False

If P1X_Way <> 0 Then

P1X_Way = 0

P1Y_Way = -1

ElseIf P1Y_Way <> 0 Then

P1X_Way = -1

P1Y_Way = 0

End If

Case KEY_LFDN

blnOnKeyEvents = False

If P1X_Way <> 0 Then

P1X_Way = 0

P1Y_Way = 1

ElseIf P1Y_Way <> 0 Then

P1X_Way = -1

P1Y_Way = 0

End If

Case KEY_RTUP

blnOnKeyEvents = False

If P1X_Way <> 0 Then

P1X_Way = 0

P1Y_Way = -1

ElseIf P1Y_Way <> 0 Then

P1X_Way = 1

P1Y_Way = 0

End If

Case KEY_RTDN

blnOnKeyEvents = False

If P1X_Way <> 0 Then

P1X_Way = 0

P1Y_Way = 1

ElseIf P1Y_Way <> 0 Then

P1X_Way = 1

P1Y_Way = 0

End If

'当蛇以 水平 方向移动时,LF 和 RT 按键无效

Case KEY_LF

blnOnKeyEvents = False

If P1X_Way = 0 Then

P1X_Way = -1

P1Y_Way = 0

End If

Case KEY_RT

blnOnKeyEvents = False

If P1X_Way = 0 Then

P1X_Way = 1

P1Y_Way = 0

End If

'当蛇以 垂直 方向移动时,UP 和 DN 按键无效

Case KEY_UP

blnOnKeyEvents = False

If P1Y_Way = 0 Then

P1X_Way = 0

P1Y_Way = -1

End If

Case KEY_DN

blnOnKeyEvents = False

If P1Y_Way = 0 Then

P1X_Way = 0

P1Y_Way = 1

End If

Case Else

Exit Sub

End Select

tmrMoveEnabled = False '暂停Timer事件,等到本次移动操作全部完成后(即sub RefreshSnake()过程执行完毕),再启动Timer

Call PlayerMove

End Sub

在山西省忻州市高中年级的展览创意课间操已经成为流行,吸引了很多网友的关注,很多网友在其他高中甚至有这样的放松休息的活动,是别人的学校啊。该活动是真实版的“贪吃蛇”,来自一、二年级的3000多名学生参与了这一壮观的活动。大多数人都会不可避免地联想到自己的高中时代,也会不可避免地羡慕“别人的高中”。你的学生生活中最困难的部分是什么对于这个问题的答案,我相信大多数人都同意。小学是无忧无虑的,初中是充满活力的,高中需要面对高考的压力,上课时间紧张,学业任务变得更加繁重,有些活动变得遥不可及。

为什么别人的高中是丰富多彩的,而你自己的是无聊的。信很多人都会发出这样的酸涩的叹息,当时学校的时候除了上课就是做作业,再多一点时间就是“躺在课桌上休息”,根本就没想过有什么活动。我们每天都要参加一项活动,那就是班会活动,这大概是很多人每天最大的活动了,还有体育课,有多少人是那么期盼着,今天不下雨,其他老师不考啊等等之类的。

最值得期待的高中是,一年一次“节日”,也许在其他学校不是这个名字,但几乎所有有类似的活动,参与这是一个非常有意义的,可以放松心情,可以两到三天不上的人,“小长假”。该活动在互联网上成为热门搜索后,许多人仔细注意到,参与者中没有老年人。许多网友还留言开玩笑说:“高三学生连看都没机会看了。”虽然高中的学生很辛苦,但高一和高二的学生其实要快乐得多。中国有句古话,“时势未了,必须先苦干,再苦干。”

高中的努力只是暂时的,只有为了心中的“大学梦”,才能忍受孤独和无聊,获得最终的成功,尤其是对于即将参加2021年高考的学生来说。高考的倒计时就像一记“警钟”,每个人都应该牢记在心,时刻鞭长莫及。往往在高中的额时候班主任会给你们说很多话,但是这样的话都快让人听到“长茧的耳朵”,但真理永远是对的。调整心态,坚持复习,放松心情,检查间隙,吃好睡好,这些都是临近高考的考生应该注意的。最后,我祝愿高三的同学们有一匹成功的骏马和一个成功的头衔。

我玩过很多贪吃蛇类的游戏,但是我觉得最好玩儿的还是贪吃蛇大作战。

能把贪吃蛇从单机小游戏做到联网竞技游戏,真的很不容易。

而且里面而且里面的规则有很大创新,以往贪吃蛇都是把固定的食物放在那里操作贪吃蛇去吃,贪吃蛇如果蛇头撞到自己的蛇身,要么游戏结束,要不然就会变短一段。

而贪吃蛇大作战,完全没有这种顾虑,蛇头前进的过程中那些星星点点就自动会靠过来,而且主要是靠围杀敌人来增加自己的长度,这样玩起来更容易更有趣味性。

而且以前的贪吃蛇都很呆板,身体都是横行竖列的,贪吃蛇大作战就不一样了,贪吃蛇大作战操作起来很灵活虽然并不怎么像真的蛇,但它绝对像一条活的虫子。它里面有很多种皮肤可以选择,可以变得更漂亮。

玩儿贪吃蛇大作战绝对能看出游戏开发者是在用心做游戏。处处都能看到创新。希望其他的游戏开发者要学习这种精神。不要过分的去参照别人的作品。要从根本上去创新。这样的作品才会受到人们欢迎。

需用VB实现,代码如下

'定义蛇的运动速度枚举值

Private Enum tpsSpeed

QUICKLY = 0

SLOWLY = 1

End Enum

'定义蛇的运动方向枚举值

Private Enum tpsDirection

D_UP = 38

D_DOWN = 40

D_LEFT = 37

D_RIGHT = 39

End Enum

'定义运动区域4个禁区的枚举值

Private Enum tpsForbiddenZone

FZ_TOP = 30

FZ_BOTTOM = 5330

FZ_LEFT = 30

FZ_RIGHT = 5730

End Enum

'定义蛇头及身体初始化数枚举值

Private Enum tpsSnake

SNAKEONE = 1

SNAKETWO = 2

SNAKETHREE = 3

SNAKEFOUR = 4

End Enum

'定义蛇宽度的常量

Private Const SNAKEWIDTH As Integer = 100

'该过程用于显示游戏信息

Private Sub Form_Load()

MeShow

MelblTitle = "BS贪食蛇 — (版本 " & AppMajor & "" & AppMinor & "" & AppRevision & ")"

MeCaption = MelblTitleCaption

frmSplashShow 1

End Sub

'该过程用于使窗体恢复原始大小

Private Sub Form_Resize()

If MeWindowState <> 1 Then

MeCaption = ""

MeHeight = 6405 '窗体高度为 6405 缇

MeWidth = 8535 '窗体宽度为 8535 缇

MeLeft = (ScreenWidth - Width) \ 2

MeTop = (ScreenHeight - Height) \ 2

End If

End Sub

'该过程用于重新开始开始游戏

Private Sub cmdGameStart_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Beep

msg = MsgBox("您确认要重新开始游戏吗?", 4 + 32, "BS贪食蛇")

If msg = 6 Then Call m_subGameInitialize

End Sub

'该过程用于暂停/运行游戏

Private Sub chkPause_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If MechkPauseCaption = "暂停游戏(&P)" Then

MetmrSnakeMoveEnabled = False

MetmrGameTimeEnabled = False

MepicMoveAreaEnabled = False

MelblPauseLabVisible = True

MechkPauseCaption = "继续游戏(&R)"

Else

MetmrSnakeMoveEnabled = True

MetmrGameTimeEnabled = True

MepicMoveAreaEnabled = True

MelblPauseLabVisible = False

MechkPauseCaption = "暂停游戏(&P)"

End If

End Sub

'该过程用于显示游戏规则

Private Sub cmdGameRules_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Beep

MsgBox " BS贪食蛇:一个规则最简单的趣味游戏,您将用键盘" & Chr(13) & _

"上的4个方向键来控制蛇的运动方向。在运动过程中蛇" & Chr(13) & _

"不能后退,蛇的头部也不能接触到运动区域的边线以外" & Chr(13) & _

"和蛇自己的身体,否则就游戏失败。在吃掉随机出现的" & Chr(13) & _

"果子后,蛇的身体会变长,越长难度越大。祝您好运!!", 0 + 64, "游戏规则"

End Sub

'该过程用于显示游戏开发信息

Private Sub cmdAbout_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Beep

MsgBox "BS贪食蛇" & "(V-" & AppMajor & "" & AppMinor & "版本)" & Chr(13) & Chr(13) & _

"" & Chr(13) & Chr(13) & _

"由PigheadPrince设计制作" & Chr(13) & _

"CopyRight(C)2002,BestSoftTCG", 0, "关于本游戏"

End Sub

'该过程用于退出游戏

Private Sub cmdExit_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Beep

msg = MsgBox("您要退出本游戏吗?", 4 + 32, "BS贪食蛇")

Select Case msg

Case 6

End

Case 7

MechkWindowButton(2)Value = 0

Exit Sub

End Select

End Sub

'该过程用于拖动窗体_(点击图标)

Private Sub imgWindowTop_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

ReleaseCapture

SendMessage Mehwnd, WM_SYSCOMMAND, SC_MOVE, 0

End Sub

'该共用过程用于处理窗体控制按钮组的相关操作_(锁定、最小化、退出)

Private Sub chkWindowButton_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button <> 1 Then Exit Sub

Select Case Index

Case 0 '锁定窗体

If MechkWindowButton(0)Value = 1 Then

MeimgWindowTopBorderStyle = 0

MeimgWindowTopEnabled = False

Else

MeimgWindowTopBorderStyle = 1

MeimgWindowTopEnabled = True

End If

Case 1 '最小化

MeWindowState = 1

MechkWindowButton(1)Value = 0

MeCaption = "BS贪食蛇 — (V-" & AppMajor & "" & AppMinor & "版本)"

Case 2 '退出

Beep

msg = MsgBox("您要退出本游戏吗?", 4 + 32, "BS贪食蛇")

Select Case msg

Case 6

End

Case 7

MechkWindowButton(2)Value = 0

Exit Sub

End Select

End Select

End Sub

'该过程用于设置蛇运动速度的快慢

Private Sub hsbGameSpeed_Change()

MetmrSnakeMoveInterval = MehsbGameSpeedValue

End Sub

'该过程用于通过键盘的方向键改变蛇的运动方向

Private Sub picMoveArea_KeyDown(KeyCode As Integer, Shift As Integer)

Select Case g_intDirection

Case D_UP

If KeyCode = D_DOWN Then Exit Sub

Case D_DOWN

If KeyCode = D_UP Then Exit Sub

Case D_LEFT

If KeyCode = D_RIGHT Then Exit Sub

Case D_RIGHT

If KeyCode = D_LEFT Then Exit Sub

End Select

g_intDirection = KeyCode

End Sub

'该计时循环过程用于计算游戏耗费的秒数并显示

Private Sub tmrGameTime_Timer()

g_lngGameTime = g_lngGameTime + 1

MelblGameTimeCaption = g_lngGameTime & "秒"

End Sub

'该计时循环过程用于控制蛇的行动轨迹

Private Sub tmrSnakeMove_Timer()

Dim lngSnakeX As Long, lngSnakeY As Long, lngSnakeColor As Long

Dim lngPointX As Long, lngPointY As Long, lngPointColor As Long

Randomize

MepicMoveAreaSetFocus

MepicMoveAreaCls

'确认蛇头的运动方向并获取新的位置

Select Case g_intDirection

Case D_UP '向上运动

g_udtSnake(SNAKEONE)Snake_CurX = g_udtSnake(SNAKEONE)Snake_OldX

g_udtSnake(SNAKEONE)Snake_CurY = g_udtSnake(SNAKEONE)Snake_OldY

g_udtSnake(SNAKEONE)Snake_CurY = g_udtSnake(SNAKEONE)Snake_CurY - SNAKEWIDTH

Case D_DOWN '向下运动

g_udtSnake(SNAKEONE)Snake_CurX = g_udtSnake(SNAKEONE)Snake_OldX

g_udtSnake(SNAKEONE)Snake_CurY = g_udtSnake(SNAKEONE)Snake_OldY

g_udtSnake(SNAKEONE)Snake_CurY = g_udtSnake(SNAKEONE)Snake_CurY + SNAKEWIDTH

Case D_LEFT '向左运动

g_udtSnake(SNAKEONE)Snake_CurX = g_udtSnake(SNAKEONE)Snake_OldX

g_udtSnake(SNAKEONE)Snake_CurX = g_udtSnake(SNAKEONE)Snake_CurX - SNAKEWIDTH

g_udtSnake(SNAKEONE)Snake_CurY = g_udtSnake(SNAKEONE)Snake_OldY

Case D_RIGHT '向右运动

g_udtSnake(SNAKEONE)Snake_CurX = g_udtSnake(SNAKEONE)Snake_OldX

g_udtSnake(SNAKEONE)Snake_CurX = g_udtSnake(SNAKEONE)Snake_CurX + SNAKEWIDTH

g_udtSnake(SNAKEONE)Snake_CurY = g_udtSnake(SNAKEONE)Snake_OldY

End Select

'根据新的位置绘制蛇头

lngSnakeX = g_udtSnake(SNAKEONE)Snake_CurX

lngSnakeY = g_udtSnake(SNAKEONE)Snake_CurY

lngSnakeColor = g_udtSnake(SNAKEONE)Snake_Color

MepicMoveAreaPSet (lngSnakeX, lngSnakeY), lngSnakeColor

'移动蛇身体其他部分的位置

For i = 2 To g_intSnakeLength

g_udtSnake(i)Snake_CurX = g_udtSnake(i - 1)Snake_OldX

g_udtSnake(i)Snake_CurY = g_udtSnake(i - 1)Snake_OldY

lngSnakeX = g_udtSnake(i)Snake_CurX

lngSnakeY = g_udtSnake(i)Snake_CurY

lngSnakeColor = g_udtSnake(i)Snake_Color

MepicMoveAreaPSet (lngSnakeX, lngSnakeY), lngSnakeColor

Next i

'更新蛇旧的坐标位置

For j = 1 To g_intSnakeLength

g_udtSnake(j)Snake_OldX = g_udtSnake(j)Snake_CurX

g_udtSnake(j)Snake_OldY = g_udtSnake(j)Snake_CurY

Next j

'判断蛇在移动中是否到了禁区而导致游戏失败

If m_funMoveForbiddenZone(g_udtSnake(SNAKEONE)Snake_CurX, g_udtSnake(SNAKEONE)Snake_CurY) Then

Beep

MsgBox "您的蛇移动到了禁区,游戏失败!", 0 + 16, "BS贪食蛇"

MetmrSnakeMoveEnabled = False

MetmrGameTimeEnabled = False

MepicMoveAreaVisible = False

Exit Sub

End If

'判断蛇在移动中是否碰到了自己的身体而导致游戏失败

If m_funTouchSnakeBody(g_udtSnake(SNAKEONE)Snake_CurX, g_udtSnake(SNAKEONE)Snake_CurY) Then

Beep

MsgBox "您的蛇在移动中碰到了自己的身体,游戏失败!", 0 + 16, "BS贪食蛇"

MetmrSnakeMoveEnabled = False

MetmrGameTimeEnabled = False

MepicMoveAreaVisible = False

Exit Sub

End If

'判断蛇是否吃到了果子

If m_funEatPoint(g_udtSnake(SNAKEONE)Snake_CurX, g_udtSnake(SNAKEONE)Snake_CurY) Then

'累加玩家的得分并刷新得分显示

g_intPlayerScore = g_intPlayerScore + 1

MelblYourScoreCaption = g_intPlayerScore & "分"

Call m_subAddSnake '加长蛇的身体

Call m_subGetPoint '获取下一个果子的位置和颜色

Else

'绘制果子

lngPointX = g_udtPointPoint_X

lngPointY = g_udtPointPoint_Y

lngPointColor = g_udtPointPoint_Color

MepicMoveAreaPSet (lngPointX, lngPointY), lngPointColor

End If

End Sub

'该私有子过程用于初始化游戏

Private Sub m_subGameInitialize()

Erase g_udtSnake '清空蛇的结构数组

g_intPlayerScore = 0 '清空玩家的得分

g_lngGameTime = 0 '清空游戏耗费的秒数

g_intDirection = D_DOWN '设定蛇的初始运动方向为下

g_intSnakeLength = 4 '设定蛇的初始长度

ReDim g_udtSnake(1 To g_intSnakeLength) '重新定义蛇的长度

'定义蛇头部的数据

With g_udtSnake(SNAKEONE)

Snake_OldX = 530

Snake_OldY = 530

Snake_Color = vbBlack

End With

'定义蛇身第2节的数据

With g_udtSnake(SNAKETWO)

Snake_OldX = 530

Snake_OldY = 430

Snake_Color = vbGreen

End With

'定义蛇身第3节的数据

With g_udtSnake(SNAKETHREE)

Snake_OldX = 530

Snake_OldY = 330

Snake_Color = vbYellow

End With

'定义蛇身第4节的数据

With g_udtSnake(SNAKEFOUR)

Snake_OldX = 530

Snake_OldY = 230

Snake_Color = vbRed

End With

MepicMoveAreaVisible = True

MelblYourScoreCaption = g_intPlayerScore & "分"

MelblGameTimeCaption = g_lngGameTime & "秒"

MetmrSnakeMoveInterval = MehsbGameSpeedValue

MetmrSnakeMoveEnabled = True

MetmrGameTimeEnabled = True

Call m_subGetPoint '获取第一个果子的位置和颜色

End Sub