您现在的位置: 像素吧 >> 设计教程 >> Flash教程 >> 正文

面向对象法制作贪吃蛇小游戏

来源:网络 日期:2008-8-5 21:13:01 作者:ladeng66… 查看:
"面向对象法制作贪吃蛇小游戏"这篇Flash教程如果帮助了您,请记得分享给您身边的朋友,如果您有比"面向对象法制作贪吃蛇小游戏"更好的教程请发布共享,帮助别人快乐自己!
  这不能算是一个教程,只是我学习oop过程中的一个总结,有不对的地方,还请各位大侠多多指正!

http://www2.flash8.net/UploadTeach/200808/20080804171937484.swf


一、
面向过程的编程


如果你以前做过贪吃蛇,可以跳过这一节,直接看
oop的写法。

起初的想法是:在库里有3MC,分别是head(蛇头),body(蛇关节),wall(墙)。

游戏开始时:先载入一个head,然后有一个从1snakeLengthfor循环,载入snakeLengthbody,分别命名为body1body2…”body”+snakeLength,另外还要载入一圈围墙wallwall的个数要视舞台的长宽而定了。

游戏进行时:
head的移动通过单位改变它的坐标就可以了,这个单位也就是单位位移,即head的长宽,body的移动,可以设两个值,oldXoldY,来记录上一个位置的坐标,作为下一个body的目标坐标,也就是,head走一步,body1走到headold坐标,body2走到body1old坐标依此类推。蛇的移动,我们用setInterval来实现,因为我们可以用第二个参数来改变设的移动速度,也就可以做到level越高,速度越快,以增加游戏的难度。

这是一个很好的想法,可是在动手作的过程中,问题就暴露出来了。蛇头吃到墙和body应该是gameOver的,应该怎么实现呢?你可能会想到hitTest,好的,我们来设想一下,假设蛇头为长宽均为20个像素的正方形,舞台为400*400,那么一圈围墙将会有20+20+18+18=76wall,再有10body,那么蛇头没走一步,要进行这样的碰撞检测。首先是一个10次的循环hitTest”body”+i);然后是26次循环hitTest”wall”+i);这仅仅是只有一圈围墙的空白围墙,如果再加上一些障碍墙呢?那么很容易就能有100次以上的循环hitTest,对于现在的计算机来说,应该算不了什么,的是你怎么给他们命名呢?for循环”wall”+i?障碍物呢?障碍物的位置坐标怎么记录?另外还有一个很重要的东西,food,贪吃蛇嘛,肯定要有东西吃,检测碰撞后,我们要判断碰到的是什么,如果是food应该怎么加分,碰到wall后怎么gameOver?,游戏过关怎么更换地图?当想到这些问题的时候,你会发现,自己的代码写的乱七八糟,当你试着修改的时候,可能是牵一发而动全身。

面对这些问题,我们选择了面向对象的编程,即
OOP

二、
面向对象的编程

面向对象的编程就是将headbodymap写到单独的类文件里。我们在实例化这些类的时候,就产生了对象,Movieclip就是一个类,当我们新建一个mc的时候,就是新建了一个对象,它有自己的属性和方法闲话说多了,谈游戏。

第一步:我们不考虑怎么让
head走,而是想怎么生成一个地图,贪吃蛇是一个区块游戏,所以我们把地图方到外部的文件的二维数组里,方便维护和修改,根据数组来attach库里的tile,这个数组里不同的flag值,代表不同的东西,比如:0代表空,1代表head2代表body3代表food4代表wall。而库里的tile里,不同帧里有不同的东西,我们只要根据flag跳到相应的帧里就可以了,然后执行相关的加分,gameOver等操作,当蛇移动的时候,我们只需要修改目标坐标的flag值就可以了。
   
首先、新建地图,我们用一个
Map类来完成,它应该有这样的功能:
        1根据mymap数组新建地图,createMap(mymap);
        2建立地图的过程中,应该能根据flagtile跳到相应的帧,setObjflag);
        3当蛇吃到food后,能随机的生成下一个foodrandomFood();
   
然后、我们新建一个
Body类,他的功能如下:
        1跟这上自己的上一节(father),往前走,gofather);
   
最后、我们新建一个
Head类,他是Body的子类,功能大致如下:
        1自动的往前走,并返回下一目标位置的flag,以便游戏根据flag进行相应的操作,goNext();
        2根据键盘按下的key来设置速度stepsetStepkey);
   
到这里,我们需要的类都建好了,下一步,就是在
fla文件里,将他们连起来了。

第二步:

首先、我们新建一个
map类,用map类的createMap方法来新建一个地图。

然后、再新建一个蛇头
head,接着是一个body数组,用来存放蛇关节,数组的每个元素都是一个body类。

最后、我们就是用一个
setInterval,让蛇头和body不断的移动,然后,我们就开始游戏了。

附件: oop贪吃蛇.rar

进入论坛和作者讨论学习:http://space.flash8.net/bbs/thread-359546-1-1.html

  • 上一篇教程:

  • 下一篇教程:
  • 相关评论:

    发表评论

    • 昵 称:
    • 内 容:
    •  
    • 虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号!