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

这不能算是一个教程,只是我学习oop过程中的一个总结,有不对的地方,还请各位大侠多多指正!
 
[1b]
一、面向过程的编程[/1b]
如果你以前做过贪吃蛇,可以跳过这一节,直接看oop的写法。
起初的想法是:在库里有3个MC,分别是head(蛇头),body(蛇关节),wall(墙)。
游戏开始时:先载入一个head,然后有一个从1到snakeLength的for循环,载入snakeLength个body,分别命名为body1,body2…”body”+snakeLength,另外还要载入一圈围墙wall,wall的个数要视舞台的长宽而定了。
游戏进行时:head的移动通过单位改变它的坐标就可以了,这个单位也就是单位位移,即head的长宽,body的移动,可以设两个值,oldX,oldY,来记录上一个位置的坐标,作为下一个body的目标坐标,也就是,head走一步,body1走到head的old坐标,body2走到body1的old坐标…依此类推。蛇的移动,我们用setInterval来实现,因为我们可以用第二个参数来改变设的移动速度,也就可以做到level越高,速度越快,以增加游戏的难度。
这是一个很好的想法,可是在动手作的过程中,问题就暴露出来了。蛇头吃到墙和body应该是gameOver的,应该怎么实现呢?你可能会想到hitTest,好的,我们来设想一下,假设蛇头为长宽均为20个像素的正方形,舞台为400*400,那么一圈围墙将会有20+20+18+18=76个wall,再有10个body,那么蛇头没走一步,要进行这样的碰撞检测。首先是一个10次的循环hitTest(”body”+i);然后是26次循环hitTest(”wall”+i);这仅仅是只有一圈围墙的空白围墙,如果再加上一些障碍墙呢?那么很容易就能有100次以上的循环hitTest,对于现在的计算机来说,应该算不了什么,的是你怎么给他们命名呢?for循环”wall”+i?障碍物呢?障碍物的位置坐标怎么记录?另外还有一个很重要的东西,food,贪吃蛇嘛,肯定要有东西吃,检测碰撞后,我们要判断碰到的是什么,如果是food应该怎么加分,碰到wall后怎么gameOver?,游戏过关怎么更换地图?当想到这些问题的时候,你会发现,自己的代码写的乱七八糟,当你试着修改的时候,可能是牵一发而动全身。
面对这些问题,我们选择了面向对象的编程,即OOP。
[1b]
二、面向对象的编程
[/1b]
面向对象的编程就是将head,body,map写到单独的类文件里。我们在实例化这些类的时候,就产生了对象,Movieclip就是一个类,当我们新建一个mc的时候,就是新建了一个对象,它有自己的属性和方法…闲话说多了,谈游戏。
第一步:我们不考虑怎么让head走,而是想怎么生成一个地图,贪吃蛇是一个区块游戏,所以我们把地图方到外部的文件的二维数组里,方便维护和修改,根据数组来attach库里的tile,这个数组里不同的flag值,代表不同的东西,比如:0代表空,1代表head,2代表body,3代表food,4代表wall。而库里的tile里,不同帧里有不同的东西,我们只要根据flag跳到相应的帧里就可以了,然后执行相关的加分,gameOver等操作,当蛇移动的时候,我们只需要修改目标坐标的flag值就可以了。
   
首先、新建地图,我们用一个Map类来完成,它应该有这样的功能:
        1根据mymap数组新建地图,createMap(mymap);
        2建立地图的过程中,应该能根据flag是tile跳到相应的帧,setObj(flag);
        3当蛇吃到food后,能随机的生成下一个food,randomFood();
   
然后、我们新建一个Body类,他的功能如下:
        1跟这上自己的上一节(father),往前走,go(father);
   
最后、我们新建一个Head类,他是Body的子类,功能大致如下:
        1自动的往前走,并返回下一目标位置的flag,以便游戏根据flag进行相应的操作,goNext();
        2根据键盘按下的key来设置速度step,setStep(key);
   
到这里,我们需要的类都建好了,下一步,就是在fla文件里,将他们连起来了。
第二步:
首先、我们新建一个map类,用map类的createMap方法来新建一个地图。
然后、再新建一个蛇头head,接着是一个body数组,用来存放蛇关节,数组的每个元素都是一个body类。
最后、我们就是用一个setInterval,让蛇头和body不断的移动,然后,我们就开始游戏了。
附件:
[img]/uploads/allimg/080828/1507400.gif[/img]
 
[url=http://www2.flash8.net/UploadTeach/200808/20080804172448255.rar]oop贪吃蛇.rar[/url]
本文转自:http://www.5uflash.com/flashjiaocheng/Flashyingyongkaifa/4409.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值