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

Материал из wiki.appsalutecreator.com
Перейти к: навигация, поиск
(Get Started)
 
(не показано 26 промежуточных версий 7 участников)
Строка 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,
''Синхронизация'' '''sync''':
+
** убирать с поля вместе с бекграундом=1,
* нет - нет синхронизации;
+
** устанавливать на их месте новые бекграунды=2.
* да - есть синхронизация
+
 
+
*''Начальная задержка'' '''(tmOpen)''' - начальная задержка перед стартом игры.
==='''Положение'''===
+
*''Тип игры'' '''(memoType)''':
'''Положение''' на экране (x, y).
+
** классическая=0,
 
+
** найти свои=1,
===''Строки''===
+
** copy=2.
''Строки'' "0" '''rows''' число ячеек по вертикали.
+
*''Флайер'' '''(flyer)''' - флайер при разборе узла. Нужен в двух экземплярах.
 
+
===''Столбцы'' ===
+
==='''Препоказ'''===
''Столбцы'' "0" '''cols''' число ячеек по горизонтали.
+
*''Нужен/не нужен'' '''(preShowNeeded)''' - включить/выключить препоказ картинок при старте игры.
 
+
*''Время открытия'' '''(preShowOpenTm)''' - время открытия препоказа.
=='''Звуки'''==
+
*''Продолжительность'' '''(preShowTm)''' - продолжительность препоказа.
 
+
*''Время закрытия'' '''(preShowCloseTm)''' - время закрытия препоказа.
===''Удачный клик''===
+
''Удачный клик'' '''sndClick''' клик на закрытую нерешенную ячейку.
 
 
 
===''Неудачный клик''===
 
''Неудачный клик'' '''sndMissClick''' неудачный клик (картинка решенная или анимируется).
 
 
 
===''Разбор узла''===
 
''Разбор узла'' '''sndNode''' разобрали узел.
 
 
 
===''Удачный разбор игры''===
 
''Удачный разбор игры'' '''sndWinGame''' удачный разбор игры.
 
 
 
===''Неудачный разбор игры''===
 
''Неудачный разбор игры'' '''sndLoseGame''' неудачный разбор игры.
 
 
 
==Дополнительные настройки==
 
===''Отступ(x)''===
 
''Отступ(x)'' '''indentX''' отступ между картинками по горизонтали.
 
 
 
===''Отступ (y)''===
 
''Отступ (y)'' '''indentY''' отступ между картинками по вертикали.
 
 
 
===''Время открытия''===
 
''Время открытия'' "0" '''tmOpening''' время открытия Время открытия картинки.
 
 
 
===''Время закрытия''===
 
''Время закрытия'' "0" '''tmClosing''' время закрытия Время закрытия картинки.
 
 
 
===''Анимация картинок''===
 
''Анимация картинок'' '''animType''' тип анимирования картинок:
 
* скалирование=0,
 
* переворот по горизонтали=1,
 
* переворот по вертикали=2,
 
* проявление по альфе=3.
 
 
 
=='''Параметры колебаний'''==
 
'''Параметры колебаний'''
 
 
 
===''Амплитуда''===
 
''Амплитуда'' "0" '''osc_a''' (начальная амплитуда.
 
 
 
===''Время''===
 
''Время'' "0" '''osc_time'''.
 
 
 
===''Количество''===
 
''Количество'' "4" '''osc_num'''.
 
 
 
===''Затухание''===
 
''Затухание'' "0.5" '''osc_beta''', параметр beta уравнения x(t) = a0 * exp(-beta * t) * cos(omega * t + alpha)
 
 
 
=='''Параметры хинта''' ==
 
'''Параметры хинта'''
 
 
 
===''Время открытия''===
 
''Время открытия'' "1000" '''hint_open''' время открытия Время открытия картинки.
 
 
 
===''Время закрытия''===
 
''Время закрытия'' "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 время закрытия препоказа.
 
 
 
----
 
 
=='''Дополнительные параметры:'''==
 
=='''Дополнительные параметры:'''==
'''Дополнительные параметры:'''
+
 
+
[[Файл:Memoryadd.png]]
[[Файл:Mem2.jpg]]
 
 
 
==''Игрок''==
 
===''Игрок''===
 
''Игрок'' '''player add'''
 
===''Нужен:''===
 
''Нужен:''
 
* не нужен=0,
 
* нужен=1.
 
 
 
===''Тип'' ===
 
''Тип'' '''pltype''' тип игрока:
 
* человек=0,
 
* компьютер=1.
 
 
 
===''Ключ''===
 
''Ключ'' '''string key'''.
 
  
===''Имя''===
+
==='''Игрок'''===
''Имя'' '''string name'''.
+
'''Важно!''' Должен быть как минимум один игрок.
 +
*''Игрок'' '''(player)''' - нужен/ненужен.
 +
*''Тип'' '''(pltype)''' - тип игрока: человек/компьютер.
 +
*''Ключ'' '''(key)''' - ключ игрока.
 +
*''Имя'' '''(name)''' - имя игрока
 +
*''Счетчик'' '''(counter)''' - счетчик ходов.
 +
*''Индикатор'' '''(indicator)''' - индикатор хода игрока(машина)
 +
*''Вероятность'' '''(probability)''' - вероятность правильного хода (для компьютера).
 +
*''Память'' "3" '''(plmemo)''' сколько ходов помнит компьютер.
 +
*''Время на ход'' '''(pltime)''' время на ход (для компьютера).
 +
 +
==='''Бонус'''===
 +
*''Нужен'' '''(need)''' - нужен/ненужен.
 +
*''Ключ'' '''(key)''' - название бонуса.
 +
*''Графика'' '''(bonusImgs)''' - клип с графикой для бонусной карты.
 +
*''Картинка'' '''(bonusFrame)'' - номер фрейма в клипе, если хотим брать случайно, то -1
 +
*''Тип бонуса'' '''(bonusType)''':
 +
**открыть дополнительную карту=1
 +
**добавить ход=2
 +
       
 +
==='''Удачный разбор: изменить состояние объекта'''===
 +
* объект '''(obj)''' объект, состояние которого нужно изменить.
 +
* состояние '''(st)''' новое состояние объекта.
  
===''Счетчик''===
+
==='''Удачный разбор: изменить свойство объекта '''===
''Счетчик'' '''counter'''.
+
* объект '''(obj)''' - объект, свойство которого нужно изменить.
 +
* свойство '''(par)''' - свойство, которое нужно изменить.
 +
* значение '''(val)''' Значение Новое значение свойства.
 +
       
 +
==='''Неудачный разбор: изменить состояние объекта '''===
 +
* объект '''(obj)''' Объект Объект, состояние которого нужно изменить.
 +
* состояние '''(st)''' Состояние Новое состояние объекта.
 +
       
 +
==='''Неудачный разбор: изменить свойство объекта'''===
 +
* объект '''(obj)''' - объект, свойство которого нужно изменить.
 +
* свойство '''(par)''' - свойство, которое нужно изменить.
 +
* значение '''(val)''' - новое значение свойства.
  
===''Индикатор''===
+
Дополнительные параметры для разных типов игры:
''Индикатор'' '''indicator'''.
+
[[Файл:Memo3.png]]
  
===''Вероятность''===
+
==='''memoClassic параметры'''===
''Вероятность'' "0.75" '''probability''' Вероятность Вероятность правильного хода (для компьютера).
+
Цель игры - разобрать поле, убирая одинаковые картинки.
 +
*''Подтип'' '''(subType)''' подтип игры:
 +
** картинка-картинка - найти пары одинаковых картинок.
 +
** картинка-ключ - найти пары ассоциативных картинок.
 +
*''Сложность'' '''(level)''':
 +
** легкая
 +
** сложная - наличие картинок, которые труднее запомнить (белая/черная кошки).
 +
*''Повторения'' '''(duplication)''' повторения пар картинок:
 +
** запрещены
 +
** разрешены
 +
*''Подложки'' '''(bg)''' - анимация с картинками для подложек.
 +
*''Легкие картинки'' '''(pict0)''' - анимация с картинками для легкого уровня сложности.
 +
*''Сложные картинки'' '''(pict1)''' - анимация с картинками для сложного уровня сложности.
 +
*''Ключи'' '''(pictKey)''' - анимация с картинками для ключей (для подтипа картинка-ключ).
 +
 +
==='''memoFindOwn параметры''' ===
 +
Цель игры - первым разобрать свои картинки.
  
===''Память''===
+
*''Подложки'' '''(bg)''' - клип с картинками для подложек.
''Память'' "3" '''plmemo''' сколько ходов помнит компьютер.
+
*''Нейтральные картинки'' '''(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'''
  
===''Время на ход''===
+
=='''Файл уровней'''==
''Время на ход'' "5000" '''pltime''' время на ход (для компьютера).
+
'''Важно!''' После экспорта файл уровней нужно поместить в папку к layout.xml. Иначе он не попадет в сборку и на устройстве игра работать не будет!
  
=='''Бонус'''==
+
Возможно сделать макет уровней игры, и с помощью машины передавать memory параметр lvlnum, тем самым меняя играемый уровень. Данный параметр нужно передавать до перехода на экран с игрой.
'''Бонус''' '''bonus add'''
 
  
===''Нужен''===
+
Уровень можно формировать 2 способами:
''Нужен'' '''need''' нужен:
+
* на основе постоянной прямоугольной решетки, при этом есть возможность задавать в решетке ячейки без плиток memory;
* не нужен=0,
+
* произвольным размещением плиток на сцене - путем задачи координат каждой плитки относительно объекта memory.
* нужен=1.
 
  
===''Ключ''===
+
'''Важно! При формировании уровня нужно следить, что бы количество игровых ячеек было парным'''
''Ключ'' '''string key'''.
 
  
===''Графика'===
+
==='''Структура уровня'''===
''Графика'' '''bonusImgs''' клип с графикой для бонусной карты.
 
  
===''Картинка''===
+
    <level>
''Картинка'' '''bonusFrame''' номер фрейма в клипе, сли хотим брать случайно, то -1.
+
        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>
 +
  
===''Тип бонуса''===
+
====''Постоянная решетка''====
''Тип бонуса'' '''bonusType''' тип бонуса:
 
* открыть дополнительную карту=1,
 
* добавить ход=2.
 
  
+
  <level id="0" rows="5" cols="6" time="60000" turns="6" frames="3" dup="0" clipBgs="231" clipImgs="232" clipKeys="232">
=='''Удачный разбор'''==
+
    <rules>
'''Удачный разбор''' изменить состояние объекта '''winChgSt add:'''
+
        <rule id="0" rows="4" cols="3" time="0" turns="6" frames="1" dup="0"  clipBgs="231" clipImgs="232" clipKeys="232" />
* объект obj объект, состояние которого нужно изменить,
+
    </rules>
* состояние string st новое состояние объекта.
+
    <field_pos>
+
    </field_pos>
=='''Удачный разбор'''==
+
    <field>    // где 0 - ячейка пустая
'''Удачный разбор''' изменить свойство объекта '''winChgPar add'''
+
        1,1,0,1,1,1,
* объект obj Объект Объект, свойство которого нужно изменить,
+
        1,1,1,1,1,1,
* свойство string par Свойство Свойство, которое нужно изменить,
+
        1,1,0,1,1,1,
* значение string val Значение Новое значение свойства.
+
        1,1,1,0,1,1,
+
        1,1,1,1,1,0
=='''Неудачный разбор'''==
+
    </field>
'''Неудачный разбор''' изменить состояние объекта '''loseChgSt add:'''
+
  </level>
* объект obj Объект Объект, состояние которого нужно изменить,
 
* состояние string st Состояние Новое состояние объекта.
 
 
=='''Неудачный разбор'''==
 
'''Неудачный разбор''' изменить свойство объекта '''loseChgPar add:'''
 
* объект obj Объект Объект, свойство которого нужно изменить,
 
* свойство string par Свойство Свойство, которое нужно изменить,
 
* значение string val Значение Новое значение свойства.
 
 
=='''Параметры memoClassicPars add'''==
 
'''Параметры memoClassicPars add'''
 
===''Подтип''===
 
''Подтип'' '''subType''' подтип игры:
 
* картинка-картинка=0,
 
* картинка-ключ=1.
 
  
===''Сложность''===
 
''Сложность'' '''level''' уровень сложности:
 
* легкая=0,
 
* сложная=1.
 
  
===''Повторения''===
+
====''Задание координат''====
''Повторения'' '''duplication''' повторения пар картинок:
 
* запрещены=0,
 
* разрешены=1.
 
  
===''Подложки'' ===
+
  <level id="1" rows="5" cols="6" time="60000" turns="6" frames="3" dup="0" clipBgs="231" clipImgs="232" clipKeys="232">
''Подложки'' '''bg''' клип с картинками для подложек.
+
    <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>
  
===''Легкие картинки''===
 
''Легкие картинки'' '''pict0''' клип с картинками для легкого уровня сложности.
 
  
===''Сложные картинки''===
+
=='''Бонусы'''==
''Сложные картинки'' '''pict1''' клип с картинками для сложного уровня сложности.
+
В мемори реализовано 6 бонусов:
 +
# добавить ходы;
 +
# добавить время;
 +
# добавить хинт открыть пару;
 +
# добавить хинт подсветить поле;
 +
# открыть пару;
 +
# подсветить поле.
  
===''Ключи''===
+
Назначение первых четырех бонусов заключается в переводе соответствующего актера в состояние fly. Начисление, анимация и т.п. должно происходить в этом состоянии.
''Ключи'' '''pictKey''' клип с картинками для ключей (для подтипа картинка-ключ).
+
Актеры устанавливаются в блоке параметров "настройка бонусов".
+
Каждый актер должен иметь состояние fly.
=='''Параметры memoFindOwnPars add''' ==
 
'''Параметры memoFindOwnPars add'''
 
  
===''Подложки''===
+
5-ый и 6-ой - бонусы в действии . То есть при открытии их на поле будет сразу произведено соответствующее действие.
''Подложки'' '''bg''' клип с картинками для подложек.
+
 +
Установка самих бонусов происходит в файле уровней с помощью тэга bonus.
  
===''Нейтральные картинки''===
+
            <bonus>
''Нейтральные картинки'' '''pictNeutral''' клип для нейтральных картинок.
+
                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''' очки за клик на свою картинку.
 
  
===''Очки за чужие ячейки''===
+
Для получении количества времени/ходов на стороне редактора после загрузки уровня в объект memory будет записан параметр "bonus_value".
''Очки за чужие ячейки'' "-20" '''scoreOther''' очки за клик на чужую картинку.
 
  
===''Очки за нейтральные ячейки''===
+
Пример актера.  
''Очки за нейтральные ячейки'' "10" '''scoreNeutral''' орчки за клик на нейтральную картинку.
 
  
===''Мультипликатор'' ===
+
[[Файл:Mem_actor.png]]
''Мультипликатор'' '''scoreMultiplier''' за первую правильно открытую ячейку 1Х очков, за вторую - 2Х и т.д.:
 
* нет=0,
 
* да=1.
 
  
===''Ячейки игроков''===
+
В данном примере в состоянии check мы устанавливаем нужную картинку в зависимости от количества бонусов. Состояние вызывается отдельно при загрузке уровня. В состоянии fly добавляем матчбэтлу количество ходов, считанное из параметра bonus_value. Делаем анимацию.
''Ячейки игроков'' "2" '''targetNum''' количество ячеек для каждого игрока.
 
 
=='''Параметры memoCopyPars add'''==
 
'''Параметры memoCopyPars add'''
 
  
===''Обычные картинки''===
+
==Хинты==
''Обычные картинки'' '''imgs0'''.
 
  
===''Верно нажатые''===
+
У memory есть 3 вида хинтов:
''Верно нажатые'' '''imgs1'''.
+
* показать пару ячеек - hntt=0
 +
* показать все ячейки - hntt=1
 +
* убрать пару ячеек - hntt=2
  
===''Неверно нажатые''===
+
Для активации хинта нужно передать memory соответствующее значение hntt и передать состояние hint.
''Неверно нажатые'' '''imgs2'''.
+
Также для memory определено состояние skip, при передаче которого игра завершается победой.
  
===''Подложки''===
 
''Подложки'' '''bgs'''.
 
  
===''id для картинок''===
+
==Состояния==
''id для картинок'' "0" '''imgId'''.
 
  
===''id для подложек''===
 
''id для подложек'' "0" '''bgId'''.
 
  
===''Пауза перед закрытием''===
 
''Пауза перед закрытием'' "500" '''endLevelPause'''.
 
  
===''Итерации''===
+
      ST_BEG = 0,          //!< начать игру; может вызываться из других объектов
''Итерации'' "1" '''numIters'''.
+
      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'''.
 
  
===''Массив стобцов''===
+
S:\!MOBILE\!!!EditorGames\Wiki_sample  Файл: memory_sample.zip
''Массив стобцов'' "4" '''colsArray'''.
 
  
===''Пустые ячейки''===
+
[[Category:Game mechanic]]
''Пустые ячейки'' "2" '''emptyArray'''.
+
[[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