2048

Материал из wiki.appsalutecreator.com
Перейти к: навигация, поиск

2048 (twentyfourtyeight) - встроенный объект редактора, который реализует механику игры 2048.

Правила игры

1. Для игры используется поле размером 4х4, по которому могут перемещаться плитки с цифрами(цифры, являются степенью 2).
2. В начале игры на поле имеется 2 плитки, с номиналом 2 или 4.
3. С помощью свайпа игрок может скинуть все плитки игрового поля в одну из 4 сторон.
4. После свайпа в свободной клетке появляется плитка с номиналом 2 или 4.
5. Если при сбрасывании две плитки одного номинала «налетают» одна на другую, то они слипаются в одну,
номинал которой равен сумме соединившихся плиток.
6. Если при свайпе местоположение плиток или их номинал не изменится, то ход не совершается.
7. За каждое соединение игровые очки увеличиваются на номинал получившейся плитки.
8. Игра заканчивается, если после очередного хода невозможно совершить действие.
9. Для победы нужно получить плитку номиналом 2048(или другое значение, указанное в параметрах).


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

Кроме базовых параметров объекта, имеет ряд специализированных параметров.

Параметры объекта 2048

(Курсивом в скобках указан id параметра, или состояния).

  • ячейка сетки (cell_res) - Графический ресурс, для отображения плитки.
  • ободок ячейки (cell_border_res) - Графический ресурс ободка плитки.
  • графика цифр (num_pics) - Клип с картинками цифр. Цифрам 2,4,8,16,32... соответствую кадры 0,1,2,3,4....


Группа - размер поля - Позволяет изменять размер стандартного игрового поля (4х4).

  • столбцов (cols) - Ширина игрового поля.
  • строк (rows) - Высота игрового поля.


  • задержка анимации числа (number_scaling_delay) - Задержка после анимации появления, после которой начнётся анимация числа внутри ячейки.
  • область текста (max_cell_text_ratio) - Максимальная область, занимаемая текстом относительно размеров ячейки.
  • время перемещения (item_moving_time) - Время, за которое элементы будут перемещены в одну сторону в миллисекундах.
  • чувствительность свайпа (swipe_length) - Количество пикселей, которые нужно провести, прежде чем сработает событие свайпа.
  • пульсация при матче (scale_number_on_match) - Разрешает анимацию номера внутри ячейки после матча.
  • пульсация при появлении (scale_number_on_appear) - Разрешает анимацию номера внутри ячейки при появлении.


Группа - анимация появления

  • время масштабирования (item_scaling_time) - Время за которое масштаб достигнет максимума в миллисекундах.
  • минимум масштаба (item_scaling_start) - Пороговое значение масштаба, с которого элемент начнёт увеличиваться.
  • максимум масштаба (item_scaling_end) - Пороговое значение масштаба, после которого элемент начнёт уменьшаться.


Группа - шрифт

  • имя (font) - Ещё не реализовано.
  • размер (font_size) - Размер шрифта в пикселях.


Группа - звуки

  • звук свайпа (swipe_sound) - Id звука в редакторе ресурсов. Перетягивается мышкой с редактора ресурсов(Поле должно быть активно для редактирования).
  • звук появления (appear_sound) - Id звука в редакторе ресурсов. Перетягивается мышкой с редактора ресурсов(Поле должно быть активно для редактирования).
  • звук матча (match_sound) - Id звука в редакторе ресурсов. Перетягивается мышкой с редактора ресурсов(Поле должно быть активно для редактирования).


  • счетчик очков (score_counter) - Счетчик, куда будут выводится заработанные очки.
  • набрать очков (score_to_reach) - Количество очков которые требуются, чтобы выиграть игру.
  • достигнуть значения (value_to_reach) - Достигнуть значения на поле, чтобы выиграть. Значение должно быть степенью двойки.


Добавляемые параметры

Дополнительные параметры объекта 2048

+.png Добавить цвет для значения(color_list) - Добавить цвет ячейки, соответствующий определённому значению.

  • значение (item_value) - Значение. Должно быть степенью двойки. Ноль для цвета фона.
  • цвет фона (item_color) - Цвет ячейки с соответствующим значением.
  • цвет шрифта (item_font_color) - Цвет шрифта ячейки, которым будет отрисовано значение.


+.png игра проиграна: изменить параметр (свойство) объекта(game_lost_param) - Когда игра проиграна изменить параметр объекта.

  • объект (obj) - После успешной вставки этот объект меняет свой параметр.
  • свойство (par) - Параметр, который мы изменяем.
  • значение (val) - Новое значение параметра.

+.png игра проиграна: изменить состояние объекта(game_lost_state) - Когда игра проиграна перевести объект в новое состояние.

  • объект (obj) - После успешной вставки этот объект переходит в состояние из следующего поля.
  • состояние (st) - Новое состояние для объекта из предыдущего поля.

+.png игра выиграна: достигнуто значение(game_value_reached_param) - Когда игра выиграна изменить параметр объекта.

  • объект (obj) - После успешной вставки этот объект меняет свой параметр.
  • свойство (par) - Параметр, который мы изменяем.
  • значение (val) - Новое значение параметра.

+.png игра выиграна: достигнуто значение(game_value_reached_state) - Когда игра выиграна перевести объект в новое состояние.

  • объект (obj) - После успешной вставки этот объект переходит в состояние из следующего поля.
  • состояние (st) - Новое состояние для объекта из предыдущего поля.

+.png игра выиграна: набраны очки(game_score_reached_param) - Когда игра выиграна изменить параметр объекта.

  • объект (obj) - После успешной вставки этот объект меняет свой параметр.
  • свойство (par) - Параметр, который мы изменяем.
  • значение (val) - Новое значение параметра.

+.png игра выиграна: набраны очки(game_score_reached_state) - Когда игра выиграна перевести объект в новое состояние.

  • объект (obj) - После успешной вставки этот объект переходит в состояние из следующего поля.
  • состояние (st) - Новое состояние для объекта из предыдущего поля.

+.png достигнуто новое максимальное значение(game_reached_new_max_value_param) - Достигнуто новое максимальное значение в клетке: изменить параметр (свойство) объекта. Само значение можно получить из поля maxValue.

  • объект (obj) - После успешной вставки этот объект меняет свой параметр.
  • свойство (par) - Параметр, который мы изменяем.
  • значение (val) - Новое значение параметра.

+.png достигнуто новое максимальное значение(game_reached_new_max_value_state) - Достигнуто новое максимальное значение в клетке: изменить состояние объекта. Само значение можно получить из поля maxValue.

  • объект (obj) - После успешной вставки этот объект переходит в состояние из следующего поля.
  • состояние (st) - Новое состояние для объекта из предыдущего поля.

+.png ход завершен(turn_done_param) - Изменить параметр (свойство) объекта, когда был сделан ход.

  • объект (obj) - После успешной вставки этот объект меняет свой параметр.
  • свойство (par) - Параметр, который мы изменяем.
  • значение (val) - Новое значение параметра.

+.png ход завершен(turn_done_state) - Изменить состояние объекта, когда был сделан ход.

  • объект (obj) - После успешной вставки этот объект переходит в состояние из следующего поля.
  • состояние (st) - Новое состояние для объекта из предыдущего поля.


Примечания и дополнения

Из объекта можно вычитать несколько значений: maxValue, maxValueCellX, maxValueCellY.

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

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

  • maxValueCellX - координата x ячейки(собранной первой) с максимальным значением.
  • maxValueCellY - координата y ячейки(собранной первой) с максимальным значением.

Одно из возможных применений данных координат: вместе с событием "достигнуто новое максимальное значение" сделать эффект для сборки нового максимального значения.

При использовании была замечена ситуация некорректной работы объекта: на игровом поле размещалась неподвижная плитка, которая иногда пряталась под другие плитки, иногда прятала плитки под себя. С другими плитками не матчилась. В основном данная ситуация наблюдалась когда управление реализовывалось с помощью клавиш. И возникала при многократном нажатии всех 4 клавиш. (В скором времени будет исправлено.)

Свою конфигурацию объект не запоминает. Продолжить работу с объектом при возвращении после перехода на другой экран нельзя.

Состояния

Объекту можно передавать состояния: create_items, undo, skip, swipe_left, swipe_right, swipe_up, swipe_down, mix, restart.

  • swipe_(right, left, up, down) - Передача данных состояний объекту равносильно свайпу в соответствующем направлении. С помощью данных состояний можно управлять объектом кнопками(или другими объектами) на экране. Также, если использовать объект controls, можно реализовать управление с помощью клавиш.
  • create_items - Используется для запуска объекта. При этом на поле появляются 2 плитки.
  • undo - Используется для отмены хода. Отменить можно только один ход. Использовать осторожно, так как, если сделать отмену до первого свайпа, то отменится состояние "create_items". И на экране будет пустое игровое поле. (Данная ситуация в процессе доработки программистами)
  • skip - Пропуск хода. При использовании появляется новая плитка без совершения свайпа. Также после передачи этого состояния сработает событие "ход завершен".
  • mix - Перемешает плитки на игровом поле.
  • restart - Полностью перезапустит игру.

Пример

Можно посмотреть по адресу: S:\!MOBILE\!!!EditorGames\Wiki_sample\2048.7z

Настройка игрового объекта

Настроим проект 2048. Создаем объект twentyfourtyeight и задаем ему значения:

2048
W1.png
W4.png

После настройки объекта twentyfourtyeight необходимо добавить 4 кнопки (button) управления:

  • arrow_down_norm (вниз),
  • arrow_left_norm (лево),
  • arrow_right_norm (право),
  • arrow_up_norm (вверх)

Для связи кнопок с игрой необходимо создать в объекте controls 4 копии машин down, left, right, up.

(в машинах меняеться только состояние)

  • swip_down (вниз),
  • swip_left (лево),
  • swip_right (право),
  • swip_up (вверх).
W5.png         W6.png

В машине start_game прописываем запуск игры

W7.png

В таймере (timer) и счетчиках (counter) прописываем уровень игры

W8.png W9.png

Для кнопок «пропустить ход» и «отменить ход» создаем машины с двумя состояниями, в кнопках изменяем состояние объекта

W10.png

Для кнопки «сброс» машина reset_game

W11.png

Для сохранения игровых параметров, использования на итоговом экране и переходим на этот экран создаем машину data_save

data_save

На экране результатов создаем 3 счетчика, таймер, текст и кнопки перехода.

Экран результатов game_result
W14.png

Машина occured_victory нужна для показания результатов игры

В обьекте 2048 указываем состояние машины occured_victory

occured_victory    
W16.png

Машина reference_values передает в счетчики значения (запускается машиной data_save)

reference_values

Машина result_game выводит текст на экран результатов с активными масками

result_game