Movieclips ударить-моль разные шнуры на кротов - PullRequest
0 голосов
/ 05 февраля 2011

Я создал флеш-игру «удар-моль» и закодировал 9 различных x и y-кординатов, в которых могут появиться 4 родинки. Но я не могу закодировать его, чтобы у родинок никогда не было одинаковых х и у кординатов.

Я пробовал этот код: (Барни и Мульварп - это два родинки. .Flytt (); это команда, которая дает кроту новое место.

if( Barney.x == mulvarp.x ){
     Barney.flytt();
}

Barney.addEventListener(MouseEvent.CLICK, flyttb);
function flyttb(evt:MouseEvent){
    barneyAu.play();
    //returnFourPositionsF();
    Barney.flytt();
    teller-=4;
    score.text=teller+"p";
    barneyTimer.reset();
    barneyTimer.start();
    }
mulvarp.addEventListener(MouseEvent.CLICK, flyttm);
function flyttm(evt:MouseEvent){
    squishRiktig.play();
    mulvarp.flytt();
    teller+=1;
    score.text=teller+"p";
    mulvarpTimer.reset();
    mulvarpTimer.start();
}
Kone.addEventListener(MouseEvent.CLICK, flyttmk);
function flyttmk(evt:MouseEvent){
    squishRiktig.play();
    Kone.flytt();
    teller+=2;
    score.text=teller+"p";
    koneTimer.reset();
    koneTimer.start();
}
Baby.addEventListener(MouseEvent.CLICK, flyttmb);
function flyttmb(evt:MouseEvent){
    squishRiktig.play();
    Baby.flytt();
    teller+=3;
    score.text=teller+"p";
    babyTimer.reset();
    babyTimer.start();
}

И это .flytt (); Функция, которую я получил внутри всех родинок в ActionScript:

function flytt():void{
var flyttUt:int=Math.random() * 8;

if(flyttUt==0){
x=243,30;
y=171,65

}
if(flyttUt==1){
x=630,55;
y=170,25;

}

if(flyttUt==2){
x=999,85;
y=175,55;

}

if(flyttUt==3){
x=244,85;
y=363,85;

}

if(flyttUt==4){
x=632,75;
y=360,20;

}

if(flyttUt==5){
x=996,25;
y=359,50;

}

if(flyttUt==6){
x=228,45;
y=572,40;

}

if(flyttUt==7){
x=627,75;
y=570,95;

}

if(flyttUt==8){
x=650,60;
y=382,05;
}



}

Я получил совет, возможно, воспользовавшись этим, и позвонил returnFourPositionsF();, но я не уверен, как объединить все родинки в один, поскольку у них у всех разные таймеры, и я не хочу, чтобы они меняли положение, даже если один меняется.

var positionA:Array =  [ [243.30,171.65],[630.55,170.25],[999.85,175.55],[244.85,363.85],[632.75,360.20],[996.25,359.50],[228.45,572.40],[627.75,57.95],[650.60,382.05] ];


function returnFourPositionsF():Array{
    shuffle(positionA);
    return [positionA[0],positionA[1],positionA[2],positionA[3]]
}

function shuffle(a:Array) {
    var p:int;
    var t:*;
    var ivar:int;
    for (ivar = a.length-1; ivar>=0; ivar--) {
        p=Math.floor((ivar+1)*Math.random());
        t = a[ivar];
        a[ivar] = a[p];
        a[p] = t;
    }
}

1 Ответ

0 голосов
/ 05 февраля 2011

Запустите свой перетасованный массив через Dictionary примерно так.

import flash.utils.Dictionary;
var ar:Array = [[200, 100], [600, 400], [200, 100], [479, 239]];
var dict:Dictionary = new Dictionary();
for(var i:int=0;i<ar.length;i++)
{
    dict[ar[i]] = ar[i];
}
var temp:Array = [];
for(var item in dict)
{
    temp.push(item);
}

В словарях не может быть дубликатов ключей, поэтому каждый дубликат ключа удаляется.Оттуда вы сможете использовать эту логику, чтобы избежать дублирования позиций.

...