语录提交--登陆--注册--论坛交流--站长博客

flash贪吃蛇游戏制作

[作者:来自网络][日期:2007-12-28][导航:Flash教程 >> Flash游戏编程 >> flash贪吃蛇游戏制作]
  

 

function gameStatus():Boolean {//游戏状态判断函数;

if (xn>18 || xn<0 || yn>11 || yn<0 || placeArry[xn][yn] == 1) {

delete this.onEnterFrame;

overFun(2);

return true;

}

if(placeArry[xn][yn] == 2){

foodFun();//重新生成食物;

lenNum++;//蛇身加长一节;

score_txt.text = scoreNum += 10;//加10分;显示得分;

addscoreFun();//吃到食物时闪出小星星的函数;

}

}

function arrayFun() {//给数组赋值;即记录蛇所在的位置的函数;

placeArry[xn][yn] = 1;

this["mc"+firstNum].xn = xn;

this["mc"+firstNum].yn = yn;

var tmpX = this["mc"+lastNum].xn;

var tmpY = this["mc"+lastNum].yn;

placeArry[tmpX][tmpY] = 0;

}

function countFun(cycle:Number) {//算出蛇头、蛇尾的序号的函数;

firstNum = (firstNum+1+cycle)%cycle;

secondlyNum = (firstNum-1+cycle)%cycle;

lastNum = (firstNum-lenNum+cycle)%cycle;

}

function foodFun(){//随机生成食物的函数;

do{

var xm = random(19);

var ym = random(12);

}while(placeArry[xm][ym] == 1 || placeArry[xm][ym] == 2);

attachMovie("food_mc","food_mc",cycleNum+10,{_x:n*xm,_y:n*ym});

food_mc.gotoAndStop(random(4)+2);

placeArry[xm][ym] = 2;

}

function addscoreFun() {//吃到食物时闪出小星星的函数;

sound_mc.gotoAndStop(random(7)+2);//吃到食物后的随机音效;

for (var i = 0; i<30; i++) {

var xnum = n*xn+random(10)-5;

var ynum = n*yn+random(10)-5;

mc = attachMovie("xin_mc", "mc"+i, i+500, {_x:xnum, _y:ynum});

mc.onEnterFrame = function() {

this.nx = 0;

this.ny = 0;

if(!this.ax){

this.ax = random(60)-30;

this.ay = random(60)-30;

}

if(random(20)>8){

this.nx = random(4)-2;

this.ny = random(4)-2;

}

this.ax *= .75;

this.ay *= .75;

this._x += this.ax+this.nx;

this._y += this.ay+this.ny;

this._alpha -= 7;

if (this._alpha<=0) {

delete this.onEnterFrame;

}

};

}

}

function overFun(n:Number){ //游戏结束或开始的初始函数;

var mc=attachMovie("over_mc","over_mc",getNextHighestDepth());

mc.gotoAndStop(n);

mc.score_txt.text = score_txt.text;

localObjFun(mc)//加载并显示积分榜;

mc.cego_mc._visible = false;

mc.kong_mc.setMask(mc.mask_mc);

var kongY = mc.kong_mc._y;

var kongH = mc.kong_mc._height+10;

var maskH = mc.mask_mc._height;

mc.kong_mc.onEnterFrame = function(){//积分榜过长时让它滚动;

if(mc.mask_mc.hitTest(_root._xmouse,_root._ymouse,false)){

if(kongH > maskH){

if(mc.mask_mc._ymouse > maskH/2){

if(mc.kong_mc._y >maskH-kongH+kongY){

mc.kong_mc._y += (maskH/2-mc.mask_mc._ymouse)*.2;

}else{

mc.kong_mc._y = maskH-kongH+kongY;

}

}else{

if(mc.kong_mc._y < kongY){

mc.kong_mc._y -= (mc.mask_mc._ymouse-maskH/2)*.2;

}else{

mc.kong_mc._y = kongY;

}

}

}

}

}

mc.start_btn.onPress = function(){

this._parent.removeMovieClip();

gameFun();//游戏开始;

}

mc.save_btn.onPress = function(){

mc.cego_mc._visible = true;

saveFun(mc);//保存积分;

localObjFun(mc)//刷新积分榜;

this.enabled = false;

}

mc.again_btn.onPress = function(){

var aa=this._parent._parent;

for(var i in aa){

aa[i].removeMovieClip();

}

initializeFun()//重新初始化所有变量;

this._parent.removeMovieClip();

gameFun();//游戏开始;

}

}

function initializeFun(){//重新初始化所有变量;

lenNum = 4;//蛇身长度

xn=4;//初始化蛇出现的位置;

yn=6;//初始化蛇出现的位置;

firstNum = 0;//蛇头的序号;

secondlyNum = 0;//蛇身的序号;

lastNum = 0;//蛇尾的序号;

reatNum = 3;//蛇速度初始值;

scoreNum = 0;//记录玩家得分;

fangxang = "right";//存储方向的变量;

moveX = 1;//向右移动;

moveY = 0;//上下没有移动;

placeArry = new Array();//记录蛇的每个节点位置的数组;

for(var i=0;i<19;i++){ placeArry[i]=[];}//声明为二维数组;

}

function localObjFun(mc:MovieClip){//显示玩家的成绩;即显示积分榜;

var localObj:SharedObject = SharedObject.getLocal("snakeGame", "/");

if(localObj.data.snakeGame){

var len = localObj.data.snakeGame.length;

var soArray:Array = localObj.data.snakeGame;

soArray.sortOn("score",18);//按score的大小排序;

for(var i=0;i<len;i++){

var new_mc = mc.kong_mc.attachMovie("积分","jifen_mc"+i,i,{_y:i*16})

new_mc.rank_txt.text = i+1;

new_mc.content_txt.text = soArray[i].score+"分 -"+soArray[i].username;

}

}else{

localObj.data.snakeGame = [];

localObj.flush();

}

}

function saveFun(mc:MovieClip){//保存玩家的成绩

var localObj:SharedObject = SharedObject.getLocal("snakeGame", "/");

var saveN = mc.name_txt.text;

var saveS = Number(mc.score_txt.text);

var saveObj:Object = {username:saveN,score:saveS};

var saveArray:Array = localObj.data.snakeGame;

saveArray.push(saveObj);

localObj.data.snakeGame = saveArray;

localObj.flush();

}

function pauseFun():Boolean{

delete this.onEnterFrame;

return true;

}

var fangxang:String = "right";//存储方向的变量;

var moveX:Number = 1;//向右移动

var moveY:Number = 0;//上下没有移动;

var keyListener:Object = {};//响应鼠标的对象;

Key.addListener(keyListener);

keyListener.onKeyDown = function() {

keyName = Key.getCode();

if (keyName == Key.DOWN) {

if(moveY==0)fangxang = "down";

} else if (keyName == Key.LEFT) {

if(moveX==0)fangxang = "left";

} else if (keyName == Key.UP) {

if(moveY==0)fangxang = "up";

} else if (keyName == Key.RIGHT) {

if(moveX==0)fangxang = "right";

}

if(keyName == 32){

if(un=!un){

pauseFun();

}else{

gameFun();

}

}

};

function keyResponseFun() {

if (moveX == 0) {

(fangxang == "left") ? (moveX=-1, moveY=0) : (moveX);

(fangxang == "right") ? (moveX=1, moveY=0) : (moveX);

}

if (moveY == 0) {

(fangxang == "up") ? (moveY=-1, moveX=0) : (moveY);

(fangxang == "down") ? (moveY=1, moveX=0) : (moveY);

}

}

var n:Number = 25;//移动频辐25个象素;

var xn:Number = 4;//初始值,定位蛇初始x位置;

var yn:Number = 6;//初始值,定位蛇初始y位置;

var lenNum:Number = 4;//初始值,定义蛇最初的长度;

var cycleNum:Number = 12*19;//循环周期值;

var firstNum:Number = 0;//蛇头的序号;

var secondlyNum:Number = 0;//蛇身的序号;

var lastNum:Number = 0;//蛇尾的序号;

var reatNum:Number = 3;//蛇速度初始值;

var scoreNum:Number = 0;//记录玩家得分;

var placeArry:Array = new Array();//记录蛇的每个节点位置的数组;

for(var i=0;i<19;i++){ placeArry[i]=[];}//声明为二维数组;

//-----------------------------------------//

function gameFun(){

if(keyName != 32){

foodFun();//显示食物;

}

onEnterFrame = function(){

if(reatNum==0){

reatNum=4;//蛇速度

keyResponseFun();//键盘响应函数;

xn += moveX;//xn=xn%19;

yn += moveY;//yn=yn%12;

countFun(cycleNum);//算出蛇头蛇尾的序号;

if(gameStatus()){return;}//游戏状态判断;

this.attachMovie("a_mc","mc"+firstNum,firstNum,{_x:n*xn,_y:n*yn});

this["mc"+firstNum].gotoAndStop(fangxang);

arrayFun();//给数组赋值;即记录蛇所在的位置;

this["mc"+secondlyNum].gotoAndStop("body");

this["mc"+lastNum].removeMovieClip();

}

reatNum--;//

}

}

overFun(1);

Stage.scaleMode = "noscale";

[文章热度:]


上一页:物理运动学公式汇总

下一页:键盘连招的flash组合键函数

最新话题

网站导航

搜索

网站公告


Copyright 2007 51as.com. Some Rights Reserved.
鄂ICP备07003189号

Powered by: KingCMS 5.0.1.0217