【AS3代码】九宫格小游戏

文档类

package
{
    import com.RectShape;    
    import flash.display.Sprite;
    import flash.events.MouseEvent;    
    
    public class Main extends Sprite
    {
        //方块的排列数组
        private var indexshape:Array = new Array(1,2,3,4,5,6,7,8);                        
        
        //记录地图某个位置是否占用了小方块的坐标数组
        private var ditu:Array = new Array(new Array(3), new Array(3), new Array(3));     
        
        //记录小方块的排列位置
        private var pailie:Array = new Array(
            new Array(0,0), new Array(40,0), new Array(80,0),
            new Array(0,40), new Array(40,40), new Array(80,40),
            new Array(0,80), new Array(40,80), new Array(80,80)
        );    
        
        public function Main()
        {
            init();    
        }
        
        private function init():void
        {
            //绘制九宫格外框
            var kuang:Sprite = new Sprite();
            kuang.graphics.lineStyle(3,0xff0000);
            kuang.graphics.drawRect(0,0,120,120);
            kuang.graphics.endFill();
            kuang.x = 100;
            kuang.y = 100;
            this.addChild(kuang);
            
            //将九宫格各个位置的值都设置为1,表示还未被小方块占据,9个位置全是空的
            for(var i:uint = 0; i < 3; i++)
            {
                for(var t:uint = 0; t < 3; t++)
                {
                    ditu[i][t] = 1;    
                }
            }
            
            for(var n:uint = 1; n <= 8; n++)
            {
                //从indexshape数组中随机抽取一个数作为小方块的数字编号
                var hao:uint = Math.floor(Math.random() * indexshape.length);
                
                //已经抽取出来的小方块编号
                var bianhao:uint = indexshape[hao];                                
                
                //然后将抽取出来的编号从indexshape数组中删掉
                indexshape.splice(hao,1);
                
                //生成带数字编号的小方块
                var rect:RectShape = new RectShape(bianhao);
                rect.mouseChildren = false;
                
                //从pailie数组中随机抽取一个位置,当作生成出来的小方块要放置的位置
                var weizhi:uint = Math.floor(Math.random() * pailie.length);
                var dui:Array = pailie[weizhi];
                
                //然后将抽取出来的编号从pailie数组中删掉
                pailie.splice(weizhi,1);
                
                //定义小方块位置
                rect.x = dui[0];
                rect.y = dui[1];
                rect.X = dui[0] / 40;
                rect.Y = dui[1] / 40;
                
                kuang.addChild(rect);
                
                ditu[dui[0]/40][dui[1]/40] = 0;
                
                //添加点击事件
                rect.addEventListener(MouseEvent.CLICK, dong);
            }
        }
        
        //点击小方块响应函数
        private function dong(evt:MouseEvent):void
        {
            var zuo:uint = evt.target.X - 1;
            var you:uint = evt.target.X + 1;
            var shang:uint = evt.target.Y - 1;
            var xia:uint = evt.target.Y + 1;
            
            //判断当前方块的左侧是空的
            if(zuo != 4294967295 && ditu[zuo][evt.target.Y] == 1)
            {
                ditu[evt.target.X][evt.target.Y] = 1;    //移动方块后,原先的位置为空
                ditu[zuo][evt.target.Y] = 0;            //新的位置设不为空,表示占有
                evt.target.X = zuo;
                evt.target.x -= 40;                
            }
            //判断当前方块的右侧是空的
            else if(you != 3 && ditu[you][evt.target.Y] == 1)
            {
                ditu[evt.target.X][evt.target.Y] = 1;    
                ditu[you][evt.target.Y] = 0;
                evt.target.X = you;
                evt.target.x += 40;                    
            }
            //判断方块上侧是空的
            else if(shang != 4294967295 && ditu[evt.target.X][shang] == 1)
            {
                ditu[evt.target.X][evt.target.Y] = 1;    
                ditu[evt.target.X][shang] = 0;
                evt.target.Y = shang;
                evt.target.y -= 40;    
            }
            //判断方块下侧是空的
            else if(xia != 3 && ditu[evt.target.X][xia] == 1)
            {
                ditu[evt.target.X][evt.target.Y] = 1;    
                ditu[evt.target.X][xia] = 0;
                evt.target.Y = xia;
                evt.target.y += 40;    
            }
        }
    }

 

生成小方块类 

 

package com
{
    //拼图游戏
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    
    public class RectShape extends Sprite
    {
        private var xzuobiao:uint;    //x坐标
        private var yzuobiao:uint;    //y坐标
        
        //构造函数
        public function RectShape(indexs:uint)    
        {
            init(indexs);
        }
        
        //初始化(生成带文字的小方块)
        private function init(index:uint):void
        {
            //画一个带边框的矩形
            this.graphics.beginFill(0x00ff00);
            this.graphics.lineStyle(2,0x0000ff);
            this.graphics.drawRect(0,0,40,40);
            this.graphics.endFill();
            
            //设置文本格式
            var txt:TextFormat = new TextFormat();
            txt.size = 30;
            
            //创建文本
            var num_txt:TextField = new TextField();
            num_txt.selectable = false;                    //设置为不能被选择
            num_txt.text = String(index);                //text只接收string,所以强制转换下
            num_txt.width = 40;                            //文字宽高
            num_txt.height = 40;
            num_txt.x = 0;
            num_txt.y = 0;
            num_txt.setTextFormat(txt);
            num_txt.autoSize = TextFieldAutoSize.CENTER;    //文字居中对齐
            
            //文本添加到显示列表
            this.addChild(num_txt);
        }
        
        //定义get和set两个方法
        public function get X():uint
        {
            return xzuobiao;
        }
        public function set X(n:uint):void
        {
            xzuobiao = n;
        }        
        public function get Y():uint
        {
            return yzuobiao;
        }
        public function set Y(n:uint):void
        {
            yzuobiao = n;
        }
        
    }

posted @ 2012-04-19 13:41  王翔(kingfly)  阅读(808)  评论(0编辑  收藏  举报