Оберон-клуб «ВЄДАsoft» https://zx.oberon.org/forum/ |
|
Samurai https://zx.oberon.org/forum/viewtopic.php?f=13&t=5 |
Страница 1 из 2 |
Автор: | Rafi [ 27 мар 2012, 21:20 ] | |||
Заголовок сообщения: | Samurai | |||
Представляю вашему вниманию небольшую игру. По-сути, это демо-версия. Эксперименты с использованием SDL. Буду рад критике. Особенно критике кода. В самой реализации не всё так гладко, как хотелось бы. В частности, просчёт столкновений самый примитивный и требует доработки. Я думаю, что некоторые вещи можно было бы реализовать проще и красивее. Например, систему анимации.
|
Автор: | Rafi [ 27 мар 2012, 23:56 ] |
Заголовок сообщения: | Re: Samurai |
Совсем забыл сказать про управление. Стрелки вправо и влево - соответствующие движения. Стрелка вверх - прыжок. Пробел - удар мечом |
Автор: | Zorko [ 28 мар 2012, 08:54 ] |
Заголовок сообщения: | Re: Samurai |
Браво! Пока замечания не по коду, а так, придирки по мелочам.
2. Игра не закрывается нажатием крестика (только по Esc). Хотел слинковать отдельный Samurai.exe (для тех, кто не знаком с BlackBox), но увидел зависимость от StdLog. Кстати, для таких случаев можно сделать эмулятор StdLog'а в консоль (примерно как в DoxBox). В целом, игра получается очень красивая, Rafi. Оттенки жёлтого-коричневого просто потрясающие. Нам с женой понравилось. |
Автор: | Rafi [ 28 мар 2012, 09:58 ] |
Заголовок сообщения: | Re: Samurai |
Спасибо за комментарий) Рад, если оставило приятные впечатления. Поначалу да, может показаться сложным. Испытывал на своём младшем брате. Он тоже поначалу проигрывал. Потом разыгрался и проходил с лёгкостью)) Совсем забыл про выход по крестику( И StdLog... Тоже забыл убрать. Сегодня исправлю. |
Автор: | Zorko [ 28 мар 2012, 20:58 ] |
Заголовок сообщения: | Re: Samurai |
Кстати, ведь лог полезен для отладки. Можно упрятать зависимость от StdLog внутри складок (селекторов) – прямой аналог ifdef'ов в ББ: http://oberoncore.ru/wiki/blackbox/devselectors Как линковать независимый от ББ EXE-шник для Винды: http://oberoncore.ru/wiki/blackbox/make_exe Если интересно, расскажу как линковать для Linux (только надо будет избавиться от зависимости от WinApi). Также, если интересно, расскажу как я в Dash'е влинковываю ресурсы (картинки) прямо в тело EXE-файла. Смысл – скрыть структуру ресурсов (и усложнить их подмену). Ну и один EXE-файл получается, а не целая куча. Снижается риск, если вдруг какой-то из ресурсных файлов удалят. |
Автор: | Rafi [ 28 мар 2012, 21:23 ] |
Заголовок сообщения: | Re: Samurai |
Залил исправленную версию. Спрятал лог в селекторы) |
Автор: | Mogy4ayaaa_riba [ 29 мар 2012, 20:35 ] |
Заголовок сообщения: | Re: Samurai |
ммм, я вот как раз из тех кто не знаком с Black Box, что бы это ни означало( А поиграть хочется. |
Автор: | Zorko [ 31 мар 2012, 14:55 ] | ||
Заголовок сообщения: | Re: Samurai | ||
Для Кати выкладываю готовую собранную игру: https://zx.oberon.org/files/Samurai.Exe.zip. Для Дениса (Rafi) изменённые (и добавленный) файлы (прикрепил вложением). EXE’шник получился после линковки 80 Кб, после UPX’а – 34 Кб. Не так уж много. По ходу линковки вынес для себя несколько полезных мыслей.
Код: "OBERON" Или: Код: "OBERON" Вот тогда-то и попробуем собрать Samurai для Linux. 2. Крайне необходим смартлинкер для Оберона (КП/ББ). Идею такого линкера я давно вынашиваю, но до реализации руки пока не доходят. Замечу, что много процедур из Math и Strings в игре Samurai не востребованы и не используются. Но они попали в EXE-файл. А без них Samurai.exe был бы ещё меньше. Даже думать боюсь, что будет если и ядро будет включено туда не всё, а только используемые процедуры и данные. Размер игры тогда вообще может снизиться килобайт до 10-15. 3. Дописал себе в туду написать статейку про включение ресурсов внутрь EXE-файла. Хочется всё описать досконально и привести доводы, почему это делается именно таким способом, и как можно было бы ещё (альтернативные варианты). Попутно надо спросить в рассылке по ББ, с какой целью OMinc ввели лимит на размер кодовых процедур. Вобщем, целое дело, но доберёмся и сделаем. 4. По генератору случайных чисел. Вижу, ты используешь классику — ГСЧ, предложенный в книге “Martin Reiser, Niklaus Wirth, Programming In Oberon”. Для реального применения в играх этот генератор надо слегка доработать. Потому что он даёт псевдослучайную последовательность, поэтому, например, возможна раздача тех же комбинаций карт в одни руки и т.п. Заметь, когда мы запускаем Самурая несколько раз, первое яблочко всегда летит по одинаковой траектории. Я использую этот же генератор, но инициализирую Random.PutSeed с помощью WinApi.GetTickCount (или в линуксе time(0)). Но этот вариант платформенно-зависимый. Наверное будет нелегко сделать платформенно-независимый генератор, который не будет использовать никаких системных особенностей, но идея, как этого достичь, приводится в книге “Арсак Ж. Программирование игр и головоломок”. Если вкратце, то надо ориентироваться на случайность длины пауз между нажатиями клавиш, брать данные для ГСЧ из движений мышки и т.п. Способ конечно тоже не совсем независимый от платформы, но всё же при работе с SDL видится возможным завести такой счётчик при обработке событий. Но будет значительно лучше скомбинировать высокоточный таймер и данные от реакции пользователя, так можно добиться настоящей неподдельной случайности, а не псевдо. Ну это может уже не для Самурая, для других игр. Поскольку в Оберон-средах проблема качественного ГСЧ кардинально не решена, то хорошо бы начать разработку библиотеки XMath, куда войдёт такая реализация быстрого и универсального ГСЧ, идеально подходящего для игр. 5. Попробовал сформировать самый минимум файлов для независимой игры. Выяснилось, что если не будет библиотеки libpng15-15.dll, то выдаваемая игрой ошибка выглядит довольно странно. Подобным же образом выглядит отсутствие ресурсных файлов. Надо бы сделать более ясное уведомление (в консоль или в диалоговом окошке) и корректное завершение. Может этого можно как-то достичь пользуясь функционалом ядра Kernel (выявленные им ошибки он же как-то выводит в окне). Такой вариант выглядит интересным.
|
Автор: | Rafi [ 31 мар 2012, 19:12 ] |
Заголовок сообщения: | Re: Samurai |
Олег, огромное спасибо за проделанную работу и пояснения! И за очередную пищу для размышлений) Сам бы я с линковкой ещё долго бы возился. Хочу только добавить, что в архиве с экзешником не хватает zlib1.dll. Качественный ГСЧ был бы кстати. Для Самурая я взял реализацию ГСЧ с оберонкора: http://forum.oberoncore.ru/viewtopic.ph ... 680#p31081 Просьба поподробней рассказать про смартлинкер. А то интуитивно понимаю его смысл, но хотелось бы знать точно) |
Автор: | Zorko [ 01 апр 2012, 12:09 ] |
Заголовок сообщения: | Re: Samurai |
Rafi писал(а): Хочу только добавить, что в архиве с экзешником не хватает zlib1.dll. Добавил. Оказывается, у меня в SYSTEM32 уже лежал zlib1.dll, поэтому я его и упустил, думал, не понадобится. Легко и быстро проделанная линковка — это всецело твоя заслуга, ибо ты писал код чисто и практически без зависимостей от ББ. Цитата: Просьба поподробней рассказать про смартлинкер. А то интуитивно понимаю его смысл, но хотелось бы знать точно) Тема заслуживает отдельной форумной статьи, и это тоже надо в туду, но если вкратце, то для линковки отдельных, независимых от BlackBox программ для Windows/Linux (да и других платформ) есть смысл включать в отчуждаемые EXE/DLL/SO только то, что реально нужно, реально используемые данные и код. DevLinker и DevElfLinker так делать пока что не умеют, они включают код/данные всех перечисленных модулей целиком. Смартлинкер поможет снизить расходы по памяти (как дисковой, так и оперативной) за счёт уменьшения размера EXE/DLL/SO.
|
Страница 1 из 2 | Часовой пояс: UTC + 2 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |