【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;
        }
        
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值