0点看完春晚,表示太兴奋,睡不着。于是就想找点事情做嘛。于是顺手就打开了flash ide,想着,其实自己进入游戏行业的时候,根本就不是从简入深的做,一开始就做联机游戏demo了(虽然很失败)。貌似简单的贪食蛇啊,俄罗斯方块的都没做过。 还觉得自己可能连贪食蛇都写不出来呢(笑)
于是写着写着就写出来了 =。= ,写了半个小时就写完了。 于是果断加点注释,做个教程好了。
【鼠标点击一下网格,之后只要移动方向键吃食物就好啦。(可穿墙,自己碰到自己游戏失败)】
以下代码只要打开flash ide 创建一个as3 的fla文件,复制到第一帧上就能用啦。
[cc lang=”actionscript3″ nowrap=”false”]
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.geom.Point;
import flash.text.TextField;
var peace:int = 10;//区块大小(地图网格,蛇身,食物)
var player:Sprite; // 蛇头
var playerPoint:Array = []; // 蛇头坐标
var snake:Array = []; //蛇身数组
var direction:String; //初始化移动方向
var bg:Sprite; //背景网格
var timer:Timer = new Timer(100); //游戏render
var seed:Timer = new Timer(2000); //食物创建计时器
var square:Sprite; //食物,蛇 容器
var foods:int; //食物
var score:int; //分数
init();
function init():void //游戏初始化
{
bg=new Sprite();
square=new Sprite();
player=new Sprite();
direction=”right”;
score=0;
foods=0;
for (var i:int=0; i<30; i++) //绘制30*30的网格
{
for (var j:int=0; j<30; j++)
{
bg.graphics.lineStyle(1,0x000000);
bg.graphics.drawRect(i*peace,j*peace,peace,peace);
bg.graphics.endFill();
}
}
addChild(square);
addChild(bg);
player=makeBody(0x00ffff);//绘制蛇头
square.addChild(player);
snake[0] = player;
for (var len:int=0; len<1; len++)//创建初始蛇身
{
var body = makeBody();
square.addChild(body);
snake.push(body);
}
timer.start();
timer.addEventListener(TimerEvent.TIMER,onTimer);
seed.start();
seed.addEventListener(TimerEvent.TIMER,onSeed);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDown);
}
function gameOver():void //游戏结束
{
timer.stop();
timer.removeEventListener(TimerEvent.TIMER,onTimer);
seed.stop();
seed.removeEventListener(TimerEvent.TIMER,onSeed);
snake=[];
playerPoint=[];
removeChild(bg);
bg=null;
removeChild(square);
square=null;
var tf:TextField=new TextField();
tf.selectable=false;
tf.multiline=true;
tf.width=120;
tf.text="游戏结束~r得分:"+score+"r按空格键开始新游戏";
addChild(tf);
}
function makeFood():Sprite//创建食物
{
var food:Sprite=new Sprite();
food.graphics.beginFill(0xff0000);
food.graphics.drawRect(0,0,peace,peace);
food.graphics.endFill();
food.name = "food";
return food;
}
function makeBody(color:uint=0x000000):Sprite//创建蛇身
{
var body:Sprite=new Sprite();
body.graphics.beginFill(color);
body.graphics.drawRect(0,0,peace,peace);
body.graphics.endFill();
body.name = "body";
return body;
}
function onTimer(e:TimerEvent):void
{
for (var j:int=0; j
if (player.x > bg.width-peace)//边界判断
{
player.x = 0;
}else if (player.x<0)
{
player.x = bg.width-peace;
}
if (player.y > bg.height-peace)//边界判断
{
player.y = 0;
}else if (player.y<0)
{
player.y = bg.height-peace;
}
playerPoint.push(new Point(player.x,player.y));//将蛇头新坐标放进蛇头坐标数组
for (var i:int=1; i<=snake.length-1; i++)//蛇身跟着蛇头(延迟1步)移动
{
var loc:Point = playerPoint[playerPoint.length - i - 1] as Point;
if (loc==null)return;
snake[i].x = loc.x;
snake[i].y = loc.y;
}
}
function onSeed(e:TimerEvent):void//创建食物计时器
{
if (foods < 3)//当场景上的食物总数小于3,才创建新的食物
{
var food = makeFood();
food.x = Math.floor(Math.random() * 30) * peace;
food.y = Math.floor(Math.random() * 30) * peace;
square.addChild(food);
foods++;
}
}
function keyDown(e:KeyboardEvent):void//键盘按键监听
{
switch (e.keyCode)
{
case 37 :
direction=direction=="right"?"right":"left";
break;
case 38 :
direction=direction=="down"?"down":"up";
break;
case 39 :
direction=direction=="left"?"left":"right";
break;
case 40 :
direction=direction=="up"?"up":"down";
break;
case 32:
while(this.numChildren)
{
removeChild(this.getChildAt(0));
}
init();
break;
}
}
[/cc]