Flash 貪食蛇:

2010-09-04_190529

Flash 貪食蛇程式:

package{
    
    import flash.display.*;
    import flash.events.*
    import flash.utils.Timer;
    
    public class Snake extends MovieClip{
        
        var sprite:Sprite=new Sprite();
        var arrSnake:Array=new Array(); 
        var food:MovieClip=new FoodSprite();
        var time:Timer=new Timer(100);
        
        var numX:Number=1;
        var numY:Number=0;
        var speed:Number=10;        
        
        const left:Number=37;
        const up:Number=38;
        const right:Number=39;        
        const down:Number=40;
        
        public function Snake(){
            
            stop();
            
            //設定背景為黑色
            graphics.beginFill(0x000000);
            graphics.drawRect(0,0,300,300);
                        
            addChild(sprite);                        
            
            //建立 snake sprite 
            var snake:SnakeSprite=new SnakeSprite();
            
            snake.x=100;
            snake.y=100;
            arrSnake.push(snake);        
            sprite.addChild(snake);                                    
            
            snake=new SnakeSprite();
            snake.x=-10;            
            arrSnake.push(snake);        
            sprite.addChild(snake);    
            
            //初始 food 
            food.x=250;
            food.y=250;
            sprite.addChild(food);                                    
            
            //加入鍵盤事件
            stage.addEventListener(KeyboardEvent.KEY_DOWN,key_Down);
            
            //加入 Timer 事件
            time.addEventListener(TimerEvent.TIMER,GameLoop);
            time.start();                        
            
        }
                
        public function GameLoop(e:TimerEvent){
                
                moveSnake();
                
                //snake 移動
                arrSnake[0].x=arrSnake[0].x+(numX*speed);
                arrSnake[0].y=arrSnake[0].y+(numY*speed);    
                
                //如果 snake 移動出畫面邊緣,則遊戲結束
                if(arrSnake[0].x<0 || arrSnake[0].x > 300-10 || arrSnake[0].y<0 || arrSnake[0].y>300-10){
                    end();
                }
                
                //如果 snake 碰觸到自己,則遊戲結束
                for(var i:int=1;i<arrSnake.length;i++){
                    if(arrSnake[0].x==arrSnake[i].x && arrSnake[0].y==arrSnake[i].y){
                        end();                        
                    }
                }
                                
                //snake 吃到 food
                if(arrSnake[0].x == food.x && arrSnake[0].y == food.y){
                    
                    //food 出現的位置,不得與 snake 重疊
                    var isCover:Boolean
                    
                    do{            
                    
                        isCover=false;
                        food.x=Math.floor((Math.random()*300)/10)*10;
                        food.y=Math.floor((Math.random()*300)/10)*10;
                        
                        for(var j:int=0;j<arrSnake.length;j++) {
                            if(arrSnake[j].x == food.x && arrSnake[j].y == food.y){
                                isCover=true;
                                break;
                            }                        
                        }
                        
                    }while(isCover)
                    
                    //建立新的 snake sprite
                    var newSnake:SnakeSprite
            
                    newSnake=new SnakeSprite();
                    arrSnake.push(newSnake);    
                    newSnake.x=-10;
                    newSnake.y=-10;
                    sprite.addChild(newSnake);
                    
                }                
                
        }
        
        //移動貪食蛇
        public function moveSnake(){
            
            for(var i:int=arrSnake.length-1;i>0;i--) {
                arrSnake[i].x = arrSnake[i-1].x;
                arrSnake[i].y = arrSnake[i-1].y;                
            }
            
        } 
        
        //遊戲結束
        public function end(){
            
            //移除事件
            time.removeEventListener(TimerEvent.TIMER,GameLoop);
            stage.removeEventListener(KeyboardEvent.KEY_DOWN,key_Down);                
            
            //移除 sprite
            removeChild(sprite);
            
            //跳到遊戲結束影格
            nextFrame();
        }
        
        //鍵盤事件 
        public function key_Down(e:KeyboardEvent){
                
                if(e.keyCode == up){
                    
                    //貪食蛇向下,按下向上方向鍵無效
                    if(numY!=1){ 
                        numX=0;
                        numY=-1;                                                                
                    }
                }
                
                if(e.keyCode == down){
                    
                    //貪食蛇向上,按下向下方向鍵無效
                    if(numY!=-1){
                        numX=0;
                        numY=1;                        
                    }
                }
                
                if(e.keyCode == left){
                    
                    //貪食蛇向右,按下向左方向鍵無效
                    if(numX!=1){
                        numX=-1;
                        numY=0;                        
                    }
                }
                
                if(e.keyCode == right){
                    
                    //貪食蛇向左,按下向右方向鍵無效
                    if(numX!=-1){
                        numX=1;
                        numY=0;                        
                    }
                }
                
        }
        
    }
    
}

 

檔案下載:Snake.rar

參考網站:http://flashgameu.com/

iammic 發表在 痞客邦 PIXNET 留言(0) 人氣()