Показать сообщение отдельно
Старый 16.03.2016, 09:42
a7s1h1 вне форума Посмотреть профиль Отправить личное сообщение для a7s1h1 Найти все сообщения от a7s1h1
  № 6  
Ответить с цитированием
a7s1h1

Регистрация: Oct 2013
Сообщений: 126
Цитата:
Сообщение от neonoviiwolf Посмотреть сообщение
Ух, по хорошему всё это в классы, а не простыню.
Цитата:
Сообщение от neonoviiwolf Посмотреть сообщение
Убрать множество проверок помогут собственные событие(гуглим), но тут увы, только в классах писать (хотя как код перевалил за 800 строк, сами перейдёте на классы и всю игру перепишите и не раз).
Возможно, я не так вас понял, но весь вышеописанный код находится в классе Room - это комната-родитель всех находящихся в ней объектов. Чтобы проверять своих детей, родитель должен сам "видеть" их, а не ловить от них события, поэтому код должен быть именно в родителе.

Цитата:
Сообщение от neonoviiwolf Посмотреть сообщение
стоит сделать пул
С пулом буду разбираться, в данном случае он необходим, это я понимаю. Но пул решит (надеюсь) только проблему постоянного создания-удаления экземпляров, а проблема с расчётом комбинаций остаётся.

Цитата:
Сообщение от neonoviiwolf Посмотреть сообщение
Ну а скорее всего, исключил бы вектор с типамы блоков изначально и просто бы в зависимости от условия, когда первый блок сообщает о возможности добавить следующий, рандомнобы выбирал что появится следом
Таким образом можно контролировать выполнение условий расстановки блоков только в пределах двух блоков - это не подходит. Необходимо составлять комбинацию в партии из 10 блоков.

Итак, допустим, от тормозов из-за создания-удаления объектов я избавлюсь при помощи пула. Теперь, для создания пачки из 10 блоков мне необходим вектор uint с комбинацией случайных чисел, расстановка которых в этом векторе подчинена определённым правилам. Остаётся вопрос:
1. Каков наиболее оптимальный алгоритм такой расстановки?
(Сейчас у меня алгоритм такой: присваиваем ячейке случайное число и проверяем уже созданные ячейки: если разрешение получено, оставляем в проверяемой ячейке выпавшее число, если нет - ставим по умолчанию 0)
(Я думал ещё присваивать числа сразу всем ячейкам, а затем проверять всю комбинацию на выполнение условий, но ведь для этого всё равно придётся проверять каждую из них, поэтому лучше уж решать вопрос о том, можно ли оставлять в ячейке выпавшее число, сразу, при проверке данной ячейки)
(Ещё думал на вариантом: в начале игры вычислить все возможные комбинации всех используемых чисел, затем отсортировать комбинации по различным критериям и распихать по соответствующим массивам, а затем при создании просто брать из массива произвольную комбинацию. К примеру, условия для блока типа 1 в пачке из 10 блоков такие: не больше 6 единиц, не занимать 1 и последнюю ячейки, не ставить 3 единицы подряд. С такими условиями у меня получится несколько комбинаций: [0,1,1,1,0,1,1,1,0,0], [0,0,1,0,0,1,0,1,1,0] и т.д. Я их всех заношу в вектор _combinations1:Vector.<Vector.<uint>>, а при создании выбираю случайную из них MyMath.random(0,_combinations1.length-1))