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

Материал из wiki.appsalutecreator.com
Перейти к: навигация, поиск
(Get Started)
 
(не показано 30 промежуточных версий 8 участников)
Строка 1: Строка 1:
 +
{{TOC right}}
 +
'''Memory''' - [[Object|объект]] редактора, который реализует игровую механику "memory" - поиск одинаковых объектов. Имеет основные параметры [[Object|объекта]], но в memory нельзя помещать другие объекты - они при этом некорректно работают.
  
== объект memory ==
+
== Get Started ==
Объект игр "поиск одинаковых объектов".
+
Нам потребуется 1 картинка для "рубашки" и два набора по 6 картинок для игры
 +
;Начнём:
 +
# откроем [[Интерфейс_ScenceEditor|редактор сцен]] и создадим новый проект,
 +
# добавим новый экран с именем ''scrMemory''
 +
# создадим в этом экране сцену ''stgMemory''
 +
# перейдём в [[Интерфейс_ResourceEditor|редактор ресурсов]]
 +
## создаём папку ''memo''
 +
## добавим в ней картинку  для "рубашки" - назовём её ''cardback''
 +
## добавим там же анимацию (6 картинок)  - ''cardpict''
 +
## также добавим анимацию (6 картинок)  - ''cardkey''
 +
## закроем редактор ресурсов
 +
# перейдём в редактор сцен.
 +
# создадим в сцене stgMemory объект '''Memory'''
 +
# установим в нём свойство '''время открытия''' в ''500''
 +
# установим свойство '''время закрытия''' в ''1000''
 +
# установим свойство '''анимация картинок''' в ''поворот по горизонтали''
 +
# добавим (по правой кнопке мыши) свойство '''игрок'''
 +
# добавим свойство '''memoClassic параметры'''
 +
## в свойстве '''memoClassic параметры''' изменим параметр '''подтип''' на значение ''картинка-ключ''
 +
## выделим параметр '''подложки''' и перетащим на него из редактора ресурсов картинку  ''cardback''
 +
## выделим параметр '''легкие картинки''' и перетащим из редактора ресурсов анимацию  ''cardpict''
 +
## выделим параметр '''ключи''' и перетащим из редактора ресурсов анимацию  ''cardkey''
 +
# сохраним проект
 +
# запустим [[Интерфейс_Viewer|вьювер]]
  
'''Основные свойства:'''
+
=='''Основные свойства:'''==
 +
 +
[[Файл:Memory1.png]]
 +
===Размер поля===
 +
*''w''  - Ширина объекта в пикселях.
 +
*''h'' - Высота объекта в пикселях.
 +
*''Строки'' '''(rows)''' - число ячеек по вертикали.
 +
*''Столбцы'' '''(cols)''' - число ячеек по горизонтали.
  
[[Файл:Mem1.jpg]]
+
==='''Звуки'''===
 +
*''Удачный клик'' '''(sndClick)''' - клик на закрытую нерешенную ячейку.
 +
*''Неудачный клик'' '''(sndMissClick)''' - неудачный клик (картинка решенная или анимируется).
 +
*''Разбор узла'' '''(sndNode)''' - разобрали узел.
 +
*''Удачный разбор игры'' '''(sndWinGame)''' - удачный разбор игры.
 +
*''Неудачный разбор игры'' '''(sndLoseGame)''' - неудачный разбор игры.
 +
 +
===Дополнительные настройки===
 +
*''Отступ(x)'' '''(indentX)''' - отступ между картинками по горизонтали.
 +
*''Отступ (y)'' '''(indentY)''' - отступ между картинками по вертикали.
 +
*''Время открытия'' '''(tmOpening)''' - время открытия картинки.
 +
*''Время закрытия'' '''(tmClosing)''' - время закрытия картинки.
 +
*''Анимация картинок'' '''(animType)''' тип анимирования картинок:
 +
** скалирование=0,
 +
** переворот по горизонтали=1,
 +
** переворот по вертикали=2,
 +
** проявление по альфе=3.
 +
** подлет=4
 +
 +
==='''Файл уровней'''===
 +
*''Имя файла'' '''(lvlfile)''' - Файл-описание уровня.
 +
*''Номер уровня'' '''(lvlnum)''' - Номер уровня в файле.
 +
 +
==='''Параметры колебаний'''===
 +
*''Амплитуда''  '''(osc_a)'''  - начальная амплитуда.
 +
*''Время''  '''(osc_time)''' - время колебания ячейки после открытия.
 +
*''Количество'' '''(osc_num)''' - количество колебаний.
 +
*''Затухание'' '''(osc_beta)''', параметр beta уравнения x(t) = a0 * exp(-beta * t) * cos(omega * t + alpha) - чем больше, тем быстрее уменьшается амплитуда колебаний.
 +
 +
==='''Параметры подлета'''===
 +
Параметры анимации картинок "подлет".
 +
*''Время подлета''  '''(takeoff_tm)'''
 +
*''Скейл подлета''  '''(takeoff_sc)'''
 +
*''Время переворота''  '''(revolution_tm)'''
 +
*''Количество переворотов''  '''(revolution_num)'''
 +
*''Скейл дальней стороны''  '''(far_side_sc)'''
 +
 +
==='''Параметры хинта'''===
 +
*''Время открытия'' '''(hint_open)''' - время открытия картинки.
 +
*''Время закрытия'' '''(hint_close)''' -  время закрытия картинки.
 +
*''Время показа'' '''(hint_show)''' - время показа пары картинок.
 +
*''Пауза между анимациями'' '''(hint_dif)''' - пауза между началом анимирования первой и второй картинки.
 +
 +
==='''Режим игры'''===
 +
*''Режим''  '''(mod)''':
 +
**normal
 +
**blitz - сыграть за определенное время
 +
**moves - сыграть за определенное количество ходов.
 +
 +
*''Время (в блице)''  '''(modtm)''' - время игры в режиме blitz
 +
*''Кол-во ходов''  '''(modmv)''' - количество ходов для режима moves.
 +
*''Визуализатор''  '''(modvis)''' - объект, который отображает текущее значение времени/ходов (timer/progres).
  
Создаётся объект и тип '''memory''' выбирается из списка.
+
==='''Настройка бонусов'''===
 +
 +
*''актер: добавить ходы''  '''(actBonusMoves)''' - актер, который будет переведен в состояние fly при открытии бонуса ходы.
 +
*''актер: добавить время''  '''(actBonusTime)''' - актер, который будет переведен в состояние fly при открытии бонуса время.
 +
*''актер: открыть пару''  '''(actBonusMatchPair)''' - актер, который будет переведен в состояние fly при открытии бонуса "добаить хинт открыть пару".
 +
*''актер: показать поле''  '''(actBonusShowField)''' - актер, который будет переведен в состояние fly при открытии бонуса "добавить хинт показать поле".
  
''Имя объекта'' в дереве проекта, может быть произвольным.  
+
===Дополнительные настройки ===
 +
 +
*''Поведение решенного узла'' '''(snb)''':
 +
** оставлять картинки=0,
 +
** убирать с поля вместе с бекграундом=1,
 +
** устанавливать на их месте новые бекграунды=2.
 +
 +
*''Начальная задержка'' '''(tmOpen)''' - начальная задержка перед стартом игры.
 +
*''Тип игры'' '''(memoType)''':
 +
** классическая=0,
 +
** найти свои=1,
 +
** copy=2.
 +
*''Флайер'' '''(flyer)''' - флайер при разборе узла. Нужен в двух экземплярах.
 +
 +
==='''Препоказ'''===
 +
*''Нужен/не нужен'' '''(preShowNeeded)''' - включить/выключить препоказ картинок при старте игры.
 +
*''Время открытия'' '''(preShowOpenTm)''' - время открытия препоказа.
 +
*''Продолжительность'' '''(preShowTm)''' - продолжительность препоказа.
 +
*''Время закрытия'' '''(preShowCloseTm)''' - время закрытия препоказа.
 +
 +
=='''Дополнительные параметры:'''==
 +
 +
[[Файл:Memoryadd.png]]
  
''Синхронизация'' '''sync''':
+
==='''Игрок'''===
  нет - нет синхронизации;
+
'''Важно!''' Должен быть как минимум один игрок.
  да - есть синхронизация
+
*''Игрок'' '''(player)''' - нужен/ненужен.
 +
*''Тип'' '''(pltype)''' - тип игрока: человек/компьютер.
 +
*''Ключ'' '''(key)''' - ключ игрока.
 +
*''Имя'' '''(name)''' - имя игрока
 +
*''Счетчик'' '''(counter)''' - счетчик ходов.
 +
*''Индикатор'' '''(indicator)''' - индикатор хода игрока(машина)
 +
*''Вероятность'' '''(probability)''' - вероятность правильного хода (для компьютера).
 +
*''Память'' "3" '''(plmemo)''' сколько ходов помнит компьютер.
 +
*''Время на ход'' '''(pltime)''' время на ход (для компьютера).
 +
 +
==='''Бонус'''===
 +
*''Нужен'' '''(need)''' - нужен/ненужен.
 +
*''Ключ'' '''(key)''' - название бонуса.
 +
*''Графика'' '''(bonusImgs)''' - клип с графикой для бонусной карты.
 +
*''Картинка'' '''(bonusFrame)'' - номер фрейма в клипе, если хотим брать случайно, то -1
 +
*''Тип бонуса'' '''(bonusType)''':
 +
**открыть дополнительную карту=1
 +
**добавить ход=2
 +
       
 +
==='''Удачный разбор: изменить состояние объекта'''===
 +
* объект '''(obj)''' объект, состояние которого нужно изменить.
 +
* состояние '''(st)''' новое состояние объекта.
  
'''Положение''' на экране (x, y).
+
==='''Удачный разбор: изменить свойство объекта '''===
 +
* объект '''(obj)''' - объект, свойство которого нужно изменить.
 +
* свойство '''(par)''' - свойство, которое нужно изменить.
 +
* значение '''(val)''' Значение Новое значение свойства.
 +
       
 +
==='''Неудачный разбор: изменить состояние объекта '''===
 +
* объект '''(obj)''' Объект Объект, состояние которого нужно изменить.
 +
* состояние '''(st)''' Состояние Новое состояние объекта.
 +
       
 +
==='''Неудачный разбор: изменить свойство объекта'''===
 +
* объект '''(obj)''' - объект, свойство которого нужно изменить.
 +
* свойство '''(par)''' - свойство, которое нужно изменить.
 +
* значение '''(val)''' - новое значение свойства.
  
''Строки'' "0" '''rows''' число ячеек по вертикали.
+
Дополнительные параметры для разных типов игры:
 +
[[Файл:Memo3.png]]
  
''Столбцы'' "0" '''cols''' число ячеек по горизонтали.
+
==='''memoClassic параметры'''===
 
+
Цель игры - разобрать поле, убирая одинаковые картинки.
'''Звуки'''
+
*''Подтип'' '''(subType)''' подтип игры:
 +
** картинка-картинка - найти пары одинаковых картинок.
 +
** картинка-ключ - найти пары ассоциативных картинок.
 +
*''Сложность'' '''(level)''':
 +
** легкая
 +
** сложная - наличие картинок, которые труднее запомнить (белая/черная кошки).
 +
*''Повторения'' '''(duplication)''' повторения пар картинок:
 +
** запрещены
 +
** разрешены
 +
*''Подложки'' '''(bg)''' - анимация с картинками для подложек.
 +
*''Легкие картинки'' '''(pict0)''' - анимация с картинками для легкого уровня сложности.
 +
*''Сложные картинки'' '''(pict1)''' - анимация с картинками для сложного уровня сложности.
 +
*''Ключи'' '''(pictKey)''' - анимация с картинками для ключей (для подтипа картинка-ключ).
 
   
 
   
''Удачный клик'' '''sndClick''' клик на закрытую нерешенную ячейку.
+
==='''memoFindOwn параметры''' ===
 +
Цель игры - первым разобрать свои картинки.
  
''Неудачный клик'' '''sndMissClick''' неудачный клик (картинка решенная или анимируется).
+
*''Подложки'' '''(bg)''' - клип с картинками для подложек.
 +
*''Нейтральные картинки'' '''(pictNeutral)''' - клип для нейтральных картинок.
 +
*''Картинки игроков'' '''(pict)''' - клип для активных картинок.
 +
*''Очки за свои ячейки'' '''(scoreOwn)''' - очки за клик на свою картинку.
 +
*''Очки за чужие ячейки'' '''(scoreOther)''' - очки за клик на чужую картинку(можно указывать отрицательное значения).
 +
*''Очки за нейтральные ячейки'' '''(scoreNeutral)''' - очки за клик на нейтральную картинку.
 +
*''Мультипликатор'' '''(scoreMultiplier)''' - за первую правильно открытую ячейку 1Х очков, за вторую - 2Х и т.д.:
 +
** нет=0,
 +
** да=1.
 +
*''Ячейки игроков'' '''(targetNum)''' - количество ячеек для каждого игрока.
 +
       
 +
==='''memoCopy параметры'''===
 +
Цель игры - раскопировать изображение правильных фишек.
 +
*''Обычные картинки'' '''(imgs0)'''
 +
*''Верно нажатые'' '''(imgs1)'''
 +
*''Неверно нажатые'' '''(imgs2)'''
 +
*''Подложки'' '''(bgs)'''
 +
*''id для картинок'' '''(imgId)'''
 +
*''id для подложек'' '''(bgId)'''
 +
*''Пауза перед закрытием'' '''(endLevelPause)'''
 +
*''Итерации'' '''(numIters)'''
 +
*''Массив строк'' '''(rowsArray)'''
 +
*''Массив столбцов'' '''(colsArray)'''
 +
*''Пустые ячейки'' '''emptyArray'''
  
''Разбор узла'' '''sndNode''' разобрали узел.
+
=='''Файл уровней'''==
 +
'''Важно!''' После экспорта файл уровней нужно поместить в папку к layout.xml. Иначе он не попадет в сборку и на устройстве игра работать не будет!
  
''Удачный разбор игры'' '''sndWinGame''' удачный разбор игры.
+
Возможно сделать макет уровней игры, и с помощью машины передавать memory параметр lvlnum, тем самым меняя играемый уровень. Данный параметр нужно передавать до перехода на экран с игрой.
  
''Неудачный разбор игры'' '''sndLoseGame''' неудачный разбор игры.
+
Уровень можно формировать 2 способами:
 +
* на основе постоянной прямоугольной решетки, при этом есть возможность задавать в решетке ячейки без плиток memory;
 +
* произвольным размещением плиток на сцене - путем задачи координат каждой плитки относительно объекта memory.
  
 +
'''Важно! При формировании уровня нужно следить, что бы количество игровых ячеек было парным'''
  
''Отступ(x)'' '''indentX''' отступ между картинками по горизонтали.
+
==='''Структура уровня'''===
  
''Отступ (y)'' '''indentY''' отступ между картинками по вертикали.
+
    <level>
 +
        id      - номер уровня
 +
        rows    - высота сетки
 +
        cols    - ширина сетки
 +
        time    - время игры
 +
        turns    - количество ходов
 +
        frames  - количество картинок, из которых формируется поле
 +
        dup      - если 1, разрешены повторения пар. Если 0, повторений будет минимально возможное количество.
 +
        clipBgs  - id клипа с подложками                                  // значения клипов переносятся вручную
 +
        clipImgs - id клипа с картинками для матча                        // представляет собой id анимации
 +
        clipKeys - id клипа с ключами для матче (в режиме картинка-ключ)  // которая содержат нужные картинки
 +
       
 +
        <rules>
 +
            Описание правил для параметра "rules_preset"
 +
            <rule>
 +
                id - сложность
 +
                остальной список параметров такой же
 +
            </rule>
 +
            ...
 +
        </rules>
 +
        <fakes> - ложные ячейки - ведут себя как и обычные ячейки, но ни с кем не матчатся
 +
            <fake>
 +
                pos  - позиция, она же номер в последовательности, описывающей поле
 +
                frame - номер фрейма (должен быть в общей анимации)
 +
            </fake>
 +
        </fakes>
 +
        <field> - прямоугольная решетка
 +
            Описание ячеек поля {0,1}
 +
        </field>
 +
        <field_pos>
 +
            Описание ячеек поля координатами (x0,y0),(x1,y1),...
 +
            Переносы строк, пробелы и прочие табы разрешаются
 +
        </field_pos>
 +
    </level>
 +
  
''Время открытия'' "0" '''tmOpening''' время открытия Время открытия картинки.
+
====''Постоянная решетка''====
  
''Время закрытия'' "0" '''tmClosing''' время закрытия Время закрытия картинки.
+
  <level id="0" rows="5" cols="6" time="60000" turns="6" frames="3" dup="0" clipBgs="231" clipImgs="232" clipKeys="232">
 +
    <rules>
 +
        <rule id="0" rows="4" cols="3" time="0" turns="6" frames="1" dup="0"  clipBgs="231" clipImgs="232" clipKeys="232" />
 +
    </rules>
 +
    <field_pos>
 +
    </field_pos>
 +
    <field>    // где 0 - ячейка пустая
 +
        1,1,0,1,1,1,
 +
        1,1,1,1,1,1,
 +
        1,1,0,1,1,1,
 +
        1,1,1,0,1,1,
 +
        1,1,1,1,1,0
 +
    </field>
 +
  </level>
  
''Анимация картинок'' '''animType''' тип анимирования картинок:
 
  скалирование=0,
 
  переворот по горизонтали=1,
 
  переворот по вертикали=2,
 
  проявление по альфе=3.
 
  
'''Параметры колебаний'''  
+
====''Задание координат''====
  
''Амплитуда'' "0" '''osc_a''' (начальная амплитуда.
+
  <level id="1" rows="5" cols="6" time="60000" turns="6" frames="3" dup="0" clipBgs="231" clipImgs="232" clipKeys="232">
 +
    <rules>
 +
        <rule id="0" rows="4" cols="3" time="0" turns="6" frames="1" dup="0"  clipBgs="231" clipImgs="232" clipKeys="232" />
 +
    </rules>
 +
    <fakes>                              // Нумерация ячеек начинается с верхней левой. Каждая фейковая ячейка уменьшает
 +
        <fake pos="4" frame="1" />      // количество обычных ячеек. Поэтому нужно следить, что бы количество обычных
 +
        <fake pos="12" frame="2" />      // ячеек всегда было парным.
 +
        <fake pos="0" frame="0" />
 +
    </fakes>
 +
    <field_pos>                          //координаты отсчитываются от точки пивота объекта memory
 +
                    (0,-250),
 +
                (-50,-150),(50,-150),
 +
            (-100,-50),(0,-50),(100,-50),
 +
        (-150,50),(-50,50),(50,50),(150,50),
 +
    (-200,150),(-100,150),(0,150),(100,150),(200,150)
 +
    </field_pos>
 +
  </level>
  
''Время'' "0" '''osc_time'''.
 
  
''Количество'' "4" '''osc_num'''.
+
=='''Бонусы'''==
 +
В мемори реализовано 6 бонусов:
 +
# добавить ходы;
 +
# добавить время;
 +
# добавить хинт открыть пару;
 +
# добавить хинт подсветить поле;
 +
# открыть пару;
 +
# подсветить поле.
  
''Затухание'' "0.5" '''osc_beta''', параметр beta уравнения x(t) = a0 * exp(-beta * t) * cos(omega * t + alpha)
+
Назначение первых четырех бонусов заключается в переводе соответствующего актера в состояние fly. Начисление, анимация и т.п. должно происходить в этом состоянии.
 +
Актеры устанавливаются в блоке параметров "настройка бонусов".
 +
Каждый актер должен иметь состояние fly.
  
'''Параметры хинта'''
+
5-ый и 6-ой - бонусы в действии . То есть при открытии их на поле будет сразу произведено соответствующее действие.
 
+
''Время открытия'' "1000" '''hint_open''' время открытия Время открытия картинки.
+
Установка самих бонусов происходит в файле уровней с помощью тэга bonus.
 
 
''Время закрытия'' "1000" '''hint_close''' время закрытия Время закрытия картинки.
 
 
 
''Время показа'' "1000" '''hint_show''' время показа Время показа пары картинок.
 
 
 
''Пауза между анимациями'' "1000" '''hint_dif''' пауза между анимациями. Пауза между началом анимирования первой и второй картинки.
 
 
 
''Поведение решенного узла'' '''snb''' поведение решенного узла:
 
  оставлять картинки=0,
 
  убирать с поля вместе с бекграундом=1,
 
  устанавливать на их месте новые бекграунды=2.
 
 
 
''Начальная задержка'' "1000" '''tmOpen''' начальная задержка перед стартом игры.
 
 
 
''Тип игры'' '''memoType''' Тип игры:
 
  классическая=0,
 
  найти свои=1,
 
  copy=2.
 
 
 
''Флайер'' '''flyer''' Флайер при разборе узла.
 
 
 
'''Препоказ'''
 
 
 
''Нужен/не нужен'' "нужен" '''preShowNeeded''' нужен не нужен:
 
  не нужен=0,
 
  нужен=1.
 
 
 
''Время открытия'' "1000" preShowOpenTm время открытия препоказа.
 
 
 
''Продолжительность'' "1000" preShowTm продолжительность препоказа.
 
 
 
''Время закрытия'' "1000" preShowCloseTm время закрытия препоказа.
 
 
 
----
 
 
 
'''Дополнительные параметры:'''
 
 
 
[[Файл:Mem2.jpg]]
 
 
 
''Игрок'' '''player add'''
 
''Нужен:''
 
  не нужен=0,
 
  нужен=1.
 
 
 
''Тип'' '''pltype''' тип игрока:
 
  человек=0,
 
  компьютер=1.
 
 
 
''Ключ'' '''string key'''.
 
 
 
''Имя'' '''string name'''.
 
 
 
''Счетчик'' '''counter'''.
 
 
 
''Индикатор'' '''indicator'''.
 
 
 
''Вероятность'' "0.75" '''probability''' Вероятность Вероятность правильного хода (для компьютера).
 
 
 
''Память'' "3" '''plmemo''' сколько ходов помнит компьютер.
 
 
 
''Время на ход'' "5000" '''pltime''' время на ход (для компьютера).
 
 
 
'''Бонус''' '''bonus add'''
 
 
 
''Нужен'' '''need''' нужен:
 
  не нужен=0,
 
  нужен=1.
 
 
 
''Ключ'' '''string key'''.
 
 
 
''Графика'' '''bonusImgs''' клип с графикой для бонусной карты.
 
 
 
''Картинка'' '''bonusFrame''' номер фрейма в клипе, сли хотим брать случайно, то -1.
 
 
 
''Тип бонуса'' '''bonusType''' тип бонуса:
 
  открыть дополнительную карту=1,
 
  добавить ход=2.
 
 
 
 
'''Удачный разбор''' изменить состояние объекта '''winChgSt add:'''
 
  объект obj объект, состояние которого нужно изменить,
 
  состояние string st новое состояние объекта.
 
 
'''Удачный разбор''' изменить свойство объекта '''winChgPar add'''
 
  объект obj Объект Объект, свойство которого нужно изменить,
 
  свойство string par Свойство Свойство, которое нужно изменить,
 
  значение string val Значение Новое значение свойства.
 
 
'''Неудачный разбор''' изменить состояние объекта '''loseChgSt add:'''
 
  объект obj Объект Объект, состояние которого нужно изменить,
 
  состояние string st Состояние Новое состояние объекта.
 
 
'''Неудачный разбор''' изменить свойство объекта '''loseChgPar add:'''
 
  объект obj Объект Объект, свойство которого нужно изменить,
 
  свойство string par Свойство Свойство, которое нужно изменить,
 
  значение string val Значение Новое значение свойства.
 
 
'''Параметры memoClassicPars add'''
 
''Подтип'' '''subType''' подтип игры:
 
  картинка-картинка=0,
 
  картинка-ключ=1.
 
 
 
''Сложность'' '''level''' уровень сложности:
 
  легкая=0,
 
  сложная=1.
 
 
 
''Повторения'' '''duplication''' повторения пар картинок:
 
  запрещены=0,
 
  разрешены=1.
 
 
 
''Подложки'' '''bg''' клип с картинками для подложек.
 
 
 
''Легкие картинки'' '''pict0''' клип с картинками для легкого уровня сложности.
 
 
 
''Сложные картинки'' '''pict1''' клип с картинками для сложного уровня сложности.
 
 
 
''Ключи'' '''pictKey''' клип с картинками для ключей (для подтипа картинка-ключ).
 
 
'''Параметры memoFindOwnPars add'''
 
 
 
''Подложки'' '''bg''' клип с картинками для подложек.
 
  
''Нейтральные картинки'' '''pictNeutral''' клип для нейтральных картинок.
+
            <bonus>
 +
                type - тип бонуса
 +
                    3 - добавляет ходы в режиме стратегии
 +
                    4 - добавляет время в режиме блица
 +
                    5 - добавляет хинт "сматчить пару"
 +
                    6 - добавляет хинт "подсветить поле"
 +
                    7 - бонус в действии: при открытии карты матчится пара
 +
                    8 - бонус в действии: при открытии такой ячейки все поле подсвечивается на несколько секунд
 +
                v - параметр, соответствующий бонусу (кол-во ходов, времени, время подстветки и т.п.)
 +
            </bonus>
  
''Картинки игроков'' '''pict''' клип для активных картинок.
+
Пример.
 +
            <level id="9" rows="5" cols="3" time="34000" turns="14" frames="7" dup="0" previews="3"
 +
            clipImgBg="10767" clipBgs="10776" clipImgs="13447" clipKeys="13450">
 +
                <rules>
 +
                    <rule id="0" clipImgBg="10767" clipBgs="10776" clipImgs="13447" clipKeys="13450"/>
 +
                    <rule id="1" clipImgBg="10767" clipBgs="10776" clipImgs="13524" clipKeys="13450"/>
 +
                    <rule id="2" clipImgBg="10767" clipBgs="10776" clipImgs="13451" clipKeys="13452"/>
 +
                </rules>
 +
                <bonuses>
 +
                    <bonus type="3" v="2"/>
 +
                    <bonus type="4" v="4"/>
 +
                </bonuses>
 +
            </level>
  
''Очки за свои ячейки'' "20" '''scoreOwn''' очки за клик на свою картинку.
 
  
''Очки за чужие ячейки'' "-20" '''scoreOther''' очки за клик на чужую картинку.
+
Для получении количества времени/ходов на стороне редактора после загрузки уровня в объект memory будет записан параметр "bonus_value".
  
''Очки за нейтральные ячейки'' "10" '''scoreNeutral''' орчки за клик на нейтральную картинку.
+
Пример актера.  
  
''Мультипликатор'' '''scoreMultiplier''' за первую правильно открытую ячейку 1Х очков, за вторую - 2Х и т.д.:
+
[[Файл:Mem_actor.png]]
  нет=0,
 
  да=1.
 
  
''Ячейки игроков'' "2" '''targetNum''' количество ячеек для каждого игрока.
+
В данном примере в состоянии check мы устанавливаем нужную картинку в зависимости от количества бонусов. Состояние вызывается отдельно при загрузке уровня. В состоянии fly добавляем матчбэтлу количество ходов, считанное из параметра bonus_value. Делаем анимацию.
 
'''Параметры memoCopyPars add'''
 
  
''Обычные картинки'' '''imgs0'''.
+
==Хинты==
  
''Верно нажатые'' '''imgs1'''.
+
У memory есть 3 вида хинтов:
 +
* показать пару ячеек - hntt=0
 +
* показать все ячейки - hntt=1
 +
* убрать пару ячеек - hntt=2
  
''Неверно нажатые'' '''imgs2'''.
+
Для активации хинта нужно передать memory соответствующее значение hntt и передать состояние hint.
 +
Также для memory определено состояние skip, при передаче которого игра завершается победой.
  
''Подложки'' '''bgs'''.
 
  
''id для картинок'' "0" '''imgId'''.
+
==Состояния==
  
''id для подложек'' "0" '''bgId'''.
 
  
''Пауза перед закрытием'' "500" '''endLevelPause'''.
 
  
''Итерации'' "1" '''numIters'''.
+
      ST_BEG = 0,          //!< начать игру; может вызываться из других объектов
 +
      ST_OPEN,            //!< пока ничего, но вдруг захотят свистелок и перделок в начале
 +
      ST_RUN,              //!< играем
 +
      ST_PAUSE,            //!< поставить игру на паузу
 +
      ST_RESUME,          //!< возобновить игру с паузы
 +
      ST_HINT,    //!< подсказываем
 +
      ST_HINT_SHOW_FIELD,
 +
      ST_MATCH_PAIR,
 +
      ST_SKIP,            //!< скипаем
 +
      ST_CLOSE,            //!< завершаем игру; переходное состояние
 +
      ST_END,              //!< игра завершена
  
''Массив строк'' "3" '''rowsArray'''.
+
== Пример ==
  
''Массив стобцов'' "4" '''colsArray'''.
+
S:\!MOBILE\!!!EditorGames\Wiki_sample  Файл: memory_sample.zip
  
''Пустые ячейки'' "2" '''emptyArray'''.
+
[[Category:Game mechanic]]
 +
[[Category:Get Started]]

Текущая версия на 08:23, 29 сентября 2017

Memory - объект редактора, который реализует игровую механику "memory" - поиск одинаковых объектов. Имеет основные параметры объекта, но в memory нельзя помещать другие объекты - они при этом некорректно работают.

Get Started

Нам потребуется 1 картинка для "рубашки" и два набора по 6 картинок для игры

Начнём
  1. откроем редактор сцен и создадим новый проект,
  2. добавим новый экран с именем scrMemory
  3. создадим в этом экране сцену stgMemory
  4. перейдём в редактор ресурсов
    1. создаём папку memo
    2. добавим в ней картинку для "рубашки" - назовём её cardback
    3. добавим там же анимацию (6 картинок) - cardpict
    4. также добавим анимацию (6 картинок) - cardkey
    5. закроем редактор ресурсов
  5. перейдём в редактор сцен.
  6. создадим в сцене stgMemory объект Memory
  7. установим в нём свойство время открытия в 500
  8. установим свойство время закрытия в 1000
  9. установим свойство анимация картинок в поворот по горизонтали
  10. добавим (по правой кнопке мыши) свойство игрок
  11. добавим свойство memoClassic параметры
    1. в свойстве memoClassic параметры изменим параметр подтип на значение картинка-ключ
    2. выделим параметр подложки и перетащим на него из редактора ресурсов картинку cardback
    3. выделим параметр легкие картинки и перетащим из редактора ресурсов анимацию cardpict
    4. выделим параметр ключи и перетащим из редактора ресурсов анимацию cardkey
  12. сохраним проект
  13. запустим вьювер

Основные свойства:

Memory1.png

Размер поля

  • w - Ширина объекта в пикселях.
  • h - Высота объекта в пикселях.
  • Строки (rows) - число ячеек по вертикали.
  • Столбцы (cols) - число ячеек по горизонтали.

Звуки

  • Удачный клик (sndClick) - клик на закрытую нерешенную ячейку.
  • Неудачный клик (sndMissClick) - неудачный клик (картинка решенная или анимируется).
  • Разбор узла (sndNode) - разобрали узел.
  • Удачный разбор игры (sndWinGame) - удачный разбор игры.
  • Неудачный разбор игры (sndLoseGame) - неудачный разбор игры.

Дополнительные настройки

  • Отступ(x) (indentX) - отступ между картинками по горизонтали.
  • Отступ (y) (indentY) - отступ между картинками по вертикали.
  • Время открытия (tmOpening) - время открытия картинки.
  • Время закрытия (tmClosing) - время закрытия картинки.
  • Анимация картинок (animType) тип анимирования картинок:
    • скалирование=0,
    • переворот по горизонтали=1,
    • переворот по вертикали=2,
    • проявление по альфе=3.
    • подлет=4

Файл уровней

  • Имя файла (lvlfile) - Файл-описание уровня.
  • Номер уровня (lvlnum) - Номер уровня в файле.

Параметры колебаний

  • Амплитуда (osc_a) - начальная амплитуда.
  • Время (osc_time) - время колебания ячейки после открытия.
  • Количество (osc_num) - количество колебаний.
  • Затухание (osc_beta), параметр beta уравнения x(t) = a0 * exp(-beta * t) * cos(omega * t + alpha) - чем больше, тем быстрее уменьшается амплитуда колебаний.

Параметры подлета

Параметры анимации картинок "подлет".

  • Время подлета (takeoff_tm)
  • Скейл подлета (takeoff_sc)
  • Время переворота (revolution_tm)
  • Количество переворотов (revolution_num)
  • Скейл дальней стороны (far_side_sc)

Параметры хинта

  • Время открытия (hint_open) - время открытия картинки.
  • Время закрытия (hint_close) - время закрытия картинки.
  • Время показа (hint_show) - время показа пары картинок.
  • Пауза между анимациями (hint_dif) - пауза между началом анимирования первой и второй картинки.

Режим игры

  • Режим (mod):
    • normal
    • blitz - сыграть за определенное время
    • moves - сыграть за определенное количество ходов.
  • Время (в блице) (modtm) - время игры в режиме blitz
  • Кол-во ходов (modmv) - количество ходов для режима moves.
  • Визуализатор (modvis) - объект, который отображает текущее значение времени/ходов (timer/progres).

Настройка бонусов

  • актер: добавить ходы (actBonusMoves) - актер, который будет переведен в состояние fly при открытии бонуса ходы.
  • актер: добавить время (actBonusTime) - актер, который будет переведен в состояние fly при открытии бонуса время.
  • актер: открыть пару (actBonusMatchPair) - актер, который будет переведен в состояние fly при открытии бонуса "добаить хинт открыть пару".
  • актер: показать поле (actBonusShowField) - актер, который будет переведен в состояние fly при открытии бонуса "добавить хинт показать поле".

Дополнительные настройки

  • Поведение решенного узла (snb):
    • оставлять картинки=0,
    • убирать с поля вместе с бекграундом=1,
    • устанавливать на их месте новые бекграунды=2.
  • Начальная задержка (tmOpen) - начальная задержка перед стартом игры.
  • Тип игры (memoType):
    • классическая=0,
    • найти свои=1,
    • copy=2.
  • Флайер (flyer) - флайер при разборе узла. Нужен в двух экземплярах.

Препоказ

  • Нужен/не нужен (preShowNeeded) - включить/выключить препоказ картинок при старте игры.
  • Время открытия (preShowOpenTm) - время открытия препоказа.
  • Продолжительность (preShowTm) - продолжительность препоказа.
  • Время закрытия (preShowCloseTm) - время закрытия препоказа.

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

Memoryadd.png

Игрок

Важно! Должен быть как минимум один игрок.

  • Игрок (player) - нужен/ненужен.
  • Тип (pltype) - тип игрока: человек/компьютер.
  • Ключ (key) - ключ игрока.
  • Имя (name) - имя игрока
  • Счетчик (counter) - счетчик ходов.
  • Индикатор (indicator) - индикатор хода игрока(машина)
  • Вероятность (probability) - вероятность правильного хода (для компьютера).
  • Память "3" (plmemo) сколько ходов помнит компьютер.
  • Время на ход (pltime) время на ход (для компьютера).

Бонус

  • Нужен (need) - нужен/ненужен.
  • Ключ (key) - название бонуса.
  • Графика (bonusImgs) - клип с графикой для бонусной карты.
  • Картинка '(bonusFrame) - номер фрейма в клипе, если хотим брать случайно, то -1
  • Тип бонуса (bonusType):
    • открыть дополнительную карту=1
    • добавить ход=2

Удачный разбор: изменить состояние объекта

  • объект (obj) объект, состояние которого нужно изменить.
  • состояние (st) новое состояние объекта.

Удачный разбор: изменить свойство объекта

  • объект (obj) - объект, свойство которого нужно изменить.
  • свойство (par) - свойство, которое нужно изменить.
  • значение (val) Значение Новое значение свойства.

Неудачный разбор: изменить состояние объекта

  • объект (obj) Объект Объект, состояние которого нужно изменить.
  • состояние (st) Состояние Новое состояние объекта.

Неудачный разбор: изменить свойство объекта

  • объект (obj) - объект, свойство которого нужно изменить.
  • свойство (par) - свойство, которое нужно изменить.
  • значение (val) - новое значение свойства.

Дополнительные параметры для разных типов игры: Memo3.png

memoClassic параметры

Цель игры - разобрать поле, убирая одинаковые картинки.

  • Подтип (subType) подтип игры:
    • картинка-картинка - найти пары одинаковых картинок.
    • картинка-ключ - найти пары ассоциативных картинок.
  • Сложность (level):
    • легкая
    • сложная - наличие картинок, которые труднее запомнить (белая/черная кошки).
  • Повторения (duplication) повторения пар картинок:
    • запрещены
    • разрешены
  • Подложки (bg) - анимация с картинками для подложек.
  • Легкие картинки (pict0) - анимация с картинками для легкого уровня сложности.
  • Сложные картинки (pict1) - анимация с картинками для сложного уровня сложности.
  • Ключи (pictKey) - анимация с картинками для ключей (для подтипа картинка-ключ).

memoFindOwn параметры

Цель игры - первым разобрать свои картинки.

  • Подложки (bg) - клип с картинками для подложек.
  • Нейтральные картинки (pictNeutral) - клип для нейтральных картинок.
  • Картинки игроков (pict) - клип для активных картинок.
  • Очки за свои ячейки (scoreOwn) - очки за клик на свою картинку.
  • Очки за чужие ячейки (scoreOther) - очки за клик на чужую картинку(можно указывать отрицательное значения).
  • Очки за нейтральные ячейки (scoreNeutral) - очки за клик на нейтральную картинку.
  • Мультипликатор (scoreMultiplier) - за первую правильно открытую ячейку 1Х очков, за вторую - 2Х и т.д.:
    • нет=0,
    • да=1.
  • Ячейки игроков (targetNum) - количество ячеек для каждого игрока.

memoCopy параметры

Цель игры - раскопировать изображение правильных фишек.

  • Обычные картинки (imgs0)
  • Верно нажатые (imgs1)
  • Неверно нажатые (imgs2)
  • Подложки (bgs)
  • id для картинок (imgId)
  • id для подложек (bgId)
  • Пауза перед закрытием (endLevelPause)
  • Итерации (numIters)
  • Массив строк (rowsArray)
  • Массив столбцов (colsArray)
  • Пустые ячейки emptyArray

Файл уровней

Важно! После экспорта файл уровней нужно поместить в папку к layout.xml. Иначе он не попадет в сборку и на устройстве игра работать не будет!

Возможно сделать макет уровней игры, и с помощью машины передавать memory параметр lvlnum, тем самым меняя играемый уровень. Данный параметр нужно передавать до перехода на экран с игрой.

Уровень можно формировать 2 способами:

  • на основе постоянной прямоугольной решетки, при этом есть возможность задавать в решетке ячейки без плиток memory;
  • произвольным размещением плиток на сцене - путем задачи координат каждой плитки относительно объекта memory.

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

Структура уровня

   <level>
       id       - номер уровня
       rows     - высота сетки
       cols     - ширина сетки
       time     - время игры
       turns    - количество ходов
       frames   - количество картинок, из которых формируется поле
       dup      - если 1, разрешены повторения пар. Если 0, повторений будет минимально возможное количество.
       clipBgs  - id клипа с подложками                                   // значения клипов переносятся вручную
       clipImgs - id клипа с картинками для матча                         // представляет собой id анимации
       clipKeys - id клипа с ключами для матче (в режиме картинка-ключ)   // которая содержат нужные картинки
       
       <rules>
           Описание правил для параметра "rules_preset"
           <rule>
               id - сложность
               остальной список параметров такой же
           </rule>
           ...
       </rules>
       <fakes> - ложные ячейки - ведут себя как и обычные ячейки, но ни с кем не матчатся
           <fake>
               pos   - позиция, она же номер в последовательности, описывающей поле
               frame - номер фрейма (должен быть в общей анимации)
           </fake>
       </fakes>
       <field> - прямоугольная решетка
           Описание ячеек поля {0,1}
       </field>
       <field_pos>
           Описание ячеек поля координатами (x0,y0),(x1,y1),...
           Переносы строк, пробелы и прочие табы разрешаются
       </field_pos>
   </level>

Постоянная решетка

 <level id="0" rows="5" cols="6" time="60000" turns="6" frames="3" dup="0" clipBgs="231" clipImgs="232" clipKeys="232">
   <rules>
       <rule id="0" rows="4" cols="3" time="0" turns="6" frames="1" dup="0"  clipBgs="231" clipImgs="232" clipKeys="232" />
   </rules>
   <field_pos>
   </field_pos>
   <field>    // где 0 - ячейка пустая
       1,1,0,1,1,1,
       1,1,1,1,1,1,
       1,1,0,1,1,1,
       1,1,1,0,1,1,
       1,1,1,1,1,0
   </field> 
 </level>


Задание координат

 <level id="1" rows="5" cols="6" time="60000" turns="6" frames="3" dup="0" clipBgs="231" clipImgs="232" clipKeys="232">
   <rules>
       <rule id="0" rows="4" cols="3" time="0" turns="6" frames="1" dup="0"  clipBgs="231" clipImgs="232" clipKeys="232" />
   </rules>
   <fakes>                              // Нумерация ячеек начинается с верхней левой. Каждая фейковая ячейка уменьшает
       <fake pos="4" frame="1" />       // количество обычных ячеек. Поэтому нужно следить, что бы количество обычных
       <fake pos="12" frame="2" />      // ячеек всегда было парным.
       <fake pos="0" frame="0" />
   </fakes>
   <field_pos>                          //координаты отсчитываются от точки пивота объекта memory
                    (0,-250),
               (-50,-150),(50,-150),
           (-100,-50),(0,-50),(100,-50),
       (-150,50),(-50,50),(50,50),(150,50),
   (-200,150),(-100,150),(0,150),(100,150),(200,150)
   </field_pos>
 </level>


Бонусы

В мемори реализовано 6 бонусов:

  1. добавить ходы;
  2. добавить время;
  3. добавить хинт открыть пару;
  4. добавить хинт подсветить поле;
  5. открыть пару;
  6. подсветить поле.

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

5-ый и 6-ой - бонусы в действии . То есть при открытии их на поле будет сразу произведено соответствующее действие.

Установка самих бонусов происходит в файле уровней с помощью тэга bonus.

           <bonus>
               type - тип бонуса
                   3 - добавляет ходы в режиме стратегии
                   4 - добавляет время в режиме блица
                   5 - добавляет хинт "сматчить пару"
                   6 - добавляет хинт "подсветить поле"
                   7 - бонус в действии: при открытии карты матчится пара
                   8 - бонус в действии: при открытии такой ячейки все поле подсвечивается на несколько секунд
               v - параметр, соответствующий бонусу (кол-во ходов, времени, время подстветки и т.п.)
           </bonus>

Пример.

           <level id="9" rows="5" cols="3" time="34000" turns="14" frames="7" dup="0" previews="3" 
           clipImgBg="10767" clipBgs="10776" clipImgs="13447" clipKeys="13450">
               <rules>
                   <rule id="0" clipImgBg="10767" clipBgs="10776" clipImgs="13447" clipKeys="13450"/>
                   <rule id="1" clipImgBg="10767" clipBgs="10776" clipImgs="13524" clipKeys="13450"/>
                   <rule id="2" clipImgBg="10767" clipBgs="10776" clipImgs="13451" clipKeys="13452"/>
               </rules>
               <bonuses>
                   <bonus type="3" v="2"/>
                   <bonus type="4" v="4"/>
               </bonuses>
           </level>


Для получении количества времени/ходов на стороне редактора после загрузки уровня в объект memory будет записан параметр "bonus_value".

Пример актера.

Mem actor.png

В данном примере в состоянии check мы устанавливаем нужную картинку в зависимости от количества бонусов. Состояние вызывается отдельно при загрузке уровня. В состоянии fly добавляем матчбэтлу количество ходов, считанное из параметра bonus_value. Делаем анимацию.

Хинты

У memory есть 3 вида хинтов:

  • показать пару ячеек - hntt=0
  • показать все ячейки - hntt=1
  • убрать пару ячеек - hntt=2

Для активации хинта нужно передать memory соответствующее значение hntt и передать состояние hint. Также для memory определено состояние skip, при передаче которого игра завершается победой.


Состояния

     ST_BEG = 0,          //!< начать игру; может вызываться из других объектов
     ST_OPEN,             //!< пока ничего, но вдруг захотят свистелок и перделок в начале
     ST_RUN,              //!< играем
     ST_PAUSE,            //!< поставить игру на паузу
     ST_RESUME,           //!< возобновить игру с паузы
     ST_HINT,     //!< подсказываем
     ST_HINT_SHOW_FIELD,
     ST_MATCH_PAIR,
     ST_SKIP,             //!< скипаем
     ST_CLOSE,            //!< завершаем игру; переходное состояние
     ST_END,              //!< игра завершена

Пример

S:\!MOBILE\!!!EditorGames\Wiki_sample Файл: memory_sample.zip