Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Движок для игры "линии" (http://www.flasher.ru/forum/showthread.php?t=203668)

ndiezel 03.10.2013 19:16

Движок для игры "линии"
 
Всем привет.

Делаю сейчас игру, по типу "линий". Это когда собираешь три или больше кубика одного цвета в ряд - они исчезают. Ну, типа такой игры.
И вот, собственно, у меня вопрос - как лучше всего сделать движок для этой игры? Учитывая что новые блоки могут появляться с разных сторон и соответственно - будут двигать ряды или столбцы. Все или выборочно.
Я, поначалу, думал что легко сделаю эту игру, но как взялся за реализацию, понял что не всё тут просто.

Я сделал так. Создаю стартовый массив:
Код AS3:

private var blocks:Array =
                [
                ["blank","blank","blank","blank","blank","blank","blank","blank","blank","blank","blank","blank","blank"],
                ["blank","blank","blank","blank","blank","blank","blank","blank","blank","blank","blank","blank","blank"],
                ["blank","blank","blank","blank","blank","blank","blank","blank","blank","blank","startingPosition","blank","blank"],
                ["blank","blank","blank","blank","blank","blank","blank","blank","startingPosition","startingPosition","startingPosition","blank","blank"],
                ["blank","blank","blank","blank","blank","blank","blank","startingPosition","startingPosition","startingPosition","startingPosition","blank","blank"],
                ["blank","blank","blank","blank","blank","blank","startingPosition","startingPosition","startingPosition","startingPosition","startingPosition","blank","blank"],
                ["blank","blank","blank","blank","blank","startingPosition","startingPosition","startingPosition","startingPosition","startingPosition","startingPosition","blank","blank"],
                ["blank","blank","blank","blank","startingPosition","startingPosition","startingPosition","startingPosition","startingPosition","startingPosition","startingPosition","blank","blank"],
                ["blank","blank","blank","blank","blank","blank","blank","blank","blank","blank","blank","blank"]
                ];

Заполняю на его основе экран блоками, запускаю саму игру:
Код AS3:

private function placeBlocksOnLevel():void
                {
                        addChild(blocksSloi);
                        for (var line:int=8; line>-1; line--)
                        {
                                for (var column:int = 12; column>-1; column--)
                                {
                                        var bv:int = 0;
                                        if (blocks[line][column] == "startingPosition")
                                        {
                                                bv = 1 + Math.random() * 7;
                                        }
                                        createBlock(line,column,bv);
                                }
                        }
 
                        addEventListener(Event.ENTER_FRAME,MainEnterFrame);
                }

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

AlexCooper 03.10.2013 19:25

Я бы для начала использова вместо blank и startingPosition , 0 и 1, ну или тру / фэлсе.
А вообще конечно я бы использовал box2D и методом "сканирования" линий убивал не нужны. Тогда вообще не нужно было б знать что, где и куда ложить. Всё само б собиралось и рассыпалось.

ndiezel 03.10.2013 19:59

Цитата:

Сообщение от AlexCooper (Сообщение 1147573)
Я бы для начала использова вместо blank и startingPosition , 0 и 1, ну или тру / фэлсе.
А вообще конечно я бы использовал box2D и методом "сканирования" линий убивал не нужны. Тогда вообще не нужно было б знать что, где и куда ложить. Всё само б собиралось и рассыпалось.

Я бы тоже использовал box2D но он у меня не хочет запускаться. Пробовал и на Flash Develop и на Flash cs 6. Несколько часов на него убил, потом плюнул и решил сам всё писать.

AlexCooper 03.10.2013 20:38

Вложений: 1
ndiezel хм...

ndiezel 03.10.2013 20:48

Цитата:

Сообщение от AlexCooper (Сообщение 1147577)
ndiezel хм...

Скачал.
Тогда можно про вот это поподробней:
Цитата:

А вообще конечно я бы использовал box2D и методом "сканирования" линий убивал не нужны. Тогда вообще не нужно было б знать что, где и куда ложить. Всё само б собиралось и рассыпалось.
?

Это функция, которая будет находить от трёх и больше в одну линию? Или есть какая-то похожая в box2D?

KumoKairo 04.10.2013 00:09

Не надо бокс2Д, это оверкил.
Посмотрите пример PiratePigs который в пакете демо проектов с OpenFL идет, там все просто сделано
тут гайд по ковырянию в openFL
Заметьте, я не предлагаю делать на Haxe, я предлагаю посмотреть реализацию (синтаксис языка очень похож на AS3, а openFL апи вообще почти копирует стандартный флешевсий)

Dukobpa3 04.10.2013 01:05

Эммммм.....
Бокс для лайнсов?
Может пока не поздно курьером пойти работать и нуевонафиг это программирование?

Добавлено через 3 минуты
делаешь шаблоны вида:

Код:

0, 0, 1
0, 1, 0
1, 0, 0

Код:

1, 1, 1
Код:

1
1
1

Код:

1, 0, 0
0, 1, 0
0, 0, 1

Прикладываешь штамп к своему большому полю, получаешь пересечение со штампом.
Это как самое очевидное и простое решение.
Если мозги включить то можно и что-то поизящнее придумать. Мне сейчас этим заниматься не охота.
И да. В любом случае или 0, 1 или тру/фолс.
Но у тебя там скорее всего будут шарики разноцветные, так что тру фолс наверное нет, а вот номер цвета вполне может быть.

Добавлено через 7 минут
Еще одно простое решение - пройтись по всем ячейкам и посмотреть на +/- одну в каждую сторону от нее.
если и + и - будут такими же как исходная - можно убирать.

GBee 04.10.2013 01:17

Простого прохода по столбцам и по строкам хватит за уши. Прикручивать что-то левое для такой задачи очень мощный изврат.

Dukobpa3 04.10.2013 03:34

Я тут подумал.
Всё-таки склоняюсь к реализации через flex DataGrid + ItemRenderer.
Метода лучше - для этой задачи не найти.

ndiezel 04.10.2013 15:27

Цитата:

Сообщение от Dukobpa3 (Сообщение 1147588)
Эммммм.....
Бокс для лайнсов?
Может пока не поздно курьером пойти работать и нуевонафиг это программирование?

Поздно )
Уже лет 7 как.


Часовой пояс GMT +4, время: 06:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.