与阵列和距离的链式反应

时间:2013-12-01 20:53:13

标签: arrays actionscript-3 distance

我想制作一个程序,在用户输入地雷数量后,屏幕上会出现地雷。然后,用户将点击一个矿井并引发爆炸,最近的两个地雷爆炸。

到目前为止,我的代码可以提示用户输入地雷数量,然后显示它们。地雷是按钮,当点击时,它们将被移除并出现爆炸。

然而,我仍然坚持如何处理连锁反应。我对AS3中的编码比较陌生,因此我不知道如何处理我程序的这一部分。

代码:

package 
{

import flash.display.MovieClip;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.events.*;

public class Minefield extends MovieClip
{

    var integer:int;
    var iField:TextField = new TextField();
    var button:iButton = new iButton();
    var i:int;
    var mines:Array = new Array();

    public function Minefield()
    {

        var explosion:iExplosion = new iExplosion();

        iField.type = "input";
        iField.height = 18;
        iField.x = 460;
        iField.y = 275;
        iField.border = true;
        iField.restrict = "0-9";
        iField.maxChars = 2;
        stage.focus = iField;
        addChild(iField);
        addChild(button);
        button.x = 450;
        button.y = 175;
        button.buttonMode = true;
        button.addEventListener(MouseEvent.CLICK, UponClick);


    }

    function AddMines()
    {
        for (i = 0; i < integer; i++)
        {
            CreatorOfMine();
            mines[i].addEventListener(MouseEvent.CLICK, UponMineClick)
            mines[i].buttonMode = true;
        }
    }

    function CreatorOfMine()
    {

        mines[i] = new Mine();
        MineLocation()
    }

    function MineLocation()
    {
        mines[i].x = Math.round(Math.random() * 925);
        mines[i].y = Math.round(Math.random() * 525);
        mines[i].rotation = Math.random() * 360;
        addChild(mines[i]);

    }

    function UponClick(e:MouseEvent)
    {
        integer = int(iField.text);
        RemoverOfChildren();

    }

    function RemoverOfChildren()
    {
        removeChild(button);
        removeChild(iField);
        AddMines();
    }

    function UponMineClick(event:MouseEvent){
        var mineObject:Mine = Mine(event.currentTarget)
        var expl:iExplosion = new iExplosion() 
        expl.x = mineObject.x
        expl.y = mineObject.y
        expl.rotation = mineObject.rotation
        addChild(expl)
        removeChild(mineObject)

    }
    }
}
}

您可能需要/想要的信息:

舞台大小为1024 x 600(px)

我的尺寸为40 x 40(px)

爆炸的大小是40 x 40(px)

1 个答案:

答案 0 :(得分:0)

看起来像递归的好例子。伪代码:

Function ExplodeMine(mine) {
    mine.boooooooooom()
    nearest = findNearestUnexplodedMines()
    foreach(nextMine in nearest) {
        ExplodMine(nextMine);
    }
}

在点击的第一个矿井上启动ExplodeMine。