Неделя первая - Тетрис

» опубликован
Вот и наступило 26 сентября, а это значит что именно сегодня участники конкурса карт «Мини-игры» должны поделиться информацией о том как обстоят у них дела на этапе разработки.
Мне наверное в каком то роде не повезло так как остальным, я действительно начал работу с нуля 20 сентября, не было каких либо наработок/заготовок/идей подходящего направления, в отличии от других участников.
Картинка к новости от 20 сентября поселила в мою голову воспоминания о 8/16 битных приставках, поэтому проектом для реализации я выбрал Dendy, да и более интересного ничего не пришло в голову, всё остальное мне показалось заезженным и избитым.
Для начала я решил сделать тетрис, на тот момент мне подумалось, что это одна из самых простых для реализации игр.
Скачал эмулятор, ром, запустил.. и чёт затянуло, просидел весь вечер проиграл в него :D, так и не взялся что-либо делать.
В первую очередь хочу, что бы результат получился как можно более похожим и внешне, и геймплеем. Решил начать с реализации внешнего вида, а потом уже реализовывать функционал и работу игры в целом.
Решил, что отличным вариантом для создания тетриса будет использование тайлов (ландшафт), ведь в функции на отрисовку ландшафта есть возможность установки именно нужной вариации тайла из тайлсета:
call SetTerrainType(Х,Y,айдиТайлСета,Вариация,Размер,Форма)
И для этой задачи я нарисовал собственные тайлсеты.
Импортировал их в карту, выставил порядок наложения, поработал кистью и в итоге получилось:
Далее разбил алфавит на 2 тайлсета, A-Q (17 букв) на первом и R-Z (9 букв) на втором.
После импорта букв я осознал, что идея тайлинга крайне не удачна и нужно искать другое решение для отрисовки элементов, так как тайлы накладываются друг на друга в строгом порядке, и это не подходит для решения задачи.
В итоге написать слово score на 5 соседних клетках подряд не получилось. (в рамках таких тайлсетов)
(Вообще о наложения слоёв я изначально знал, но почему-то не придал этому значения)
Так же остро стояла проблема раскраски блоков и алфавита, на мой взгляд будет уныло, если весь текст будет белым, а все блоки серыми, решил в новой реализации сделать под каждый кусок блока/символ отдельную модель со своими альфа-маской и цветом. Для этого придётся курить моделлинг, благо в разделе статей я смогу найти необходимую информацию.
О результатах этой затеи (и не только) я напишу в следующем недельном отчёте, следите за развитием данного проекта.
А пока можете порубать в тетрис на эмуляторе денди :D (ссылка) - там эмуль и ром тетриса, управление на стрелки, Z, X, Enter.
Благодарю за внимание и надеюсь на вашу поддержку.


Просмотров: 6 895

nvc123 #1 - 5 лет назад 1
существует универсальная модель способная динамично менять свою текстуру во время игры
и при этом она плоская(тоесть на неё можно натянуть иконку и она будет выглядеть в игре как иконка)
тебе надо лишь сделать иконки цифр/буков
awesomesk1ll #2 - 5 лет назад (отредактировано ) 0
nvc123:
существует универсальная модель способная динамично менять свою текстуру во время игры
Ты про Replaceable ID?
На самом деле я всё ещё думаю как уместить много цветовых вариантов в 1 модели.. хотелось бы.
Подробнее если можно).
alexprey #3 - 5 лет назад 1
awesomesk1ll, SetUnitVertexColor
awesomesk1ll #4 - 5 лет назад (отредактировано ) 0
alexprey:
awesomesk1ll, SetUnitVertexColor
Хм, хорошая мысль, думаю так и сделаю, спасибо!
Итого по 1 модели+текстуре на символ..
nvc123 #5 - 5 лет назад 1
awesomesk1ll, xgm.guru/p/wc3/various_textures
достаточно 1 модели на все кнопки
готовую модель можно взять в дгуи
Melissa #6 - 5 лет назад 1
А какая игра на очереди после тетриса? :-)
Хотя и с ним одним уже всё круто :(
awesomesk1ll #7 - 5 лет назад (отредактировано ) 0
Melissa:
А какая игра на очереди после тетриса? :-)
или battle city или magic jewelry, может и вообще что-то другое, пока не решил).
Melissa #8 - 5 лет назад -1
Танчики проще) А "3 в ряд" никому не интересны, мне кажется. кроме меня
Кстати для "поиграть в денди" FCEultra надежнее
4 комментария удалено
awesomesk1ll #13 - 5 лет назад 0
Сейчас уже ломаю мозг с кодом, как лучше будет, не могу решить, через области, через массивы, через отряды.. Столько вариантов.
Ну двигать SetUnitX/Y буду, это то понятно. Цвет юнита через owner'а или CustomValue..
Таранес #14 - 5 лет назад -1
Данный проект радует меня тем, что он четко соответствует тематике конкурса - это мини игра, а не мини карта. И пусть тетрис и банально, но для меня эта мини игра - одна из победителей.
16GB #15 - 5 лет назад -3
Таранес,
тебе нравится то, что не похоже на варкрафт
понятно
Melissa #16 - 5 лет назад -1
Цвет юнита через owner'а или CustomValue..
Цвет танчика что ли? Или камня? Что будет то - батл сити?
awesomesk1ll #17 - 5 лет назад (отредактировано ) 0
Melissa:
Цвет танчика что ли? Или камня? Что будет то - батл сити?
Цвет блоков/символов в тетрисе. Всего в тетрисе 11 цветов для символов/блоков используется.
nvc123 #18 - 5 лет назад 1
awesomesk1ll, опиши поконкретнее что собираешься писать я подскажу как это лучше реализовать
awesomesk1ll #19 - 5 лет назад (отредактировано ) 0
nvc123:
awesomesk1ll, опиши поконкретнее что собираешься писать я подскажу как это лучше реализовать
Контроль кусков в тетрисе, как держать их, как двигать/заменять и прочее, каким образом держать в памяти для удобного доступа.
Имеется поле например:
22 тайла в высоту и 10 тайлов в ширину.
Движение падающей фигуры будет реализовано через таймер думаю, что бы удобно регулировать скорость. (регулировать время таймера)
Движение будет строго по центрам тайлов (резкими прыжками на 128 по Y, как в денди)
Все фигуры состоят из 4 юнитов каждая
Мне нужно определиться как держать в памяти все блоки в "стакане", что бы иметь быстрый доступ к любому юниту с целью замены или удаления, движения и т.д
Melissa #20 - 5 лет назад -1
awesomesk1ll, через CV грамотнее будет имхо)
awesomesk1ll:
Контроль кусков в тетрисе, как держать их, как двигать/заменять и прочее, каким образом держать в памяти для удобного доступа.
Используй CV как номер и меняй данные массивные для всего)
nvc123 #21 - 5 лет назад 1
Melissa, в данном случае cv не в тему какбы
awesomesk1ll, двухмерный массив структур
надеюсь вджасс и сиджасс знаешь?
awesomesk1ll #22 - 5 лет назад (отредактировано ) 0
nvc123:
надеюсь вджасс и сиджасс знаешь?
неа), ну двухмерный массив чего - юнитов?
я так хотел делать. Но как отслеживать связи, кто из каких юнитов с каким связан.. (образуют фигуру или часть её)
Таранес #23 - 5 лет назад 1
16GB, видимо ты меня не понял. Варкрафт - игра. Тот же Гран-при Азерот это мини игра. Мини игра для меня - это что-то небольшое, простое и приятное.
nvc123 #24 - 5 лет назад (отредактировано ) 0
awesomesk1ll, массив структур
точнее экземпляров структур
фигуру тоже через структуры
кроме того экземпляр структуры блок может хранить в себе экземпляр структуры фигура
у меня в блоге есть скрытые статьи которые могут помочь
прими приглашение
так же есть файлик про структуры и прочее
awesomesk1ll #25 - 5 лет назад (отредактировано ) 0
nvc123:
awesomesk1ll, массив структур
Ох, не.. После прочтения на 1 раз двух статей, в моей голове мало очень осело.. Я с джассом еще пока не "на ты", а v/cJass это вообще что-то далекое)).
В моей голове это был простой цикл с движением 4 юнитов (for 1 to 4), который в свою очередь прицеплен на таймер, который регулируется сложностью. Как то так, вот это доступно для моего понимания, а массив структур..
Вообще v/c jass вроде на уровень выше чем jass, и должны быть для понимания проще по идее, но почему то не в моем случае.
Melissa #26 - 5 лет назад 1
Через cv всё очень просто как раз-таки делается, особенно раз надо просто 4 юнита в фигуре.
darkowlom #27 - 5 лет назад -1
Я когда-то хотел делать тетрис и писал систему падения и двигания фигурок, правда тогда я мало чего знал и сделал очень утечную гуи наработку, если перевести в джазз убрать все бж удалять локации и тд, то может лагать не будет, могу описать алгоритм, в принципе там все просто в реализации
Но насчет оптимизации нагрузки я очень сомневаюсь
Melissa #28 - 5 лет назад 2
Зачем удалять локации, если можно задать их 1 раз как константы и использовать всю игру?)
darkowlom #29 - 5 лет назад -1
Melissa, тоже вариант, на каждую клетку создавать локацию и циклом перебирать массив на предмет занятости клетки юнитом
awesomesk1ll #30 - 5 лет назад (отредактировано ) 0
Нене, точки использовать в данном случае точно глупо, потому что есть нативки для движения только по x или y.
У меня пока времени нет добраться до компутера, что бы что-то накидать, (работа/дорога/сон, благо инет под рукой, смартфон штука удобная xd), поэтому я пока в голове прокручиваю варианты..
Мой вариант примерно такой, раз все фигуры в тетрисе состоят из 4 "точек". Для текущей(падающей) фигуры объявляется массив из 4 юнитов, и двигается for 1 to 4 вниз, запускается этот цикл таймером.
Для поворота фигуры так же по этому же циклу проверяется, есть ли место для "проворота фигуры".
Для движения влево/вправо, так же проверка по циклу.
А вот как именно проверять есть ли там юнит в "слоте" или же пусто, это отдельный вопрос, можно областями, можно в переменной держать для каждой ячейки булю на занятость.
darkowlom #31 - 5 лет назад (отредактировано ) 1
awesomesk1ll, нет ли там уже занятой клетки как проверять будешь? Я бы просто запустил функцию перемещения в следующую точку, и проверив ее занятость остановил бы движение фигуры
Проще, если юнит не может туда переместиться из-за того что занято другим юнитом (Если коллизия включена) то не выполнять функцию, для этого то я точки и предлагаю использовать
nvc123 #32 - 5 лет назад 0
awesomesk1ll, сиджасс проще чем просто джасс
для занятости есть очень крутая проверка
if(a[i]==null)
где a массив юнитов а i индекс ячейки
но структурами намного проще
struct Map{
Cell cells[10][22];

}

struct Cell{
bool is;
unit u;

}
первая структура это наше поле(10 на 22 ячеек)
вторая это ячейка(содержит булеан и юнита)
awesomesk1ll #33 - 5 лет назад (отредактировано ) 0
nvc123:
awesomesk1ll, сиджасс проще чем просто джасс
для занятости есть очень крутая проверка
if(a[i]==null)
где a массив юнитов а i индекс ячейки
Юнитов в массиве записывать нужно значит, и обнулять если переносишь из ячейки в ячейку. (Я примерно так хотел делать)
Если юнита ремувишь, насколько помню - не надо обнулять, хендл должен убиваться..
Со структурами конечно выглядит красиво, но я не понимаю как ими пользоваться, мне всё это в новинку) т.к я стремный "кодер", я на примерах джасс учу), осваивать джасс вообще начал на базе .j файла внутри карты после xdep'а (была нужда переделать кое-что под себя, а для этого нужно было понять как что работает), а по профе я гуманитарий вообще), на самом деле спасибо за попытку объяснить мне), может спустя какое то время дойдёт) (что-то перечитаю/переосознаю)
nvc123 #34 - 5 лет назад (отредактировано ) 1
awesomesk1ll,
структура это класс объекта
например структура яблоко
просто яблоко не определённое
а экземпляр структуры(объект) это определённое яблоко
яблоко имеет свойства(поля) например цвет,вкус
и имеет действия(методы) например оно может портиться,может упасть
прочитай тот файл что я скинул
вот он xgm.guru/files/705/97998/comments/178733/vJass.doc
это переведённый док по вджассу(структуры это часть вджасса)
без них код будет очень сложным в дальнейшим
так же можешь посмотреть примеры юза структур
awesomesk1ll #35 - 5 лет назад (отредактировано ) 0
Я его прочел уже). Примеры посмотрю. Спасибо
структура это класс объекта
например структура яблоко
просто яблоко не определённое
а экземпляр структуры(объект) это определённое яблоко
яблоко имеет свойства(поля) например цвет,вкус
и имеет действия(методы) например оно может портиться,может упасть
Я это понимаю в принципе, поверхностно. У меня в голове аналогия с бд, 1 строка, несколько полей).
Просто я на примерах учусь, мне нужно пару примеров повторить, пощупать).
awesomesk1ll #36 - 5 лет назад (отредактировано ) 0
Вчера добрался до компутера, начал делать, катастрофически застрял на алгоритмах).
Если кто поможет с алгоритмами буду очень благодарен, голову сломал уже (: