论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash教程
Tag:flash cs,flash 8,鼠绘,as,手绘,工具,文字,loading,入门,初学,mc,影片剪辑,声音,mtv,游戏,引导,遮罩,菜单,补间,广告条,时钟,视频教程

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

文章类别:Flash | 发表日期:2008-9-21 15:10:56

  这不能算是一个教程,只是我学习oop过程中的一个总结,有不对的地方,还请各位大侠多多指正!

/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
视频教程列表
文章教程搜索
 
Flash推荐教程
Flash热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058