点击这里给我发消息 点击这里给我发消息
首页 > 行业资讯 > flash>详细内容

游戏《贪食蛇》的制作

添加时间:2010-1-5
    相关阅读: 设计 程序 flash 制作
这是个纯脚本的贪食蛇,仅供交流学习
点击浏览该文件
源文件
点击浏览该文件
贪食蛇的设计
首先明确制订基本的规则
1。蛇头不能咬蛇身--蛇头不能和蛇身发生碰撞,包括不能突然反方向运动
2。蛇头不能碰障碍--撞上就gameover,包括不能走出游戏区域
3。蛇吃了食物会增加长度,食物吃掉一个才会产生新的
4。蛇只有上下左右四个行走方向
根据规则,很快得出基本的程序模块结构
1。初始化,场景、障碍和基本的蛇(初始长度,初始行走方向)
2。在场景中放置食物,吃完一个再出现下一个,吃一个食物蛇身增加一节,食物不能和障碍重合 3。蛇的运动,一节跟一节
4。行走中检测蛇头不能和障碍、蛇身碰撞,也不能超出游戏区域
5。键盘的监听,控制蛇的运动,及改变游戏状态 好了,按照这个思路,一步步把游戏给建起来吧 下面这个是根据这个思路用纯脚本编制的贪食蛇,仅供学习交流,copy到主场景第一帧就ok了。
var sl=3; //蛇起始节
var wallnum=20; //障碍数
var sp=10;
var fx=sp;
var fy=0;
var en=0;
var go=false; //蛇是否还能走的标志
var turn=0;
var gameover=false; //游戏结束,重新初始化标志
//================================画方块函数
drawbox=function(obj,w,h,mycolor){
with(obj){
lineStyle(1,0,100);
beginFill(mycolor,100);
moveTo(0,0);
lineTo(w,0);
lineTo(w,h);
lineTo(0,h);
lineTo(0,0);
endFill();
}
}
//=================================画圆函数
drawcircle=function(obj,r,mycolor){
var rr,radius;
with(obj){
lineStyle(0,0,0);
beginFill(mycolor,100);
moveTo(2*r,r);
for(rr=1;rr<=36;rr++){
radius=rr*10*Math.PI/180;
lineTo(r*Math.cos(radius)+r, r*Math.sin(radius)+r);
};
endFill();
}
}
//=============================================================生成背景mc
_root.createEmptyMovieClip("bg",1);
drawbox(bg,500,300,0x0099cc);
bg._x=25;bg._y=30;
//=============================================================初始化函数
beginclear=function(){
for(i=0;i<sl;i++) {this["sn"+i].removeMovieClip()}; //清除所有蛇的节
fx=sp;
fy=0;
en=0;
go=false;
//=================================产生随机的障碍物(实际的游戏制作中应该定义障碍,因为随机可能出现封闭的区域)
for(i=0;i<wallnum;i++){
_root.createEmptyMovieClip("wall"+i,10+i);
drawbox(this["wall"+i],20,20,0xcc3300);
this["wall"+i]._x=bg._x+20*random(25);this["wall"+i]._y=bg._y+20*(1+random(14));
}
//==================================产生初始的三节蛇
sl=3;
for(i=0;i<sl;i++){
_root.createEmptyMovieClip("sn"+i,100+i);
if(i>0){ rcolor=0xffff00} else {rcolor=0x99ffff};
drawcircle(this["sn"+i],4,rcolor);
this["sn"+i]._x=bg._x;this["sn"+i]._y=bg._y;
}
} beginclear(); //初始化场景
//================================================================蛇的运动及检测
onEnterFrame=function(){
if(go){ //是否还能动,能动就执行下面的
//--------------------
if(en==0){ //有没食物,没有就产生个食物
ex=bg._x+20*random(25);ey=bg._y+20*random(15);nowall=true;
for(i=0;i<wallnum;i++){ //判断随机产生的坐标上是否有障碍,没有才能放置食物
if(this["wall"+i].hitTest(ex+1,ey+1)) nowall=false;
}
if(nowall){
en=1;_root.createEmptyMovieClip("ee",1000); //放置食物,食物标志置1
drawcircle(ee,8,0x00ff00);drawbox(ee,4,4,0xff0000);ee._x=ex;ee._y=ey;
}
}
//--------------------蛇的移动,后一节跑前一节的位置上去,蛇头部向控制方向行走
for(j=sl-1;j>0;j--){
t=j-1;this["sn"+j]._x=this["sn"+t]._x;this["sn"+j]._y=this["sn"+t]._y;
}
sn0._x+=fx;sn0._y+=fy;
//--------------------如果食物被蛇头碰到,食物就消失,食物标志清0,蛇身加长
if(ee.hitTest(sn0)){
ee.removeMovieClip();en=0;
_root.createEmptyMovieClip("sn"+sl,100+sl);
drawcircle(this["sn"+sl],4,0xffff00);
t=sl-1;this["sn"+sl]._x=this["sn"+t]._x;this["sn"+sl]._y=this["sn"+t]._y;
sl++;
}
//--------------------检查蛇和障碍、蛇身是否碰撞,是否离开了背景区域,是就停止运动
for(i=0;i<wallnum;i++){
if(this["wall"+i].hitTest(sn0)) go=false;
}
for(i=2;i<sl;i++){
if(this["sn"+i].hitTest(sn0)) go=false;
}
if(! bg.hitTest(sn0)) go=false;
gameover=go?false:true;
}
}
//================================================================键盘控制
_root.onKeyDown=function(){
if(Key.getCode()==Key.UP){fx=0;fy=-sp};
if(Key.getCode()==Key.DOWN){fx=0;fy=sp};
if(Key.getCode()==Key.LEFT){fx=-sp;fy=0};
if(Key.getCode()==Key.RIGHT){fx=sp;fy=0};
if(Key.getCode()==Key.SPACE){ //空格控制行动、暂停和重新初始化开始
if(! go){
go=true;
if(gameover) {beginclear();gameover=false;}
}else{go=false;}
}
}
Key.addListener(_root); //监听键盘操作
_root.createTextField("helptxt",10000,80,350,400,30);
helptxt.text="空格键=开始、暂停、重新开始 方向键=控制上下左右四个方向";
本文作者:
咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册