Ну, я на самом деле не детально рассмотрел ваш код, но, глядя на него, кажется, вы делаете вещи действительно сложными.Итак, позвольте мне дать вам подсказку, как бы я это сделал ...
1) Сначала я бы сделал класс 'card', который расширяет спрайт или растровое изображение, в основном содержащее изображение этой карты, изображениеcover / mask, некоторые методы анимации, такие как hide / show и т. д., и, возможно, переменная 'id', чтобы распознать ее позже, хотя в этом нет необходимости.Вы также можете избавиться от имеющегося массива, и в этом случае пропустите шаг 2.
2) Теперь вставьте две копии каждой карты в массив.пример [new card('c1'),new card('c1'),new card('c2'),new card('c2'),.....]
.
3) Теперь пришло время, когда вы сделали его наиболее сложным, то есть перемешивание массива.Давайте напишем специальную функцию для этого, не так ли?
function shuffleArr(arr):Array
{
var len:int = arr.length();
for(var i:int=0; i<len; i++)
{
//Swap the value at i with a random value within the array;
var tmp_pos:int = Math.floor(Math.random()*len);
while(tmp_pos==i)
{
tmp_pos = Math.floor(Math.random()*len);
}
var tmp_var:card = arr[tmp_pos];
arr[tmp_pos] = arr[i];
arr[i] = tmp_var;
}
}
4) Теперь, когда массив перемешан, вам просто нужно выложить их в сетку.
for(var row:int=0; row<6; row++)
{
for(var col:int=0; col<6; col++)
{
card_arr[i].x = card_arr[i].width*cols+5;
card_arr[i].y = card_arr[i].height*row+5;
stage.addChild(card[i]);
}
}
5) Теперь вам нужно проверить, нет ли у пользователя клика, и выполнить действие, и есть много способов сделать это, но я расскажу об одном из них ... a) Дайте картам обработчик события щелчка, это легко сделать, если картыкласс, или вы можете посмотреть в event.target
свойство и использовать общий обработчик кликов.тебе решать.б) Нажмите на кнопку, нажмите идентификатор карты в массиве.Если вы сделали их в классе, их идентификаторы должны быть, c1, c2 и т. Д., И вы можете сделать это
holder_arr.push(this);
this.removeCover();
6) Теперь вы должны убедиться, что массив-держатель может содержать толькодва значения за один раз.Затем сделайте проверку.Я пишу полупсевдокод с большим количеством предполагаемых функций и значений:
//Insert
if(holder_arr.length()==2)
{
//flip back the cards and empty the array
holder_arr[0].showCover();
holder_arr[1].showCover();
holder_arr = [];
}
holder_arr.push(this);
...
..
7) Для проверки создайте функцию и запускайте ее каждый раз при нажатии на карту, а также по окончании таймера,перевернуть карты.
function checkCards()
{
if(holder_arr.length==2)
{
if(holder_arr[0].id==holder_arr[1].id)
{
//the cards match
holder_arr[0].vanishAnim();
holder_arr[1].vanishAnim();
holder_arr=[];
}
else
{
holder_arr[0].showCover();
holder_arr[1].showCover();
holder_arr=[];
}
}
}
Очевидно, вы тоже удалите карты из фактического card_arr, но когда это сделать, решать вам;)