吃豆子游戏详解二
写完了吃豆子一之后,再写吃豆子二,感觉轻松多了。
第一部分:简单说明一下吃豆子游戏的玩法
现在我们把吃豆子游戏根据游戏试玩进行分解,以下分解的内容在程序代码中都会详细地写出来,所以我们可以根据游戏分解把代码也可以进行分解。以下中分解的步骤: 1(游戏开始之前有一个倒计时,而且有一段音乐,屏幕上还有准备两个字在闪烁 2(吃豆子吃,大嘴怪的嘴巴会张会闭,每吃掉一个豆子,玩家就会获得一定的积分,如果大嘴怪把屏幕上的所有的豆子吃掉后,就会自动进入下一关。
3(幽灵们被大嘴怪吃掉后如何自动找到自己的家,好象会找到最近的路,到自己的家后就会恢复到以前的样子,而且幽灵们好象会往大会嘴怪的方向去找大嘴怪似的,如果幽灵遇到大嘴怪,就会把大嘴怪吃掉。幽灵的眼睛会转动的。
4(因为吃豆子算是一个很老的游戏,所以它还有一个投币的程序,如果一个人玩,就投一个硬币,如果两个人玩,就投两个硬币,就像我们原来用游戏币玩游戏一样。 5.大嘴怪吃掉一颗红色的豆子,幽灵们就会变成深蓝色,这个时候,幽灵们不具有战斗力,大嘴怪反而会把幽灵吃掉了,幽灵吃掉后,就会只剩下两只眼情,它们会尽快找到自己的家,而且到家以后,它们就会恢复原来的样子。
游戏画面
图一 图二
此图是游戏中的幽灵、大嘴怪的画法,还有此图为吃豆子的游戏画面 游戏中出现的其它的物品,包括白豆子和红
豆子,这个图在vb代码中名称为pctTiles
如果你玩过吃豆子这个游戏,就会知道游戏中有许多白色的圆点(豆子),游戏中的墙是图片本身带的,也就是游戏代码并没有重新画墙,但是大嘴怪还是不能从墙上穿过去,因为游
戏代码虽然没有画墙,但是对大嘴怪的行走线路还是进行了一定的限制,大嘴怪可以上下左右走,他不像贪吃蛇那样只能前进不能后退,实际上贪吃蛇只要拐弯就可以往回走。以后我想写一个贪吃蛇代替大嘴怪玩吃豆子的游戏,不知道能不能写出代码来。我们这一节要简单一些,我们只研究从何从pctScreen图片控件上添加能被吃掉的白色的豆子。
上面的图再详细地说明一下,因为它在吃豆子这个游戏中很重要,这个图片的名称为pacpics.bmp,在vb代码中图片控件名称为pctTiles,这是图片控件的名称,它的picture的属性为一个图片名称为pacpics的图片。Pacpics是一个bmp图片,里面包含着游戏大嘴怪嘴巴一张一闭的动画,大嘴怪朝上下左右行走的四下个方向的模样,还有四个幽灵不同颜色的,幽灵的眼睛会上下左右转动的动画,图的左边为彩图,黑色背景,右边为黑白图,白色背景。所以说这个图很重要。
第二点:1 大嘴怪在游戏代码中的名称为pacman,
2 幽灵在vb代码中的名称为Ghost,
3 吃的白色的豆子在游戏中的代码为pill,
4 红色豆子在游戏中的代码为powerpills,
这一节不出现大嘴怪的代码和幽灵的代码,我们只说如何从pctScreen图片控件上添加白色的豆子。
第二部分:创建一个小游戏,从一个很复杂的吃豆子的代码中首先重新组成一个新的小游戏,是这个吃豆子的游戏的一部分,内容是从pctScreen图片控件上添加白色的豆子,只能在指定的地方添加,不是随便加的,代码也是从原来游戏的代码改编出来的,因为他可以单独运行的,就像一个新的游戏一样
下图是小游戏Form1窗体的画面
这是Form1窗体,为了和原游戏保持一致,它改名为:frmPacMan,,包含着二个pictureBox图片控件和一个按钮
frmPacMan窗体的尺寸要能够装下这二个图片控件和一个按钮按件,
为了和原来吃豆子游戏中的代码相同,所以这二个pictureBox的名称完全与原来吃豆子游戏中我名称一样分别为
1 pctScreen图片,AutoSize = True 属性中的picture为下图,图片名为LevelOld,注意在代码中图片名是不出现的,只出现的是pctScreen ,因为此图片在Form1中,又可称为 Form1.pctScreen.picture
pctScreen图片的图片属性如下图所示:
2 pctBack图片它的属性中的picture设为:
AutoSize=True,尺寸与图片相同
另外还有一个开始按钮,在代码中的名称为Command1,
在游戏中有白色的豆子,在游戏中的名称为pill,它的值设为-1,pill= -1只在游戏计分时有用,还有一种红色的豆子,在游戏中的名称为powerpill,它的值设为-2,powerpill= -2只在游戏计分时有用,墙在游戏中的名称为wall,在游戏中定义一组枚举量,名称为Enum Pac,也就是游戏中的pac枚举量,包括白色豆子、红色豆子、墙、和空白区,而大嘴怪和幽灵在另一组枚举量中,本次小游戏不出现大嘴怪和幽灵。枚举量和常量很像,他指出游戏中能出现哪些物品,好象一个统计表一样。
Wall = -1,指游戏中的墙,在strData(30)变量组中,格式为stDatar(i)=www……….ww……………..wwww,用…..来表示,0 Pac.Wall Then
If PacLevel(i, j - 1).Block <> Pac.Wall Then ju = ju Or 1: .JUp = True
If PacLevel(i, j + 1).Block <> Pac.Wall Then ju = ju Or 2: .JDown = True
If PacLevel(i - 1, j).Block <> Pac.Wall Then ju = ju Or 4: .Jleft = True
If PacLevel(i + 1, j).Block <> Pac.Wall Then ju = ju Or 8: .Jright = True
If ju < 5 Or ju = 8 Or ju = 12 Then
.Junction = False ' delete straights & dead ends
Else
.Junction = True
End If
End If
End With
Next
Next
' draw all the dots
RefreshLevel
End Sub
Sub RefreshLevel()
Dim i As Integer
Dim j As Integer
' draw all the dots and powerpills on the screen
For j = 1 To 29
For i = 1 To 26
With PacLevel(i, j)
If .Block = Pac.Pill Then ' draws a pill on the screen
BitBlt frmPacman.pctScreen.hDC, i * 16, j * 16, 16, 16, frmPacman.pctTiles.hDC, 0,
320 + 16, BitbltOps.SRCAND
BitBlt frmPacman.pctScreen.hDC, i * 16, j * 16, 16, 16, frmPacman.pctTiles.hDC, 0,
320, BitbltOps.SRCPAINT
End If
If .Block = Pac.PowerPill Then ' draws a powerpill on the screen
BitBlt frmPacman.pctScreen.hDC, i * 16, j * 16, 16, 16, frmPacman.pctTiles.hDC, 16,
320 + 16, BitbltOps.SRCAND
BitBlt frmPacman.pctScreen.hDC, i * 16, j * 16, 16, 16, frmPacman.pctTiles.hDC, 16,
320, BitbltOps.SRCPAINT
End If
End With
Next
Next
End Sub
第四部分,编写好代码后,运行游戏,画面为:
小结:本次小游戏可以更好地理解吃豆子原游戏的代码,希望这些代码反复练习,弄熟弄懂
为止。
本文档为【吃豆子游戏详解二】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。