• 【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 种保护 Spring Boot 应用的绝佳方法
    Redis 如何分析慢查询操作?
    Spring Boot 主类及目录结构介绍
    Redis 再牛逼,也得设置密码!!
    Spring Data Redis 详解及实战一文搞定
    Spring Boot Redis Cluster 实战干货
    超详细的 Redis Cluster 官方集群搭建指南
    Redis Linux 安装运行实战全记录
    hdu 4790 Just Random (思路+分类计算+数学)
    poj 1328 Radar Installation(贪心)
  • 原文地址:https://www.cnblogs.com/kingfly/p/2456974.html
Copyright © 2020-2023  润新知