Важная информация

User Tag List

Страница 28 из 32 ПерваяПервая ... 242526272829303132 ПоследняяПоследняя
Показано с 271 по 280 из 317

Тема: Что нужно для написания игр ?

  1. #271
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    Мой алгоритм организации игры никого не заинтересовал? Иным способом скорлинг игрового пространства и логику врагов тяжко делать будет.
    Уточните пожалуйста, еще раз, как вы предлагали. У меня пока в голове должно все уложиться для продолжения работы.

    Пока предполагаетсяа такая организация:
    Карта фона уровня. Может быть больше окна. Состоит из массива номеров спрайтов размером в 1 клетку (8х8 точек). На карте располагаются стены, проходы, заправки и другие неподвижные объекты.

    Из карты уровня копируем в таблицу 1 номера одноклеточных спрайтов фона. В этой таблице будем хранить текущее состояние игрового окна с учетом возможных разрушений объектов. Размер таблицы: 21 строка по 32 клетки.

    На основе первоначального состояния таблицы 1 заполняем графикой окно игры. Одноклеточные спрайты располагаются в двух соответствующих областях. BITMAP_1X1 - тут хранится черно-белый рисунок спрайта, по 8 байтов на спрайт. ATTR_1X1 - тут хранятся цвета спрайтов (атрибуты), по одному байту на спрайт.

    Для изображения одноклеточных спрайтов на экране возможно будет организован буфер печати спрайтов. Предполагается, что различные подпрограммы в процессе цикла игры могут изменять состояние игрового окна. Например, нужно будет изобразить выстрел, затем стереть следы выстрела, стереть разрушенную стену и т.п. Это может происходить в произвольные моменты относительно положения луча телевизора на экране.

    Поэтому, для избежания лишних мерцаний на экране, каждая такая подпрограмма будет только вычислять адрес одноклеточного спрайта и адрес на экране, куда этот спрайт надо впечатать. Затем эти адреса записывать в буфер печати спрайтов. Подпрограмма прерываний будет печатать эти одноклеточные спрайты из буфера.

    Положение подвижных объектов типа танков будут хранится в таблице 2. Размер таблицы: 21 строка по 32 клетки. Каждый танк будет занимать в таблице 9 клеток в виде трех строк по три клетки. В этих клетках будет записан номер танка.

    При движении снаряда или танка в новом месте проверяются таблицы 1 и 2 на наличие в этой клетке подвижного или неподвижного объекта. Зная номер одноклеточного спрайта фона или номер танка уже можно будет обрабатывать дальнейшие действия ...
    Последний раз редактировалось zx-kit; 20.08.2013 в 06:01.
    "L-256"

  2. #271
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #272
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,985
    Спасибо Благодарностей отдано 
    71
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    102 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Представь себе всю карту. Поверх карты у нас квардат - это игровое постранство, т.е. проекция. Левый верхний угол квадрата имеет координаты (word:X,word:Y) - это глобальные координаты в карте. Координаты кажого танка тоже глобальные (word:X,word:Y) и хранятся в списке (массиве). Каждый танк описывается наборов необходимых параметров. У танка есть флаг активности, этот флаг устанавливается если глобальные координаты танка находятся в области проекции.

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

    Все танки стираются и выводятся каждый фрейм. (нужно определить сколько танков мы можем себе позволить выводить).

    Теперь отрисовка тайлов иргового пространства. Сдвинулся экран в любую сторону? Т.е. изменились координаты проекции => Отрисовали тайлы с карты.

    А проверять границы лабиринта можно построив теневую атрибутную карту тайлов.

    --
    upd. как бонус... этот алгоритм позволит гоняться за танками, и быстро находить танк врага рядом и игроком. Если тайлы карты сделать 16х16, их можно быстро рисовать стеком. Для синхронизации лучше всего использовать 2 страницы 128ой видеопамяти.

  4. #273
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Спасибо. Может статические и динамические объекты размещать на общей копии карты уровня? Лучше сразу предусмотреть, чтобы можно было в окне показывать часть большой глобальной карты. Я предполагаю разместить глобальные карты уровня (уровней) в области с #C000. 16К - это таблица на 64 строки по 256 клеток. Сюда поместятся 3х8=24 фрагментов карты размером с окно (21х32 клетки).

    Левую половину таблицы можно использовать для рабочей копии текущего уровня, а в правой половине хранить оригиналы уровней. Таким образом, максимальный размер карты уровня около 3х4 окна (64х128 клеток). Глобальные координаты на карте уровня будут: X от 0 до 63, Y от 0 до 127. Чтобы определить адрес клетки левого верхнего угла окна, через которое видна карта уровня, нужно в старший адрес записать #C0+Y0, а в младший X0, где (X0,Y0) координаты левого верхнего угла окна на карте уровня. Чтобы определить адрес клетки по координатам (X,Y) в окне нужно к старшему адресу окна прибавить Y, а к младшему прибавить X.

    Цитата Сообщение от drbars Посмотреть сообщение
    upd. как бонус... этот алгоритм позволит гоняться за танками, и быстро находить танк врага рядом и игроком. Если тайлы карты сделать 16х16, их можно быстро рисовать стеком. Для синхронизации лучше всего использовать 2 страницы 128ой видеопамяти.
    Предполагаю тайлы размером 8х8 и быстро выводить с использованием указателя стека и буфера печати тайлов. С двумя экранами не все так просто, как кажется.
    Последний раз редактировалось zx-kit; 21.08.2013 в 19:13.
    "L-256"

  5. #274
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,985
    Спасибо Благодарностей отдано 
    71
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    102 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zst Посмотреть сообщение
    Спасибо. Может статические и динамические объекты размещать на общей копии карты уровня?
    Статические это сама карта. А динамические массив наборов координат, и других свойств. Храниить можно так:

    DB кол-во танков
    DW x танка 1
    DW y танка 2
    ещё что-нибудь
    ...
    DW размеры карты в тайлах
    ...
    данные карты.

    Если в процессе игры карта будет меняться (например взорвали стену) - то для игрового процесса карту нужно хранить в рабочей области. Не нужно для каждого уровня копию хранить. Начался 1-ый уровень, распаковал карту как удобно... на сколько удобно массивов и работай с ними уже.

    Тайлы 16х16 - уменьшат размер памяти игровых карт в два раза! Рисовать тайл 16х1 стеком быстрее, т.к. рисуется сразу 2 байта!

    Со 128ым режимом, да, свои грабли... Сам делаю под него, за простоту синхронизации приходится жестко расплачиваться всем подряд

  6. #275
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    Тайлы 16х16 - уменьшат размер памяти игровых карт в два раза! Рисовать тайл 16х1 стеком быстрее, т.к. рисуется сразу 2 байта!

    Со 128ым режимом, да, свои грабли... Сам делаю под него, за простоту синхронизации приходится жестко расплачиваться всем подряд
    Так можно организовать буфер печати и загружать туда адрес экрана, адрес спрайта и т.д. И печатать по прерыванию квадратики 8х8.

    Если делать 16х16, то будет все квадратное как в BATTLE CITY. А я предлагаю тайлы 8х8 (1 клетка), а танки 24х24 (3х3 клеток) с перемещением на 8 точек за 8 шагов (визуально на 1 точку за шаг). Если тайлы будут 16х16 (2х2 клеток), как определить по карте, что в трех клетках перед танком нет препятствий ?
    Последний раз редактировалось zx-kit; 21.08.2013 в 21:07.
    "L-256"

  7. #276
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,985
    Спасибо Благодарностей отдано 
    71
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    102 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zst Посмотреть сообщение
    Так можно организовать буфер печати и загружать туда адрес экрана, адрес спрайта и т.д. И печатать по прерыванию квадратики 8х8.
    8х8 дольше обрабатывать, чем 16х16. Хотя бы потому, что ячеек карты будет в два раза больше. Тут надо эксперементировать, т.к. если захочется чтобы ирговое поле двигалось с кратностью 8 точек, при этом тайлы были бы 16х16... придётся хорошо подумать, и оптимизировать

    Кстати если игровое пространство будет 32 по горизонтали, сложнее будет с координатами танка что-то придумать чтобы он за край заезжал.

    Если бы как раньше, 24. То тут всё просто. Координату танка на экране привязать к правому нижнему углу. Тогда при X=0, Y=0 — танка нет на экране. Увеличивая х,у танк будет выползать из-за границы экрана.

  8. #277
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    Кстати если игровое пространство будет 32 по горизонтали, сложнее будет с координатами танка что-то придумать чтобы он за край заезжал.

    Если бы как раньше, 24. То тут всё просто. Координату танка на экране привязать к правому нижнему углу. Тогда при X=0, Y=0 — танка нет на экране. Увеличивая х,у танк будет выползать из-за границы экрана.
    Да без проблем. Заменяем 24 на 32 и все:
    Код:
    ...
    ;--------------------------------------------------------------------------------------------------- 
    12       INC L                           ; АДРЕС СЛЕДУЮЩЕЙ КЛЕТКИ В СТРОКЕ
             INC B                           ; КООРДИНАТА СЛЕДУЮЩЕЙ КЛЕТКИ
             LD A,B                          ; КЛЕТКУ 2 НАДО ПЕЧАТАТЬ ?
             CP 24
             JR NC,13F                       ; ЕСЛИ НЕТ - ПРОПУСКАЕМ 
    ;--------------------------------------------------------------------------------------------------- 
    ; ПЕЧАТЬ 2 КЛЕТКИ В 1 СТРОКЕ
             LD SP,(SPRITE_ADDR)             ; УСТАНАВЛИВАЕМ SP НА АДРЕС СТРОКИ 
     ...
    Последний раз редактировалось zx-kit; 21.08.2013 в 21:17.
    "L-256"

  9. #278
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,985
    Спасибо Благодарностей отдано 
    71
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    102 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Когда-то давно, я делал процедуру которой можно рисовать спрайт с границами. Довольно компактно, шустро и универсально к координатной плоскости. Посмотри как отсекаются границы экрана.

    Чтобы делать ещё быстрее, нужно уже всякие трюки применять. Ей можно одновременно рисовать 16 танков с атрибутами за фрейм... в реальности меньше думаю нужно.
    Последний раз редактировалось drbars; 21.08.2013 в 22:07.

  10. #279
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    Когда-то давно, я делал процедуру которой можно рисовать спрайт с границами. Довольно компактно, шустро и универсально к координатной плоскости. Посмотри как отсекаются границы экрана.

    Чтобы делать ещё быстрее, нужно уже всякие трюки применять. Ей можно одновременно рисовать 16 танков с атрибутами за фрейм... в реальности меньше думаю нужно.
    16 танков от INT до начала отображения окна - это очень оптимистично. У меня только 9 успевает. Вот как получилось переделать границы обрезки.

    Я потом переделаю процедуру для печати из буфера. Тогда тоже может будет успевать печатать и 16 танков. Ваша процедура сложная - не осилю.
    Вложения Вложения
    Последний раз редактировалось zx-kit; 21.08.2013 в 22:37.
    "L-256"

  11. #280
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zst Посмотреть сообщение
    Я предполагаю разместить глобальные карты уровня (уровней) в области с #C000.
    Цитата Сообщение от drbars Посмотреть сообщение
    Если в процессе игры карта будет меняться (например взорвали стену) - то для игрового процесса карту нужно хранить в рабочей области. Не нужно для каждого уровня копию хранить. Начался 1-ый уровень, распаковал карту как удобно... на сколько удобно массивов и работай с ними уже.
    Распаковка карты уровня в рабочую область - хорошая идея. Неплохо также еще распаковывать графику, музыку уровня, если они будут разные. Только не в #C000. В идеале, впечатать бы навсегда (на время одного уровня) страницу 7 туда и иметь оба 120-х экрана в адресном пространстве одновременно, забыв про щелканье страниц во время самой игры. Но это если только памяти хватит.

Страница 28 из 32 ПерваяПервая ... 242526272829303132 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. простой скрипт для написания хелпов
    от jim в разделе Программирование
    Ответов: 2
    Последнее: 09.04.2007, 14:33
  2. Ответов: 26
    Последнее: 09.08.2006, 14:48
  3. Ищу программистика для написания игры МИНОТАВР
    от TomCaT в разделе Программирование
    Ответов: 13
    Последнее: 15.04.2006, 03:09

Ваши права

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