日期:2013-06-21  浏览次数:20760 次

核心提示:flash教程,连连看小游戏地图数据简单生成的AS代码。

比如连连看的数据生成。

比较简单,这里不包括判断能否一定有解的部分,只是一个随意生成地图(给定行,列,每种图片的生成个数),没有思路的可以参考一下,高手也可以指正。

//生成地图的类

package src.ww.llk.map

{

    import mx.collections.ArrayCollection;

   

    public class MakeMap

    {

        private var mapParam:MapParam = null;

        private var types:ArrayCollection = null;

//保证取得的数据不被重取

        private var flags:ArrayCollection = null;

        public function MakeMap(param:MapParam):void {

            mapParam = param;

            initData();

        }

       

        // 初始化必要的数据

        private function initData():void {

            types = new ArrayCollection();

            var typeNum:int = Math.floor(mapParam.cols*mapParam.rows/mapParam.numberPerType);

            for(var i:int=1;i<=typeNum;i++) {

                for (var j:int=0;j<mapParam.numberPerType;j++) {

                    types.addItem(i);

                }

               

            }

           

           

            var yushu:int = mapParam.cols*mapParam.rows - typeNum*mapParam.numberPerType;

            for (var yI:int = 0; yI<yushu;yI++) {

                types.addItem(1);

            }

        }

       

//随机生成地图

        public function make():Array {

            flags = new ArrayCollection();

            for(var i:int=0;i<types.length;i++){

                flags.addItem(i);

            }

            var mapData:Array = new Array();

            var rowData:Array = null;

            var col:int = 0;

           

            rowData = new Array();

            rowData.push(0);

            for(col = 0;col<mapParam.cols;col++){

                rowData.push(0);

            }

            rowData.push(0);

            mapData.push(rowData);

            for(var row:int = 0;row<mapParam.rows;row++){

                rowData = new Array();

                rowData.push(0);

                for(col = 0;col<mapParam.cols;col++){

                    rowData.push(getType());

                }

                rowData.push(0);

                mapData.push(rowData);

            }

            rowData = new Array();

            rowData.push(0);

            for(col = 0;col<mapParam.cols;col++){

                rowData.push(0);

            }

            rowData.push(0);

            mapData.push(rowData);

            return mapData;

        }

       

        // 随机取得单个数据

        private function getType():int {

            var ran:int=-1;

            var ret:int = 0;

            ran = randomIndex();

            var index:int = int(flags.getItemAt(ran));

            flags.removeItemAt(ran);

            ret = int(types.getItemAt(index));

            return ret;

        }

       

        private function randomIndex():int {

            return Math.random() * (flags.length - 1);

        }

    }

}

参数类,就是一个bean,

package src.ww.llk.map

{

    public class MapParam

    {

        public var rows:Number=0;

        public var cols:Number=0;

        public var numberPerType:int=4;

    }

}

测试类:

            public function test():void {

                var param:MapParam = new MapParam();

                param.rows = 6;

                param.cols = 6;

                param.numberPerType = 4;

                var maker:Make