Actionscript 3.0 Cube Crash, как игра - PullRequest
       33

Actionscript 3.0 Cube Crash, как игра

0 голосов
/ 31 января 2012

Я пытаюсь собрать игру как http://games.yahoo.com/game/bricks-breaking в ActionScript 3 (Flash Builder).Я могу создать массив кирпичей (которые видны при запуске игры), но я понятия не имею, как найти группу кирпичей в массиве.

Допустим, у нас есть массив, например:

  • 1 2 2 1 3 3 1 1 1 1 1 1 1
  • 1 2 1 1 1 3 1 1 1 1 1 1 1
  • 1 2 1 1 1 31 1 1 1 1 1 3
  • 1 1 2 1 1 3 3 3 1 1 1 1 3
  • 1 1 1 2 1 3 1 3 3 1 1 1 3
  • 1 1 1 3 3 3 1 3 3 1 1 1 3
  • 1 1 1 1 1 1 1 3 3 1 1 1 1

Когда пользователь щелкает любой кирпич красного цвета(в массиве скажем, что это 3) массив после удаления всех 3 будет выглядеть так:

  • 1 2 2 0 0 0 0 0 0 1 1 1 1
  • 1 21 1 0 0 1 0 0 1 1 1 1
  • 1 2 1 1 1 0 1 0 0 1 1 1 3
  • 1 1 2 1 1 0 1 0 1 1 1 1 3
  • 1 1 1 1 1 0 1 1 1 1 1 1 3
  • 1 1 1 2 1 0 1 1 1 1 1 1 3
  • 1 1 1 1 1 1 11 1 1 1 1 1

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

Любое предложениеtions как это сделать?

Есть ли какой-нибудь алгоритм, который мне следует использовать?

Спасибо за совет

1 Ответ

1 голос
/ 31 января 2012

Простой способ удалить элементы - использовать рекурсивную функцию.Это не единственный способ (или даже хороший), но этого должно быть достаточно для такой игры.В основном что-то вроде этого:

function breakBricks(x:int, y:int, color:int):void {
    if(bricks[y][x] != color) return;
    bricks[y][x] = 0;
    breakBricks(x + 1, y, color);
    breakBricks(x, y + 1, color);
    breakBricks(x - 1, y, color);
    breakBricks(x, y - 1, color);
}

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

На следующем шаге вы можете перебирать каждый столбец массива снизу вверх, сохраняя ссылку на позицию первого 0найти элемент и переместить все найденные после него значения не-emtpy в самое низкое положение пустой строки.

...