Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 14 окт 2024, 11:13

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 13 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Samurai
СообщениеДобавлено: 27 мар 2012, 21:20 
Не в сети
Аватара пользователя

Сообщения: 11
Представляю вашему вниманию небольшую игру. По-сути, это демо-версия. Эксперименты с использованием SDL. Буду рад критике. Особенно критике кода. В самой реализации не всё так гладко, как хотелось бы. В частности, просчёт столкновений самый примитивный и требует доработки. Я думаю, что некоторые вещи можно было бы реализовать проще и красивее. Например, систему анимации.


Вложения:
Samurai.rar [1.43 МБ]
Скачиваний: 1490
screenshot.JPG
screenshot.JPG [ 32.5 КБ | Просмотров: 37600 ]
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Samurai
СообщениеДобавлено: 27 мар 2012, 23:56 
Не в сети
Аватара пользователя

Сообщения: 11
Совсем забыл сказать про управление.
Стрелки вправо и влево - соответствующие движения. Стрелка вверх - прыжок. Пробел - удар мечом


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Samurai
СообщениеДобавлено: 28 мар 2012, 08:54 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Браво!

Пока замечания не по коду, а так, придирки по мелочам. :oops:

    1. Разрубил яблочко только раз из 30 попыток. :) Сложновато играть.
    2. Игра не закрывается нажатием крестика (только по Esc).

Хотел слинковать отдельный Samurai.exe (для тех, кто не знаком с BlackBox), но увидел зависимость от StdLog. Кстати, для таких случаев можно сделать эмулятор StdLog'а в консоль (примерно как в DoxBox).

В целом, игра получается очень красивая, Rafi. Оттенки жёлтого-коричневого просто потрясающие. Нам с женой понравилось. :)


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Samurai
СообщениеДобавлено: 28 мар 2012, 09:58 
Не в сети
Аватара пользователя

Сообщения: 11
Спасибо за комментарий) Рад, если оставило приятные впечатления.
Поначалу да, может показаться сложным. Испытывал на своём младшем брате. Он тоже поначалу проигрывал. Потом разыгрался и проходил с лёгкостью))
Совсем забыл про выход по крестику(
И StdLog... Тоже забыл убрать. Сегодня исправлю.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Samurai
СообщениеДобавлено: 28 мар 2012, 20:58 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Кстати, ведь лог полезен для отладки. Можно упрятать зависимость от StdLog внутри складок (селекторов) – прямой аналог ifdef'ов в ББ: http://oberoncore.ru/wiki/blackbox/devselectors

Как линковать независимый от ББ EXE-шник для Винды: http://oberoncore.ru/wiki/blackbox/make_exe

Если интересно, расскажу как линковать для Linux (только надо будет избавиться от зависимости от WinApi).

Также, если интересно, расскажу как я в Dash'е влинковываю ресурсы (картинки) прямо в тело EXE-файла. Смысл – скрыть структуру ресурсов (и усложнить их подмену). Ну и один EXE-файл получается, а не целая куча. Снижается риск, если вдруг какой-то из ресурсных файлов удалят.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Samurai
СообщениеДобавлено: 28 мар 2012, 21:23 
Не в сети
Аватара пользователя

Сообщения: 11
Залил исправленную версию. Спрятал лог в селекторы)


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Samurai
СообщениеДобавлено: 29 мар 2012, 20:35 
Не в сети

Сообщения: 2
ммм, я вот как раз из тех кто не знаком с Black Box, что бы это ни означало( А поиграть хочется.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Samurai
СообщениеДобавлено: 31 мар 2012, 14:55 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Для Кати выкладываю готовую собранную игру: https://zx.oberon.org/files/Samurai.Exe.zip.

Для Дениса (Rafi) изменённые (и добавленный) файлы (прикрепил вложением).

EXE’шник получился после линковки 80 Кб, после UPX’а – 34 Кб. Не так уж много.

По ходу линковки вынес для себя несколько полезных мыслей.

    1. В подсистему Sdl надо ввести переключение платформ вкладками (селекторами), появится возможность легко выбирать в коммандере под какую платформу компилируем:

    Код: "OBERON"
    1. # Win32 application:
    2. {o} DevCompiler.CompileThis SamuraiAnimationData SamuraiRandom
    3. SdlSdl(OS:Win32) SdlImage(OS:Win32) SamuraiObjects SamuraiGraphics SamuraiCore Samurai ~

    Или:
    Код: "OBERON"
    1. # Linux shared object:
    2. {o} DevCompiler.CompileThis SamuraiAnimationData SamuraiRandom
    3. SdlSdl(OS:Linux) SdlImage(OS:Linux) SamuraiObjects SamuraiGraphics SamuraiCore ~

    Вот тогда-то и попробуем собрать 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 (выявленные им ошибки он же как-то выводит в окне). Такой вариант выглядит интересным.


Вложения:
Samurai.Src.zip [7.32 КБ]
Скачиваний: 1457
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Samurai
СообщениеДобавлено: 31 мар 2012, 19:12 
Не в сети
Аватара пользователя

Сообщения: 11
Олег, огромное спасибо за проделанную работу и пояснения! И за очередную пищу для размышлений) Сам бы я с линковкой ещё долго бы возился.
Хочу только добавить, что в архиве с экзешником не хватает zlib1.dll.
Качественный ГСЧ был бы кстати. Для Самурая я взял реализацию ГСЧ с оберонкора: http://forum.oberoncore.ru/viewtopic.ph ... 680#p31081
Просьба поподробней рассказать про смартлинкер. А то интуитивно понимаю его смысл, но хотелось бы знать точно)


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Samurai
СообщениеДобавлено: 01 апр 2012, 12:09 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Rafi писал(а):
Хочу только добавить, что в архиве с экзешником не хватает zlib1.dll.
Добавил. Оказывается, у меня в SYSTEM32 уже лежал zlib1.dll, поэтому я его и упустил, думал, не понадобится. :oops:

Легко и быстро проделанная линковка — это всецело твоя заслуга, ибо ты писал код чисто и практически без зависимостей от ББ.

Цитата:
Просьба поподробней рассказать про смартлинкер. А то интуитивно понимаю его смысл, но хотелось бы знать точно)
Тема заслуживает отдельной форумной статьи, и это тоже надо в туду, но если вкратце, то для линковки отдельных, независимых от BlackBox программ для Windows/Linux (да и других платформ) есть смысл включать в отчуждаемые EXE/DLL/SO только то, что реально нужно, реально используемые данные и код. DevLinker и DevElfLinker так делать пока что не умеют, они включают код/данные всех перечисленных модулей целиком. Смартлинкер поможет снизить расходы по памяти (как дисковой, так и оперативной) за счёт уменьшения размера EXE/DLL/SO.


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club