обнаружение непрерывно затронутых клеток, чтобы выиграть при столкновении или положении - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь создать дизайн (bee_cell_competition) для учеников в моей школе. Все работает в моем коде. У меня 7 * 7 (49) ячеек в виде клипов mov ie. Студенты выбирают случайную ячейку, пытаясь сделать непрерывные касания ячеек, чтобы выиграть (по вертикали), как это объявлено на рисунке. Как я могу получить, когда пользователь касается новой ячейки (mc_47) и так, чтобы пользователь выиграл. У меня есть этот код, но он не может обнаружить. Посмотреть это описание изображения

var i =0;
var j =0;

var sellected_bee_cell;
var enemy1;
var enemy2;

var touched_cell_arr:Array = new Array(panel_bee.cell_0,panel_bee.cell_00);

var mc_bee_cells:Array = new Array(panel_bee.cell_1,panel_bee.cell_2,panel_bee.cell_3,panel_bee.cell_4,panel_bee.cell_5,panel_bee.cell_6,panel_bee.cell_7,panel_bee.cell_8,panel_bee.cell_9,panel_bee.cell_10,panel_bee.cell_11,panel_bee.cell_12,panel_bee.cell_13,panel_bee.cell_14,panel_bee.cell_15,panel_bee.cell_16,panel_bee.cell_17,panel_bee.cell_18,panel_bee.cell_19,panel_bee.cell_20,panel_bee.cell_21,panel_bee.cell_22,panel_bee.cell_23,panel_bee.cell_24,panel_bee.cell_25,panel_bee.cell_26,panel_bee.cell_27,panel_bee.cell_28,panel_bee.cell_29,panel_bee.cell_30,panel_bee.cell_31,panel_bee.cell_32,panel_bee.cell_33,panel_bee.cell_34,panel_bee.cell_35,panel_bee.cell_36,panel_bee.cell_37,panel_bee.cell_38,panel_bee.cell_39,panel_bee.cell_40,panel_bee.cell_41,panel_bee.cell_42,panel_bee.cell_43,panel_bee.cell_44,panel_bee.cell_45,panel_bee.cell_46,panel_bee.cell_47,panel_bee.cell_48,panel_bee.cell_49);
//====================================================================================

for (i = 0 ; i < 49 ; ++i)
{
        mc_bee_cells[i].buttonMode = true;
        mc_bee_cells[i].mouseChildren = false;
}

for (i = 0 ; i < 49 ; ++i)
{
    mc_bee_cells[i].addEventListener(MouseEvent.CLICK, run_the_next_q_4bee);

    function run_the_next_q_4bee(e:Event):void
    {
        sellected_bee_cell = e.currentTarget ;
        sellected_bee_cell.gotoAndStop("green");
        touched_cell_arr.push(sellected_bee_cell);
        check_win(null);
    }
}
//===========================================================

function check_win(e:Event):void
{
    for (var i:int = 0; i < touched_cell_arr.length - 1; i++)
    {
        var enemy1 = mc_bee_cells[i];

        for(var j:int = i+1; j< touched_cell_arr.length; j++)
        {
            var enemy2 = mc_bee_cells[j];

            if(enemy1.hitTestObject(enemy2))
            {
                trace("yes");
                // now i need how to check that user completed continuous touched cells vertically or horizontally
            }
        }
    }
}

//===========================================================

1 Ответ

0 голосов
/ 18 февраля 2020

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

1) Создайте класс Cell, расширяющий MovieClip для ваших ячеек:

public class Cell extends MovieClip {
    public var prevCell:Cell = null;
    public var nextCell:Cell = null;
    public var index:uint = 0;
    public var isSelected = false;

    public function Cell() {}
}

2) Перепишите обработчик run_the_next_q_4bee:

var neighbourSelectedCellIndex:Array = [];

function run_the_next_q_4bee(e:Event):void {
    sellected_bee_cell = e.currentTarget ;
    sellected_bee_cell.gotoAndStop("green");
    touched_cell_arr.push(sellected_bee_cell);

    // Check neighbour cells
    var neighbourSelectedCellIndex = 
    checkNeighbourCells(sellected_bee_cell.index)
    if (neighbourSelectedCellIndex == -1) {
        touchedCellsChains.push(sellected_bee_cell)
    } else {
        var neighbourCell = mc_bee_cells[neighbourSelectedCellIndex];
        neighbourCell.nextCell = sellected_bee_cell;
        sellected_bee_cell.prevCell = prevCell;
    }

    check_win(null);
}

function checkNeighbourCells(selectedCellIndex:uint):int {
    // Check neighbour cells. Are there any selected adjoining cell?
    // If there is any selected cell return its index
    return <selected cell index>;
    // If there is no selected cell return -1
    return -1;
}

3) Перепишите метод check_win:

// You make call `hitTestObject` method    
var hasTop = false;
var hasBottom = false;

var prevCell = enemy1;
do {
    if (prevCell.index < 7) {
        hasTop = true;
    } else if (prevCell.index > 42) {
        hasBottom = true;
    }

    prevCell = prevCell.prevCell;
} while (!prevCell)

var nextCell = enemy1;
do {
    if (nextCell.index < 7) {
        hasTop = true;
    } else if (nextCell.index > 42) {
        hasBottom = true;
    }

    nextCell = nextCell.nextCell;
} while (!nextCell)

if (hasTop && hasBottom) {
    trace("You win!");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...