吃豆子游戏详解五_第1页
吃豆子游戏详解五_第2页
吃豆子游戏详解五_第3页
吃豆子游戏详解五_第4页
吃豆子游戏详解五_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、吃豆子游戏详解五游戏背景:冰淇淋大游行凯蒂拉着小车在冷饮店买了一小桶冰淇淋。回家的路上,一块石头把小车绊了一下,小车一晃,小桶倒了,冰淇淋一点一点地化了,流到地上,可凯蒂一点儿也不知道。几只小猫闻到了冰淇淋的香味,就跑来跟在小车的后面舔呀舔。一只大狗看见了,也跑过来,跟在小猫的后面舔呀舔。一个骑马的女孩对身边牵卷毛狗的男孩说:“多有趣的游行呀,我们也参加吧!”队伍越排越长,许多人都加入了队伍。一个手风琴手也加入了,还带着他那会跳舞的小猴子。手风琴手一边走,一边拉着欢快的曲子。凯蒂这时才发现,自己身后排了一长长的动物和人,她开心极了!大家都随着乐曲的节拍走起来,一二、一二.家门口到了。“啪嗒!”

2、最后一滴冰淇淋滴完了。大家都舍不得散开,就在一起开了一个盛大的联欢会,唱啊,跳啊,笑啊.这是多么难忘的一天,这是一次多么愉快的冰淇淋大游行啊!人物的排队顺序为:凯蒂,一小桶冰淇淋、 几只小猫、一只大狗、一个骑马的女孩、牵卷毛狗的男孩、又加入了一些人、一个手风琴手、会跳舞的小猴子太复杂了,到哪找这么多人物的图片呀 ,我就把四个幽灵排成一排就可以了吧!小游戏的名称为:幽灵排队先打开上一次写的吃豆子游戏详解四这个教程,在吃豆子游戏详解四中,主要讲用键盘的上下左右键来控制一个大嘴怪上下左右行走的游戏,这一次,当然又复杂一些,大嘴怪换成了幽灵,而且是四个“幽灵”排队一齐走。我一开始,按照吃豆子游戏详解四

3、中的代码改编,再加入了贪吃蛇的代码,其实,我觉得本来也不应该太难,因为,本身在吃豆子的游戏中是四个幽灵追着大嘴怪走,他们本来都会走的,所以说应当说排队走还是更简单的一些吧。在吃豆子的游戏中有一个变量组是Ghost(nLoop),nLoop分别为1、2、3、4,他也是一个变量,代表着四个幽灵的属性,里面包括着:Xpos,Ypos,即幽灵在图片控件pctScreen中的位置,直白的说,就象X、Y坐标一样,另外对于打头的一个幽灵来说,只有打头的幽灵是用键盘控制的,有一个方向的变量,即Direction,其他的幽灵只需跟着第一个幽灵走就可以了,无需方向变量。这就有些象贪吃蛇的代码那样,即第一个幽灵向前

4、(后、左右)走一步,他原来的位置给第二个幽灵用,再把第二个幽灵的旧坐标给第三个幽灵用,以些类推变量组Ghost(nLoop)对应的是一个类似于在图片控件中的位置的控件组Sprite(nLoop),在Sprite(nLoop)变量组中,表示旧位置的变量为OXpos ,OYpos、表示新位置的变量为NXpos、NYpos,另外这个幽灵我们是把他从pctTiles图片控件中提取出来放入到pctScreen图片控件中的,还需要有一组表示图片在pctTiles中的位置的变量,XSprite、YSprite,有这一组坐标我们才能从pctTiles这个图片控件是找到提取幽灵的位置,顺便说一下,提取的幽灵实际

5、上是一个长和宽都为32像素的一个小正方形,因为在pctTiles这个图片控件是,他右边还有一些表示幽灵形状的黑白图像,用他就可以把幽灵图片中幽灵轮廓线以外的黑色变为透明色,所以我们看的幽灵都不像是一个图片而可以是任意的形状。第二部分:游戏控件从上图可以看出,这些控件包括菜单在内和吃豆子游戏详解四完全一样,如果图省事的话,只需将代码改一下就可以了,原来的代码删除,换成新的代码就可以了控件为Form1窗体,将属性中的ScaleMode改为3-pixel,因为幽灵可是32,32像素,如果不是,幽灵就无法正常显示,Form1中包含三个图片控件,名称分别为:pctScreen、 pctBack和 pct

6、Tiles,pctBack宽度和幽灵的宽度一样,也为32像素。他把pctScreen图片中幽灵所在位置的背景图片复制到图片控件pctBack中,这样当幽灵离开这个位置时,又可以复制回去。要不然,幽灵每走一步,屏幕上就会多出一个幽灵来,最后会有许多幽灵在pctScreen上,因为贪吃蛇用的是Shape这个形状控件,所以他移动时不会在原来的位置上留下痕迹。这是我费了很长时间才得出来的结论。最后别忘了加一个时钟控件,属性不用改。pctScreen图片控件的picture属性为下图:pctTiles图片控件的picture属性为下图第三部分:游戏代码Form1窗体代码:Private Sub exit

7、_Click()Timer1.Interval = 0End SubPrivate Sub Form_Load()Form1.ShowDoEventsYD(0) = -1YD(1) = 1XD(2) = -1XD(3) = 1OffDir(0) = -1OffDir(1) = 1OffDir(2) = -1OffDir(3) = 1End SubPrivate Sub start_Click()Timer1.Interval = 500DefaultPositionsEnd SubPrivate Sub Timer1_Timer()AIGhostMonstersHideSpritesShowS

8、pritesEnd Sub在工程中添加一个模块,名称为 Moduel1,代码为: Option ExplicitPublic Enum BitbltOps For bitblt function SRCCOPY = &HCC0020 Dest = Source SRCAND = &H8800C6 Dest = Dest AND Source SRCINVERT = &H660046 Dest = Dest XOR Source SRCPAINT = &HEE0086 Dest = Dest OR Source SRCERASE = &H4400328 Dest = (XOR Dest) AND

9、 Source WHITENESS = &HFF0062 Dest = vbWhite BLACKNESS = &H42 Dest = vbBlackEnd EnumPublic Type UDTGhost Xpos As Integer x position of the ghost Ypos As Integer y position of the ghost Offset As Integer y offset until the next square to be flush with it Direction As IntegerEnd TypePublic Type UDISpri

10、tes OXpos As Integer OYpos As Integer NXpos As Integer NYpos As Integer XSprite As Integer YSprite As Integer End Type Public Ghost(1 To 4) As UDTGhostPublic Sprite(4) As UDISpritesPublic XD(3) As IntegerPublic YD(3) As IntegerPublic OffDir(3) As Integer declare some functions :)Declare Function Get

11、AsyncKeyState Lib user32 (ByVal vKey As Long) As IntegerDeclare Function sndPlaySound Lib winmm.dll Alias sndPlaySoundA (ByVal lpszSoundName As String, ByVal uFlags As Long) As LongDeclare Function BitBlt Lib gdi32 (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal

12、 nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As LongSub ShowBlit(ByVal X As Integer, ByVal Y As Integer, _ ByVal XP As Integer, ByVal YP As Integer, ByVal pos As Integer)Dim maskOffset As IntegerWith Form1 BitBlt .pctBack.hDC, 0, pos * 32, 32,

13、32, .pctScreen.hDC, X, Y, BitbltOps.SRCCOPY BitBlt .pctScreen.hDC, X, Y, 32, 32, .pctTiles.hDC, 192, YP, BitbltOps.SRCAND BitBlt .pctScreen.hDC, X, Y, 32, 32, .pctTiles.hDC, XP, YP, BitbltOps.SRCPAINT End WithEnd SubSub HideBlit(X As Integer, Y As Integer, pos As Integer)With Form1 BitBlt .pctScreen

14、.hDC, X, Y, 32, 32, .pctBack.hDC, 0, pos * 32, BitbltOps.SRCCOPY End With End SubSub DefaultPositions() With Ghost(1) outside the starting box .Xpos = 192 .Ypos = 184 .Direction = 2 ShowBlit .Xpos - 16, .Ypos - 16, 0, .Direction * 32, 1 End With With Ghost(2) inside starting box on the left .Xpos =

15、224 .Ypos = 184 .Direction = 2 ShowBlit .Xpos - 16, .Ypos - 16, 32, .Direction * 32, 2 End With With Ghost(3) inside middle .Xpos = 258 .Ypos = 184 .Direction = 2 ShowBlit .Xpos - 16, .Ypos - 16, 64, .Direction * 32, 3 End With With Ghost(4) inside right .Xpos = 288 .Ypos = 184 .Direction = 2 ShowBl

16、it .Xpos - 16, .Ypos - 16, 96, .Direction * 32, 4 End With Form1.pctScreen.RefreshEnd SubSub HideSprites()Dim nLoop As Integer For nLoop = 4 To 1 Step -1 With Sprite(nLoop) HideBlit .OXpos, .OYpos, nLoop End With Next End SubSub ShowSprites() Dim nLoop As Integer For nLoop = 1 To 4 With Sprite(nLoop

17、) ShowBlit .NXpos, .NYpos, .XSprite, .YSprite, nLoop End With Next End Sub在工程中再添加一个模块,名称为 Moduel2,代码为: Option ExplicitSub AIGhostMonsters()Dim nLoop As IntegerDim tempx As IntegerDim tempy As IntegerFor nLoop = 1 To 4With Ghost(nLoop) Sprite(nLoop).OXpos = .Xpos - 16 Sprite(nLoop).OYpos = .Ypos - 16

18、 End With Next nLoop With Ghost(1) Up If GetAsyncKeyState(vbKeyUp) And .Offset = 0 Then .Direction = 0 End If Down If GetAsyncKeyState(vbKeyDown) And .Offset = 0 Then .Direction = 1 End If Left If GetAsyncKeyState(vbKeyLeft) And .Offset = 0 Then .Direction = 2 End If Right If GetAsyncKeyState(vbKeyRight) And .Offset = 0 Then .Directi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论