zoukankan      html  css  js  c++  java
  • 【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;
            }
            
        }

  • 相关阅读:
    使用C39HrP48DhTt字體生成條型碼
    GUI設計禁忌
    music
    AADL的四种经典设计模式
    Model to Text工具Acceleo使用教程(七)——模板服务
    Model to Text工具Acceleo使用教程(二)——体系结构
    Model to Text工具Acceleo使用教程——背景知识
    P/NP/NPC/NPhard概念的图形解释
    哥德巴赫猜想穷举验证算法及实现
    Model to Text工具Acceleo使用教程(五)——模板服务
  • 原文地址:https://www.cnblogs.com/kingfly/p/2456974.html
Copyright © 2011-2022 走看看