站内搜索:     
站点首页破釜学院网页制作Flash游戏制作 → 贪吃蛇游戏
正在加载相关信息.....
Web 站内搜索
贪吃蛇游戏
】【打印】【加入收藏】【关闭收藏到新浪ViVi】【收藏到365KEY】 浏览字号:
日期:2005-09-14 人气: 出处:闪吧 作者: LH8
点击浏览该文件
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";

>>>> 进入论坛交流 <<<<