Collapse — различия между версиями

Материал из wiki.appsalutecreator.com
Перейти к: навигация, поиск
(Структура файла)
(Создание простейшего коллапса (классика))
 
(не показано 19 промежуточных версий 3 участников)
Строка 14: Строка 14:
 
=Перегруженные правила=
 
=Перегруженные правила=
 
*'''Типов фишек''' - Число разновидностей типов фишек.
 
*'''Типов фишек''' - Число разновидностей типов фишек.
*'''Номер в фишках''' - Число номеров в фишках. Включая статические.
+
*'''Номер в фишках'''(''numTokenNums'') - Число номеров в фишках которые (для текущего уровня). Включая статические.
 +
*'''макс. номеров в фишках'''(''numTokenNumsMax'') - Максимальное число номеров в фишках. Включая статические.
 
*'''Номер бомбы''' - Номер фишки, который соответствует бомбе. Не будет генерироваться сам по себе.
 
*'''Номер бомбы''' - Номер фишки, который соответствует бомбе. Не будет генерироваться сам по себе.
 
*'''Номер крестобомбы''' - Номер фишки, который соответствует крестобомбе, не будет генерироваться сам по себе.
 
*'''Номер крестобомбы''' - Номер фишки, который соответствует крестобомбе, не будет генерироваться сам по себе.
Строка 32: Строка 33:
 
*'''Генерация без мачей''' - При генерации поля избегать готовых совпадений.
 
*'''Генерация без мачей''' - При генерации поля избегать готовых совпадений.
 
*'''Проверка после осыпания''' - После осыпания фишек ещё раз перепроверить возможные комбинации ходов.
 
*'''Проверка после осыпания''' - После осыпания фишек ещё раз перепроверить возможные комбинации ходов.
*'''Добавление''' - Нужно ли добавлять фишки на поле. Или игра на разбор.
+
*'''Добавление'''(''needBirth'') - Нужно ли добавлять фишки на поле. Или игра на разбор; Можно перегрузить настройками уровня (результирующее значение будет в парамметре "needBirthLevel");
*'''Схлопывание''' - Нужно ли схлопывание (Ликвидация пустых столбцов).
+
*'''Схлопывание'''(''needCollapse'') - Нужно ли схлопывание (Ликвидация пустых столбцов);Можно перегрузить настройками уровня;
 
*'''Менять тип узла''' - Увеличить ли тип нормальной ячейки, если над ней произошла трансформация фишек.
 
*'''Менять тип узла''' - Увеличить ли тип нормальной ячейки, если над ней произошла трансформация фишек.
 
*'''Поддерживать число ходов''' - При осыпании фишек проверить поле на то, чтоб обязательно был возможный ход.
 
*'''Поддерживать число ходов''' - При осыпании фишек проверить поле на то, чтоб обязательно был возможный ход.
 
*'''Тащить фишку''' - Тащить первую фишку пометки за пальцем.
 
*'''Тащить фишку''' - Тащить первую фишку пометки за пальцем.
 
*'''Завершать пометку''' - Не ждать отпускания пальца для завершения пометки - актуально в тех случаях, когда в ней всегда одинаковое число фишек.
 
*'''Завершать пометку''' - Не ждать отпускания пальца для завершения пометки - актуально в тех случаях, когда в ней всегда одинаковое число фишек.
 
+
*'''Перемешивать при 0 ходов''' - если нет больше ходов на поле, да - поле перемешивать, нет - проигрыш.
  
 
=Перегруженные цели=
 
=Перегруженные цели=
Строка 58: Строка 59:
 
*'''Счетчик статических''' - Счетчик статических. Объект типа каунтер.
 
*'''Счетчик статических''' - Счетчик статических. Объект типа каунтер.
 
*'''Прогресс статических''' - Прогресс-бар статических. Объект типа progress.
 
*'''Прогресс статических''' - Прогресс-бар статических. Объект типа progress.
 
+
*'''стиль'''(''style'') - стиль фишек (перегрузка арта фишек; артом из файла уровня); Стиль указанный в настройках уровня перебьёт стиль объекта; Получается вот такой приоритет (Арт из объекта -> Стиль указанный в объекте -> Стиль указанный в уровне);
 +
*'''анимация рождения'''(''dropBorn'') - тип рождения фишек объектом (скалирование/падение сверху), может быть перегруженно файлом уровня;
 +
*'''бомбы''' - Прогресс-бар статических. Объект типа progress.
  
  
Строка 100: Строка 103:
 
=Звуки=
 
=Звуки=
 
*'''нажатие на фишку''' - Звук нажатия на фишку.
 
*'''нажатие на фишку''' - Звук нажатия на фишку.
 +
*'''добавление фишки в выделение''' - Звук при выделении фишки (режим dots); звук воспроизводится с 2-й фишки.
 
*'''перемещение фишки''' - Звук перемещения фищки.
 
*'''перемещение фишки''' - Звук перемещения фищки.
 
*'''возврат фишки''' - Звук возврата фищки при неудачном перемещении.
 
*'''возврат фишки''' - Звук возврата фищки при неудачном перемещении.
 
*'''падение фишки''' - Звук для падения фишки.
 
*'''падение фишки''' - Звук для падения фишки.
 +
*'''применение крестовой бомбы'''(''sndcross'') - звук при применении крестовой бомбы;
 +
*'''применение горизонтальной бомбы'''(''sndhor'') - звук при применении горизонтальной бомбы;
 +
*'''применение вертикальной бомбы'''(''sndver'') - звук при применении вертикальной бомбы.
  
 
+
=Специальные типы фишек=
 +
*'''nt_lock''' - графический ресурс фона при работающем "замке";
 +
*'''nt_lock_''' - графический ресурс поверх графики фишки при работающем "замке" (последовательность клипов через ","; первый клип д.б. задан, но он не используется; далее клипы по возрастанию жизни);
  
 
=Добавляемые свойства=
 
=Добавляемые свойства=
Строка 116: Строка 125:
 
===[[Файл:+.png]] Изменить состояние объекта - клик на одиночную===
 
===[[Файл:+.png]] Изменить состояние объекта - клик на одиночную===
 
- изменить состояние объекта в случае клика на одиночную ячейку: открывает машину в которой необходимо объекту "Коллапс" установить состояние "del_last"
 
- изменить состояние объекта в случае клика на одиночную ячейку: открывает машину в которой необходимо объекту "Коллапс" установить состояние "del_last"
 +
 +
===[[Файл:+.png]] Изменить состояние объекта - запланирована новая линия в аркаде===
 +
- изменить состояние объекта при старте отсчёта времени для генерации следующей линии в режиме Аркада (в объект пишется перечень фишек(nextLine), которые будут добавлены и время до их добавления (currentDt))
  
 
===[[Файл:+.png]] Звук фишки===
 
===[[Файл:+.png]] Звук фишки===
Строка 128: Строка 140:
 
===[[Файл:+.png]] Эффект===
 
===[[Файл:+.png]] Эффект===
 
- Объект, который будет вызываться при взрыве фишек. Должен иметь состояние beg.
 
- Объект, который будет вызываться при взрыве фишек. Должен иметь состояние beg.
 +
 +
===[[Файл:+.png]] Эффект бомбы===
 +
- Объект, который при взрыве фишек посредством бонуса бомба(цветная или обычная) будет склонирован и будет передано состояние "beg".
 +
Данному объекту будет записано параметры:
 +
*'''effectOriginX,effectOriginY''' - координаты бонуса, который вызвал схлопывание(в координатах объекта); Эффект самой бомбы (которая взорвалась) получает координаты (0;0);
 +
*'''additionalNum''' - номер фишки; (для удобства, бонусы смещены до 100 номера(первый бонус иммет номер 100(первая цветная бомба)));
 +
П.С. данный эффект генерируется только при взрыве бомбы из поля (бонусы запущенные через matchbattle - не создают эффект);
  
 
===[[Файл:+.png]] Эффект крестобомбы===
 
===[[Файл:+.png]] Эффект крестобомбы===
Строка 135: Строка 154:
 
*'''beg''' -                пауза перед open
 
*'''beg''' -                пауза перед open
 
*'''open''' -                появляется по alpha-каналу
 
*'''open''' -                появляется по alpha-каналу
 +
*'''start''' -              запустить новую игру (объект применяет все данные из лейаута + из файла уровней);
 +
*'''pause''' -            поставить объект на паузу ("заморозить объект");
 +
*'''resume''' -            снять объект с паузы ("разморозить объект");
  
 
*'''sel1''' -            ждем окончания первой пометки
 
*'''sel1''' -            ждем окончания первой пометки
Строка 157: Строка 179:
 
*'''shuffle_cols'''  
 
*'''shuffle_cols'''  
 
*'''remove_last''' -        удалить последнюю кликнутую ячейку (покупное удаление одиночных)
 
*'''remove_last''' -        удалить последнюю кликнутую ячейку (покупное удаление одиночных)
 +
 +
=Нумерация фишек объектом=
 +
Фишки которые использует объект, нумеруются от 0 до N. Данная нумерация зависит от количества цветов. Последовательность выглядит как:
 +
*'''0''' - обычная цветная фишка (рандомного цвета - при запуске игры изменится на цветную фишку в диапазоне [1,numTokenNums])
 +
*'''[1;n]''' - цветные фишки (n==numTokenNumsMax, максимальное количество цветов);
 +
*'''[n+1;n+n]''' - цветные бомбы;
 +
*'''n+n+1''' - обычная бомба;
 +
*'''n+n+2''' - горизонтальная бомба;
 +
*'''n+n+3''' - вертикальная бомба;
 +
*'''n+n+4''' - крестовая бомба;
 +
*'''n+n+5''' - ячейка-Хамелеон;
 +
 +
=Вычитаемые параметры=
 +
*'''tokenStyle''' - перечень основных клипов для фишек ("," -разделитель;клипы фишек "norm");
 +
*'''bombClips''' - перечень клипов бонусов (по порядку "нумерации фишек"; первый клип - первая цветная бомба);
 +
*'''nextLine''' - перечень номеров фишек следующего ряда для режима Аркада ("," - разделитель; все номера бонусов смещены и начинаются с 100 (для удобства чтения); т.е. первая цветная бомба имеет номер 100, дальше по порядку);
 +
*'''currentDt''' - время между генерациями следующего ряда(режим Аркада);
 +
*'''chameleonColors''' - номера цветных фишек, используемых для ячейки-Хамелеон;
 +
*'''level_cols''' - количество строчек поля текущего уровня;
 +
*'''level_rows''' - количество колонок поля текущего уровня;
 +
*'''lastMouseDnX,lastMouseDnY''' - координаты X,Y последнего нажатия мыши в координатах родительского объекта;
 +
*'''goal_any''' - текущее значение цели - выбить N фишек;
 +
*'''goal_lines''' - текущее значение цели - выжить N генераций линий(Аркада);
 +
*'''goal_locks''' - текущее значение цели - убрать N замков;
 +
*'''goal_num_%N%''' -  текущее значение цели - выбить m фишек N-го цвета (%N% - номер цвета фишки (нумерация с 0));
 +
*'''randomSize''' - размер "мешка" со случайными числами для досыпаний фишек. По умолчанию равен 100* на кол-во цветов фишек. Мешок генерируется в формате 0,1,2,0,1,2,0,1,2... затем перемешивается. Кастомный размер мешка не должен быть меньше, чем кол-во цветов фишек.
 +
*'''randomShuffles''' - число перемешиваний "мешка" для досыпаний. По умолчанию число перемешиваний равно размеру "мешка" (т.е. проходимся по каждой фишке и меняем ее с рандомной). Если кол-во перемешиваний меньше размера мешка, то игра усложнится (подсыпания приблизятся к последовательности 0,1,2,0,1,2... и будет сложнее матчить. Если кол-во перемешиваний = размеру мешка, то получаем полное перемешивание, т.е. абсолютно рандомную последовательность фишек. Ставить кол-во перемешиваний больше размера мешка нет смысла.
  
 
=Файл уровней=
 
=Файл уровней=
Строка 166: Строка 215:
  
 
==Структура файла==
 
==Структура файла==
<nowiki>
 
  <levels>
 
<!-- style -->
 
<style id="3">
 
<tokens norm="355"/>
 
<tokens norm="356"/>
 
</style>
 
 
<!-- levels -->
 
<level id="1" rows="2" cols="2" numTokenNums="2" >
 
<field>
 
0,0,
 
0,0
 
</field>
 
</level>
 
<level id="2" rows="2" cols="2" numTokenNums="2" >
 
<field>
 
0,0,
 
0,0
 
</field>
 
</level>
 
  </levels>
 
  
  Где <style> - стиль в котором перечисляем настройки фишек (resID);
+
<levels>
      <level> - один игровой уровень
+
      <!-- style -->
          <field> - стартовая настройка поля
+
      <style id="3">
</nowiki>
+
          <tokens norm="355"/>
 +
          <tokens norm="356"/>
 +
      </style>
 +
      <!-- levels -->
 +
      <level id="1" rows="2" cols="2" numTokenNums="2" >
 +
          <field>
 +
                0,0,
 +
                0,0
 +
          </field>
 +
      </level>
 +
      <level id="2" rows="2" cols="2" numTokenNums="2" >
 +
          <field>
 +
                0,0,
 +
                0,0
 +
          </field>
 +
      </level>
 +
</levels>
 +
 
 +
Где <style> - стиль в котором перечисляем настройки фишек (resID);
 +
    <level> - один игровой уровень
 +
        <field> - стартовая настройка поля
 +
 
  
 
==Поле==
 
==Поле==
Итак поле для объекта это строка которая имеет разделитель фишки "," при этом пробелы игнорируются.
+
Поле указывается в файле уровня:
Код каждой фишки может состоять от 1 до 5-ти символов "NTKXY".  
+
<level><field>NTKXY,NTKXY,NTKXY,NTKXY</field></level>
 +
 
 +
Поле объекта - это строка которая имеет разделитель фишек ","(пробелы,табуляции и символы переноса игнорируются).
 +
Код каждой фишки может состоять от 1-го до 5-ти символов ("NTKXY").  
 
Т.е. объект воспринимает поле как последовательность "NTKXY,NTKXY,NTKXY,NTKXY".  
 
Т.е. объект воспринимает поле как последовательность "NTKXY,NTKXY,NTKXY,NTKXY".  
  
 
Значение символов:
 
Значение символов:
 
*'''N''' - индекс фишки объекта ( стартует с "0");
 
*'''N''' - индекс фишки объекта ( стартует с "0");
**'''0''' - рандомная обычная фишка;
+
**'''0''' - рандомная цветная фишка (цвет получится в диапазоне [1;numTokenNums]);
**'''0-9''' - рандомная обычная фишка;
+
**'''[1;m]''' - цветная фишка;
 
**'''*''' - "дырка" (пустая ячейка) которая никогда не заполнится;
 
**'''*''' - "дырка" (пустая ячейка) которая никогда не заполнится;
 
**'''#''' - "разовая дырка" (пустая ячейка) которая может заполнится (для Аркады);
 
**'''#''' - "разовая дырка" (пустая ячейка) которая может заполнится (для Аркады);
 +
**'''B''' - маркер который говорит, что данная фишка является бомбой, номер бомбы указывается в следующем поле('''T'''):
 +
***'''0''' - цветная бомба 1-го цвета;
 +
***'''[1;m-1]''' - цветная бомба с 2-го по (m-1) цвета;
 +
***'''m''' - обычная бомба (взрывает всё в радиусе);
 +
**'''Z''' - маркер который говорит, что данная фишка является бонусом, после цветных бомб, номер бомбы указывается в следующем поле ('''T'''):
 +
***'''0''' - обычная бомба (взрывает всё в радиусе);
 +
***'''1''' - горизонтальная бомба;
 +
***'''2''' - вертикальная бомба;
 +
***'''3''' - крестовая бомба;
 +
***'''4''' - ячейка-Хамелеон;
 +
*'''T''' - используется как дополнительное поле, для поля предыдущего поля ('''N''');
 +
*'''K''' - покраска фона (фон имеет жизнь, и при каждом матчинге, уменьшает её, при этом меняет меняется клип):
 +
**'''0''' - нет покраски;
 +
*'''X''' - специальный функционал:
 +
**'''0''' - обычная ячейка;
 +
**'''Z''' - замок с жизнью(ячейка залочена, не даём на неё нажимать если есть жизнь), при каждом матчинге жизнь уменьшается, количество жизней задаётся параметром '''Y'''(если параметр не указан, считаем == 1):
 +
***'''0''' - нет жизни (но смысла в этом мало);
 +
***'''[1;n]''' - количество жизней;
 +
*'''Y''' - используется как дополнительное поле, для поля '''X''';
  
 
==Цели==
 
==Цели==
Строка 213: Строка 283:
 
*'''goalTokens''' - выбить N фишек конкретного цвета (последовательность через запятую для каждого нужного цвета); Объект пишет N параметров в себя '''goal_num_%N%''', где %N% - номер фишки (нумерация с 0);Важно задавать количество цветов '''numTokenNums''' не меньшим чем количество целей - иначе уровень нельзя будет пройти;
 
*'''goalTokens''' - выбить N фишек конкретного цвета (последовательность через запятую для каждого нужного цвета); Объект пишет N параметров в себя '''goal_num_%N%''', где %N% - номер фишки (нумерация с 0);Важно задавать количество цветов '''numTokenNums''' не меньшим чем количество целей - иначе уровень нельзя будет пройти;
  
==Параметры==
+
==Основные параметры==
 
*'''id''' - id уровня (объект возьмёт первый уровень который совпадёт по id);
 
*'''id''' - id уровня (объект возьмёт первый уровень который совпадёт по id);
 
*'''cols''' - высота поля;
 
*'''cols''' - высота поля;
 
*'''rows''' - ширина поля;
 
*'''rows''' - ширина поля;
 
*'''numTokenNums''' - количество цветов которые будет генерировать объект(если у вас режим дотсы - будьте бдительны, статическая фишка тоже считается цветом, и по-умолчанию она будет первой фишкой);
 
*'''numTokenNums''' - количество цветов которые будет генерировать объект(если у вас режим дотсы - будьте бдительны, статическая фишка тоже считается цветом, и по-умолчанию она будет первой фишкой);
 +
 +
==Дополнительные параметры==
 
*'''needCollapse''' - схлопывание фишек при пустой вертикальной линии;
 
*'''needCollapse''' - схлопывание фишек при пустой вертикальной линии;
 
*'''needBirth''' - досыпание фишек (для аркады можно не указывать);
 
*'''needBirth''' - досыпание фишек (для аркады можно не указывать);
 
*'''style''' - id стиля, применит указанный стиль (применит настройки фишек из стиля и запишет в себя строку '''tokenStyle''' (resID фишек через запятую));
 
*'''style''' - id стиля, применит указанный стиль (применит настройки фишек из стиля и запишет в себя строку '''tokenStyle''' (resID фишек через запятую));
 +
 +
==Бонусы==
 +
===Бонус Хамелеон===
 +
Ячейка Хамелеон - это цветная фишка, которая периодически меняет свой цвет. Настраивается параметрами:
 
*'''chameleonTime''' - время изменения фишки-Хамелеон (у объекта параметр '''currentDt''');
 
*'''chameleonTime''' - время изменения фишки-Хамелеон (у объекта параметр '''currentDt''');
 
*'''chameleonColors''' - перечень цветов, которые будет менять фишка-Хамелеон (у объекта параметр '''chameleonColors''');
 
*'''chameleonColors''' - перечень цветов, которые будет менять фишка-Хамелеон (у объекта параметр '''chameleonColors''');
  
==Бонусы==
+
===Стартовая генерация бонусов===
 +
Для того чтобы стартово на поле были бонусы (рандомное место положение), мы указываем следующие настройки:
 +
startBomb'''N'''="'''4'''";
 +
где '''N''' - номер бонуса ( нумерация с "0"(первая цветная бомба));
 +
    '''4''' - требуемое количество;
 +
 
 +
===Генерация бонусов при досыпании===
 +
Для уровней с досыпанием (режим аркада, тоже считается с досыпанием), мы можем указать перечень бонусов и вероятность их генерации:
 +
*'''bombProbArray''' - перечень бонусов через ","(нумерация с "0"(первая цветная бомба));
 +
*'''bombProb''' - общая вероятность генерации бонусов (бонус будет выбран из списка '''bombProbArray''' рандомно);
  
  
Строка 240: Строка 325:
  
 
[[Category:Game mechanic]]
 
[[Category:Game mechanic]]
 +
 +
 +
=Создание простейшего коллапса (классика)=
 +
 +
Коллапс - самостоятельный обьект, и для создания простейшего коллапса не нужно никаких дополнительных обьектов. Создайте новый проект, и на сцену поместите пустой обьект, измените тип на коллапс.
 +
 +
[[Файл:Tree.JPG]]
 +
 +
Графику для игры коллапс можно скачать здесь: [[Media:Fishki.rar]]
 +
 +
Установите правила игры коллапс.
 +
 +
[[Файл:Коллапс.png]]
 +
 +
Сначала стоит рассчитать размеры поля. При создании обычного коллапса поле делают квадратным, а сверху добавляют еще один ряд для статических обьектов. Соответственно, размерность коллапса составит х*(х+1). Размер поля в пикселях должен соответствовать размеру фишки, умноженной на количество строк/столбцов.
 +
Создадим поле размером 12х13. Размеры нашей фишки в пикселях составляют 58х58, соответственно, размер нашего поля в пикслях составит 696*754.
 +
 +
[[Файл:Size.JPG]]
 +
[[Файл:Size2.JPG]]
 +
 +
Устанавливаем параметр "авторазмер" - авто.
 +
 +
'''ОБРАТИТЕ ВНИМАНИЕ: Не надо загружать текстуры фишек в поле "фишки" во внешнем виде! Это делается отдельно в добавляемом свойстве "Графика фишки" отдельно для каждой фишки'''
 +
 +
[[Файл:Grafika_fishki.JPG]]
 +
 +
Добавьте графику для ваших фишек (один цвет - одна фишка), а также графику для статической фишки (которая будет находиться в верхнем ряду).
 +
 +
== Перегрузка правил ==
 +
 +
Теперь перегрузим правила для коллапса классического. Так как обьект collapse многоцелевой и с его помощью можно сделать несколько различных миниигр, мы установим правила, нужные для классического коллапса.
 +
 +
[[Файл:Rules_classic.JPG]]
 +
 +
Разберем поподробнее некоторые установленные параметры:
 +
 +
* перегрузка - да
 +
:- для перегрузки правил необходимо уставить этот флаг;
 +
* номеров в фишках - 5
 +
:- это количество цветов и статических фишек, что у нас есть
 +
* номер бомбы/крестобомбы - -1
 +
:- будьте внимательны - изначально это значение стоит на 0, изза этого первый цветной блок у вас будет считаться бомбой, и при клике уничтожать все фишки своего цвета!
 +
:- ''в классическом коллапсе вообще не используются бомбы''
 +
* статический номер - 0
 +
:- это номер фишки, которая будет лежать на самом верхнем ряду, и которые надо опустить вниз
 +
'''Все, что касается пометки, не требуется для классического коллапса, так как в нем не нужно отмечать фишки.'''
 +
 +
При установке номеров фишек для бомб и статических учтите, как нумеруется графика фишек.
 +
 +
[[Файл:Graphics_num.JPG]]
 +
 +
Самый верхний добавленный ресурс будет иметь номер 0, следующий за ним - 1 и далее по возрастанию.
 +
 +
Перегрузим также и условия победы в нашей игре:
 +
 +
[[Файл:Celi.JPG]]
 +
 +
Так как условие победы в нашей игре - опустить все статические фишки на дно, то это мы и отметим, как цель игры.
 +
Обрабочтик победы добавляется так же, как и фишки - с помощью создания нового свойства:
 +
 +
[[Файл:Win.JPG]]
 +
 +
== Внешний вид ==
 +
 +
Настроим внешний вид нашей игры.
 +
 +
[[Файл:Vneshniy.JPG]]
 +
 +
Некоторые параметры мы уже рассмотрели, немного об остальных:
 +
* сетка? - работает по каким-то собственным алгоритмам, поэтому иногда выглядит странно, можно ее просто не показывать
 +
* таймер - подключает таймер (можно установить ограничения по времени для решения коллапса)
 +
* счетчик статических - подключаем счетчик, который ведет учет статических элементов, которые еще не опущены ко дну коллапса
 +
* бомбы - в классическом коллапсе не используются
 +
 +
Со временами всяких анимаций и появлений можете поэксперементировать сами или использовать вот эти:
 +
 +
[[Файл:Vremena.JPG]]
 +
 +
При генерации коллапс устанавливает блоки одинаковых фишек рядом, подчиняясь этим правилам:
 +
 +
[[Файл:Generation.JPG]]
 +
 +
Запустим получившуюся игру:
 +
 +
[[Файл:Game.JPG]]
 +
 +
Более глубокие механики и условия попробуйте проработать сами с помощью машин, меняйте состояния для коллапса с помощью кнопок и создавайте красивые игры!

Текущая версия на 07:39, 5 октября 2020

Объект «Collapse» дает возможность организовать ряд игр, основанных на 3х "модах".
Все эти механики являются играми на поле, основой, которого является регулярная решетка. Игра происходит при помощи фишек, расположенных в ячейках поля.

27-12-2013 14-15-18.png
27-12-2013 16-18-35.png


Содержание

Свойства

Общие параметры

  • Слушатель - Объект типа matchbattle.
  • Время партии - Время игры. По окончанию которого будет засчитано поражение.


Перегруженные правила

  • Типов фишек - Число разновидностей типов фишек.
  • Номер в фишках(numTokenNums) - Число номеров в фишках которые (для текущего уровня). Включая статические.
  • макс. номеров в фишках(numTokenNumsMax) - Максимальное число номеров в фишках. Включая статические.
  • Номер бомбы - Номер фишки, который соответствует бомбе. Не будет генерироваться сам по себе.
  • Номер крестобомбы - Номер фишки, который соответствует крестобомбе, не будет генерироваться сам по себе.
  • Статический номер - Номер фишки, которую нельзя добавить к пометке. Используется, например, для игры, в которой необходимо спустить статические объекты вниз, очистив при этом поле.
  • Типов узлов - Число разновидностей типов нормальных узлов графа.
  • Условия пометки - Условия для вхождения фишек в пометку. 0 - любые фишки, 1 - должен совпадать номер, 2 - должен совпадать цвет, 3 - должен совпадать номер и цвет фишек.
  • Монотонность - Должны ли номера в первой пометке быть монотонной последовательностью.
  • Мин.пометка - Минимальное число фишек помечаемых в первой пометке.
  • Макс.пометка - Максимальное число фишек помечаемых в первой пометке.
  • Время пометки - Пометка завершается спустя заданное в этом поле время.
  • Переставлять - Фишки первой пометки переставляются.
  • Уменьшать - Фишки первой пометки уменьшают свой номер.
  • Удалять - Удалять ячейки первой пометки.
  • Условие удаления - Условия для удаления фишек: 0 - не удалять, 1 - должен совпадать тип, 2 - должен совпадать номер, 3 - должен совпадать тип ИЛИ номер, 4 - должен совпадать тип И номер.
  • Тип удаления - Тип удаления. 0 - заливка, 1 - вертикальные и горизонтальные линии, 2 - только сама пометка.
  • Мин.удаление - Минимальное число фишек, которое можно удалить.
  • Генерация без мачей - При генерации поля избегать готовых совпадений.
  • Проверка после осыпания - После осыпания фишек ещё раз перепроверить возможные комбинации ходов.
  • Добавление(needBirth) - Нужно ли добавлять фишки на поле. Или игра на разбор; Можно перегрузить настройками уровня (результирующее значение будет в парамметре "needBirthLevel");
  • Схлопывание(needCollapse) - Нужно ли схлопывание (Ликвидация пустых столбцов);Можно перегрузить настройками уровня;
  • Менять тип узла - Увеличить ли тип нормальной ячейки, если над ней произошла трансформация фишек.
  • Поддерживать число ходов - При осыпании фишек проверить поле на то, чтоб обязательно был возможный ход.
  • Тащить фишку - Тащить первую фишку пометки за пальцем.
  • Завершать пометку - Не ждать отпускания пальца для завершения пометки - актуально в тех случаях, когда в ней всегда одинаковое число фишек.
  • Перемешивать при 0 ходов - если нет больше ходов на поле, да - поле перемешивать, нет - проигрыш.

Перегруженные цели

  • Очистить поле - Уничтожить соотв. % фишек. Не стоит комбинировать с досыпанием.
  • Перекрасить поле - Перекрасить все ячейки поля в базовый тип.
  • Уронить статические - Уронить все статические фишки на дно поля.
  • Уничтожить фишек - Уничтожить фишек, количество через запятую.


Внешний вид

  • Картинка - Графический ресурс картинки пазла.
  • Фишки - Не рекомендуется использовать. Заменено на добавляемые параметр, см.ниже.
  • Ячейки - Графический ресурс ячейки.
  • Курсор - Курсор для выделения фишек.
  • Колонок - Число колонок на которые разбивается пазл.
  • Строк - Число строк на которые разбивается пазл.
  • Авторазмер - Если 1, то для расчета размера ячеек используется картинка. 0 - размер ячейки = размер паззла / число ячеек
  • Сетка? - Если 1, то будет показана сетка при разрезке картинки на блоки. При 0 - сетки не будет.
  • Счетчик статических - Счетчик статических. Объект типа каунтер.
  • Прогресс статических - Прогресс-бар статических. Объект типа progress.
  • стиль(style) - стиль фишек (перегрузка арта фишек; артом из файла уровня); Стиль указанный в настройках уровня перебьёт стиль объекта; Получается вот такой приоритет (Арт из объекта -> Стиль указанный в объекте -> Стиль указанный в уровне);
  • анимация рождения(dropBorn) - тип рождения фишек объектом (скалирование/падение сверху), может быть перегруженно файлом уровня;
  • бомбы - Прогресс-бар статических. Объект типа progress.


Времена этапов

  • невидимости - Начальная пауза перед откртыием пазлы.
  • открытия - Время открытия исходной картинки (проявляется по alpha).
  • показа - Время показа исходной картинки (после проявления).
  • перемешивания - Время визуализации процесса перемешивания ячеек.
  • финала - Время финального показа пазлы после её разбора, перед переходом к закрытию.
  • закрытия - Время закрытия пазлы (в состояниия close, исчезает по alpha).


Времена игры

  • перестановки - Время перестановки двух ячеек местами при их выборе.
  • движения - Время движения фишек от одного узла к соседнему.
  • движения верх - Время движения фишек от одного узла к соседнему при отскоке.
  • отскока - Время движения фишек вверх при отскоке. Т.о. при дефолтных значениях фишка отскакивает на 200 / 600 треть высоты фишки"
  • рождения и удаления - Время рождения и удаления фишки.
  • поворота - Время поворота ячейки при повторном клике на нее.
  • паузы - Время паузы перед началом перестановки или поворота.
  • подсказки1 - Время за которое проявляется исходная картинка в состоянии hint.
  • подсказки2 - Время в течении которого показывается после проявления исходная картинка в состоянии hint.
  • подсказки3 - Время в течении которого закрывается после показа исходная картинка в состоянии hint.


Хинт при бездействии

  • время задержки - Время бездействия, после которого следует показывать хинт.
  • машина - Объект, который будет установлен между двумя фишками.


Генерация поля

  • min размер кластера - min размер кластера из фишек одного типа
  • max размер кластера - max размер кластера из фишек одного типа


Звуки

  • нажатие на фишку - Звук нажатия на фишку.
  • добавление фишки в выделение - Звук при выделении фишки (режим dots); звук воспроизводится с 2-й фишки.
  • перемещение фишки - Звук перемещения фищки.
  • возврат фишки - Звук возврата фищки при неудачном перемещении.
  • падение фишки - Звук для падения фишки.
  • применение крестовой бомбы(sndcross) - звук при применении крестовой бомбы;
  • применение горизонтальной бомбы(sndhor) - звук при применении горизонтальной бомбы;
  • применение вертикальной бомбы(sndver) - звук при применении вертикальной бомбы.

Специальные типы фишек

  • nt_lock - графический ресурс фона при работающем "замке";
  • nt_lock_ - графический ресурс поверх графики фишки при работающем "замке" (последовательность клипов через ","; первый клип д.б. задан, но он не используется; далее клипы по возрастанию жизни);

Добавляемые свойства

+.png Изменить состояние / параметр объекта - выигрыш

- изменить состояние / параметр объекта в случае выигрыша.

+.png Изменить состояние / параметр объекта - проигрыш

- изменить состояние / параметр объекта в случае проигрыша

+.png Изменить состояние объекта - клик на одиночную

- изменить состояние объекта в случае клика на одиночную ячейку: открывает машину в которой необходимо объекту "Коллапс" установить состояние "del_last"

+.png Изменить состояние объекта - запланирована новая линия в аркаде

- изменить состояние объекта при старте отсчёта времени для генерации следующей линии в режиме Аркада (в объект пишется перечень фишек(nextLine), которые будут добавлены и время до их добавления (currentDt))

+.png Звук фишки

- Удаление, появление.

+.png Уровень сложности

- Номеров в фишках, Мин.размер кластера и Макс.размер кластера.

+.png Графика фишки

- Обычная: графический ресурс перетаскивается из редактора ресурсов.

+.png Эффект

- Объект, который будет вызываться при взрыве фишек. Должен иметь состояние beg.

+.png Эффект бомбы

- Объект, который при взрыве фишек посредством бонуса бомба(цветная или обычная) будет склонирован и будет передано состояние "beg". Данному объекту будет записано параметры:

  • effectOriginX,effectOriginY - координаты бонуса, который вызвал схлопывание(в координатах объекта); Эффект самой бомбы (которая взорвалась) получает координаты (0;0);
  • additionalNum - номер фишки; (для удобства, бонусы смещены до 100 номера(первый бонус иммет номер 100(первая цветная бомба)));

П.С. данный эффект генерируется только при взрыве бомбы из поля (бонусы запущенные через matchbattle - не создают эффект);

+.png Эффект крестобомбы

- Эффект, который будет использоваться при взрыве крестобомбы. Должен иметь состояние beg.

Состояния

  • beg - пауза перед open
  • open - появляется по alpha-каналу
  • start - запустить новую игру (объект применяет все данные из лейаута + из файла уровней);
  • pause - поставить объект на паузу ("заморозить объект");
  • resume - снять объект с паузы ("разморозить объект");
  • sel1 - ждем окончания первой пометки
  • sel1_end - показываем окончание первой пометки
  • sel1_transf1 - первая трансформация первой пометки
  • sel1_transf2 - вторая трансформация первой пометки
  • sel2 - ждем окончания второй пометки
  • sel2_end - показываем окончание второй пометки
  • sel2_trands1 - первая трансформация второй пометки
  • sel2_trands2 - вторая трансформация второй пометки
  • born - рождение фишек
  • move - перемещаем фишки
  • aftermatch - проверяем, не случилось ли чего-то после движения/добавления фишек
  • close - исчезает по alpha-каналу
  • end - недоступна, невидима
  • rotate_left - повернуть влево на 90 градусов
  • rotate_right - повернуть вправо на 90 градусов
  • undo - отменить один ход
  • remove_color
  • remove_single
  • shuffle_cols
  • remove_last - удалить последнюю кликнутую ячейку (покупное удаление одиночных)

Нумерация фишек объектом

Фишки которые использует объект, нумеруются от 0 до N. Данная нумерация зависит от количества цветов. Последовательность выглядит как:

  • 0 - обычная цветная фишка (рандомного цвета - при запуске игры изменится на цветную фишку в диапазоне [1,numTokenNums])
  • [1;n] - цветные фишки (n==numTokenNumsMax, максимальное количество цветов);
  • [n+1;n+n] - цветные бомбы;
  • n+n+1 - обычная бомба;
  • n+n+2 - горизонтальная бомба;
  • n+n+3 - вертикальная бомба;
  • n+n+4 - крестовая бомба;
  • n+n+5 - ячейка-Хамелеон;

Вычитаемые параметры

  • tokenStyle - перечень основных клипов для фишек ("," -разделитель;клипы фишек "norm");
  • bombClips - перечень клипов бонусов (по порядку "нумерации фишек"; первый клип - первая цветная бомба);
  • nextLine - перечень номеров фишек следующего ряда для режима Аркада ("," - разделитель; все номера бонусов смещены и начинаются с 100 (для удобства чтения); т.е. первая цветная бомба имеет номер 100, дальше по порядку);
  • currentDt - время между генерациями следующего ряда(режим Аркада);
  • chameleonColors - номера цветных фишек, используемых для ячейки-Хамелеон;
  • level_cols - количество строчек поля текущего уровня;
  • level_rows - количество колонок поля текущего уровня;
  • lastMouseDnX,lastMouseDnY - координаты X,Y последнего нажатия мыши в координатах родительского объекта;
  • goal_any - текущее значение цели - выбить N фишек;
  • goal_lines - текущее значение цели - выжить N генераций линий(Аркада);
  • goal_locks - текущее значение цели - убрать N замков;
  • goal_num_%N% - текущее значение цели - выбить m фишек N-го цвета (%N% - номер цвета фишки (нумерация с 0));
  • randomSize - размер "мешка" со случайными числами для досыпаний фишек. По умолчанию равен 100* на кол-во цветов фишек. Мешок генерируется в формате 0,1,2,0,1,2,0,1,2... затем перемешивается. Кастомный размер мешка не должен быть меньше, чем кол-во цветов фишек.
  • randomShuffles - число перемешиваний "мешка" для досыпаний. По умолчанию число перемешиваний равно размеру "мешка" (т.е. проходимся по каждой фишке и меняем ее с рандомной). Если кол-во перемешиваний меньше размера мешка, то игра усложнится (подсыпания приблизятся к последовательности 0,1,2,0,1,2... и будет сложнее матчить. Если кол-во перемешиваний = размеру мешка, то получаем полное перемешивание, т.е. абсолютно рандомную последовательность фишек. Ставить кол-во перемешиваний больше размера мешка нет смысла.

Файл уровней

Объект умеет загружать настройки из файла уровней, для этих целей у объекта должны быть заданы:

  • файл уровня(levelFile) - путь к xml файлу уровней;
  • номер уровня(levelNum) - id уровня из файла уровней;

На текущий момент объект вычитывает уровень из файла только при старте, т.е. чтобы сменить уровень нужно или сменить экран или проинитить сцену с коллапсом.

Структура файла

<levels>
     <style id="3">
          <tokens norm="355"/>
          <tokens norm="356"/>
     </style>
     <level id="1" rows="2" cols="2" numTokenNums="2" >
          <field>
               0,0,
               0,0
          </field>
     </level>
     <level id="2" rows="2" cols="2" numTokenNums="2" >
          <field>
               0,0,
               0,0
          </field>
     </level>
</levels>
Где <style> - стиль в котором перечисляем настройки фишек (resID);
    <level> - один игровой уровень
        <field> - стартовая настройка поля


Поле

Поле указывается в файле уровня:

<level><field>NTKXY,NTKXY,NTKXY,NTKXY</field></level>

Поле объекта - это строка которая имеет разделитель фишек ","(пробелы,табуляции и символы переноса игнорируются). Код каждой фишки может состоять от 1-го до 5-ти символов ("NTKXY"). Т.е. объект воспринимает поле как последовательность "NTKXY,NTKXY,NTKXY,NTKXY".

Значение символов:

  • N - индекс фишки объекта ( стартует с "0");
    • 0 - рандомная цветная фишка (цвет получится в диапазоне [1;numTokenNums]);
    • [1;m] - цветная фишка;
    • * - "дырка" (пустая ячейка) которая никогда не заполнится;
    • # - "разовая дырка" (пустая ячейка) которая может заполнится (для Аркады);
    • B - маркер который говорит, что данная фишка является бомбой, номер бомбы указывается в следующем поле(T):
      • 0 - цветная бомба 1-го цвета;
      • [1;m-1] - цветная бомба с 2-го по (m-1) цвета;
      • m - обычная бомба (взрывает всё в радиусе);
    • Z - маркер который говорит, что данная фишка является бонусом, после цветных бомб, номер бомбы указывается в следующем поле (T):
      • 0 - обычная бомба (взрывает всё в радиусе);
      • 1 - горизонтальная бомба;
      • 2 - вертикальная бомба;
      • 3 - крестовая бомба;
      • 4 - ячейка-Хамелеон;
  • T - используется как дополнительное поле, для поля предыдущего поля (N);
  • K - покраска фона (фон имеет жизнь, и при каждом матчинге, уменьшает её, при этом меняет меняется клип):
    • 0 - нет покраски;
  • X - специальный функционал:
    • 0 - обычная ячейка;
    • Z - замок с жизнью(ячейка залочена, не даём на неё нажимать если есть жизнь), при каждом матчинге жизнь уменьшается, количество жизней задаётся параметром Y(если параметр не указан, считаем == 1):
      • 0 - нет жизни (но смысла в этом мало);
      • [1;n] - количество жизней;
  • Y - используется как дополнительное поле, для поля X;

Цели

Важно указать в самом объекте флаг "перегрузка целей"(override_goal) и зануляем все параметры в теге "перегруженные цели" - чтобы не добавлялись цели которые нам не нужны (уронить статические, очистить поле).

  • goalAny - выбить N фишек (у объекте параметр goal_any);
  • goalLines - выжить N генераций линий, для Аркады (у объекта параметр goal_lines);
  • goalLocks - убрать N замков (у объекта параметр goal_locks);
  • goalTokens - выбить N фишек конкретного цвета (последовательность через запятую для каждого нужного цвета); Объект пишет N параметров в себя goal_num_%N%, где %N% - номер фишки (нумерация с 0);Важно задавать количество цветов numTokenNums не меньшим чем количество целей - иначе уровень нельзя будет пройти;

Основные параметры

  • id - id уровня (объект возьмёт первый уровень который совпадёт по id);
  • cols - высота поля;
  • rows - ширина поля;
  • numTokenNums - количество цветов которые будет генерировать объект(если у вас режим дотсы - будьте бдительны, статическая фишка тоже считается цветом, и по-умолчанию она будет первой фишкой);

Дополнительные параметры

  • needCollapse - схлопывание фишек при пустой вертикальной линии;
  • needBirth - досыпание фишек (для аркады можно не указывать);
  • style - id стиля, применит указанный стиль (применит настройки фишек из стиля и запишет в себя строку tokenStyle (resID фишек через запятую));

Бонусы

Бонус Хамелеон

Ячейка Хамелеон - это цветная фишка, которая периодически меняет свой цвет. Настраивается параметрами:

  • chameleonTime - время изменения фишки-Хамелеон (у объекта параметр currentDt);
  • chameleonColors - перечень цветов, которые будет менять фишка-Хамелеон (у объекта параметр chameleonColors);

Стартовая генерация бонусов

Для того чтобы стартово на поле были бонусы (рандомное место положение), мы указываем следующие настройки: startBombN="4";

где N - номер бонуса ( нумерация с "0"(первая цветная бомба));
    4 - требуемое количество;

Генерация бонусов при досыпании

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

  • bombProbArray - перечень бонусов через ","(нумерация с "0"(первая цветная бомба));
  • bombProb - общая вероятность генерации бонусов (бонус будет выбран из списка bombProbArray рандомно);


Аркада

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

  • dt0 - если больше 0 - включается режим аркады;
  • n - количество линий через которое время уменьшиться на множитель;
  • mult - множитель на которое уменьшиться время;

При работе режима, объект записывает строку (nextLine) в которой указан добавляемый ряд (цифры эквиваленты индексу фишки) и пинает обработчик - "запланирована новая линия в аркаде".

Пример

S:\!MOBILE\!!!EditorGames\Wiki_sample\test_collaps.zip


Создание простейшего коллапса (классика)

Коллапс - самостоятельный обьект, и для создания простейшего коллапса не нужно никаких дополнительных обьектов. Создайте новый проект, и на сцену поместите пустой обьект, измените тип на коллапс.

Tree.JPG

Графику для игры коллапс можно скачать здесь: Media:Fishki.rar

Установите правила игры коллапс.

Коллапс.png

Сначала стоит рассчитать размеры поля. При создании обычного коллапса поле делают квадратным, а сверху добавляют еще один ряд для статических обьектов. Соответственно, размерность коллапса составит х*(х+1). Размер поля в пикселях должен соответствовать размеру фишки, умноженной на количество строк/столбцов. Создадим поле размером 12х13. Размеры нашей фишки в пикселях составляют 58х58, соответственно, размер нашего поля в пикслях составит 696*754.

Size.JPG Size2.JPG

Устанавливаем параметр "авторазмер" - авто.

ОБРАТИТЕ ВНИМАНИЕ: Не надо загружать текстуры фишек в поле "фишки" во внешнем виде! Это делается отдельно в добавляемом свойстве "Графика фишки" отдельно для каждой фишки

Grafika fishki.JPG

Добавьте графику для ваших фишек (один цвет - одна фишка), а также графику для статической фишки (которая будет находиться в верхнем ряду).

Перегрузка правил

Теперь перегрузим правила для коллапса классического. Так как обьект collapse многоцелевой и с его помощью можно сделать несколько различных миниигр, мы установим правила, нужные для классического коллапса.

Rules classic.JPG

Разберем поподробнее некоторые установленные параметры:

  • перегрузка - да
- для перегрузки правил необходимо уставить этот флаг;
  • номеров в фишках - 5
- это количество цветов и статических фишек, что у нас есть
  • номер бомбы/крестобомбы - -1
- будьте внимательны - изначально это значение стоит на 0, изза этого первый цветной блок у вас будет считаться бомбой, и при клике уничтожать все фишки своего цвета!
- в классическом коллапсе вообще не используются бомбы
  • статический номер - 0
- это номер фишки, которая будет лежать на самом верхнем ряду, и которые надо опустить вниз

Все, что касается пометки, не требуется для классического коллапса, так как в нем не нужно отмечать фишки.

При установке номеров фишек для бомб и статических учтите, как нумеруется графика фишек.

Graphics num.JPG

Самый верхний добавленный ресурс будет иметь номер 0, следующий за ним - 1 и далее по возрастанию.

Перегрузим также и условия победы в нашей игре:

Celi.JPG

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

Win.JPG

Внешний вид

Настроим внешний вид нашей игры.

Vneshniy.JPG

Некоторые параметры мы уже рассмотрели, немного об остальных:

  • сетка? - работает по каким-то собственным алгоритмам, поэтому иногда выглядит странно, можно ее просто не показывать
  • таймер - подключает таймер (можно установить ограничения по времени для решения коллапса)
  • счетчик статических - подключаем счетчик, который ведет учет статических элементов, которые еще не опущены ко дну коллапса
  • бомбы - в классическом коллапсе не используются

Со временами всяких анимаций и появлений можете поэксперементировать сами или использовать вот эти:

Vremena.JPG

При генерации коллапс устанавливает блоки одинаковых фишек рядом, подчиняясь этим правилам:

Generation.JPG

Запустим получившуюся игру:

Game.JPG

Более глубокие механики и условия попробуйте проработать сами с помощью машин, меняйте состояния для коллапса с помощью кнопок и создавайте красивые игры!