连连看图标的生成,先思考几个问题:
如果有10种类型的图标,第一关取1-5种图标,第二关取2-6种图标...
根据关卡的不同,第一关要随机8*8=64个图标,第二关要随机取10*10=100个图标...
如果随机10次0-5种图标,有可能0没有被随机到,5被随机了10次的情况,所以我们可以不随机。
增加DataIcon类,生成图标数组:
package com.llk.model
{
/**
* ...
* @author ragged
*/
public class DataIcon
{
/**
* 获取指定种类和指定数量的成双图标数组
* @param $iconArr 指定的图标种类,如:[0,1,2,3]
* @param $count 数量,只能是双数,因为连连看图标不能为单个
* @param $random 是否随机,随机的话会出现各另种类数量较少或者较多的情况
* @return
*/
public static function gainIconArray($iconArr:Array, $count:uint, $random:Boolean = false):Array
{
if ($count % 2 != 0)
{
trace("图标数量必需是双数");
return [];
}
var iconArr:Array = [];
var i:uint;
var k:uint = 0;
var r:uint;
var count:uint = $count / 2;
for (i = 0; i < count; i++)
{
if ($random)
{
//按顺序
iconArr.push($iconArr[k]);
iconArr.push($iconArr[k]);
k++;
if (k == $iconArr.length)
{
k = 0;//重新开始
}
}
else
{
//随机
r = Math.random() * $iconArr.length;
iconArr.push($iconArr[r]);
iconArr.push($iconArr[r]);
}
}
//打乱数组
var randomArr:Array = [];
var len = iconArr.length;
for (i = 0; i < len; i++)
{
//在图标数组中随机一个
k = uint(Math.random() * iconArr.length);
//放到数组
randomArr.push(iconArr[k]);
//删除图标数组中随机到的那个值
iconArr.splice(k, 1);
}
//返回打乱的图标数组
return randomArr;
}
}
}
修改创建图标方法,传入图标类型:
/**
* 创建ICON二维数组
*/
private function createIconArray():void
{
//获取图标类型数组
var typeArr:Array = DataIcon.gainIconArray([0, 1, 2, 3, 4, 5], 64, true);
var k:uint = 0;
var i:uint;
var j:uint;
for (i = 0; i < 8;i++ )
{
this._iconArr[i] = [];
for (j = 0; j < 8;j++ )
{
this._iconArr[i][j] = new Icon(typeArr[k], i, j);
this.addChild(this._iconArr[i][j]);
//按数组顺序
k++;
}
}
}
public function Icon($type:uint, $i:uint, $j:uint)
{
super();
this._type = $type;
//记录图标在二维数组中的位置
this._i = $i;
this._j = $j;
this.x = this._i * 51;
this.y = this._j * 51;
this.createIcon();
}