連連看圖標的生成,先思考幾個問題:
如果有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();
}