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

User Tag List

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 21

Тема: Програмирование игр

  1. #11
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Также, иногда бывает нужно войти в середину процедуры, а не в начало, чтобы не писать второй абсолютно одинаковый кусок процедуры.
    И один выход RET из процедуры - тоже жестокость. А как же выходы по условиям RET Z, RET C и прочее, если надо в середине процедуры?
    2 пути есть: писать понятно (с возможностью дальнейшей поддержки кода, в т.ч. и другими людьми) и писать "оптимизированно" (т.н. write-only code - потом тяжело с таким кодом что-то делать). твои предложения по "оптимизации" - чисто второй вариант. иногда он полезен или даже единственно возможен (в демах или интрах), но далеко не всегда.

  2. #12
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, в своих программах я применяю единый стиль вызовов процедур и именование меток. Но входов в процедуру может быть много и выходов тоже. При этом стек строго остается в том же состоянии, как до вызова процедуры.
    Но вот в игре Эйфории появилась задача - вызов нужной процедуры обработки в зависимости от текущего юнита и имеющейся в списке для этого юнита. Вызов может производиться из нескольких мест. В базе данных это задается так (упрощенный пример):
    Код:
    ; id=0, крестьянин
    
    unit_peasant			defb	unit_peasant_end-unit_peasant		; длина данных юнита
    				defb	s32_peasant				; код символа
    				defb	24					; количество и список возможных процедур
    				defw	c_op_pass
    				defw	c_op_destroy
    				defw	c_op_move_west_earth
    				defw	c_op_move_east_earth
    				defw	c_op_move_nord_earth
    				defw	c_op_move_sud_earth
    				defw	c_op_move_nord_west_earth
    				defw	c_op_move_nord_east_earth
    				defw	c_op_move_sud_west_earth
    				defw	c_op_move_sud_east_earth
    				defw	c_op_build_road
    				defw	c_op_build_irrigation
    				defw	c_op_build_wall
    				defw	c_op_build_tower
    				defw	c_op_build_house
    				defw	c_op_build_barracks
    				defw	c_op_build_barn
    				defw	c_op_build_stock
    				defw	c_op_build_shipyard
    				defw	c_op_build_church
    				defw	c_op_train_soldier
    				defw	c_op_train_galley
    				defw	c_op_take_source
    				defw	c_op_give_source
    unit_peasant_end
    
    
    ; id=1, солдат
    
    unit_soldier			defb	unit_soldier_end-unit_soldier		; длина данных юнита
    				defb	s32_soldier				; код символа
    				defb	12					; количество и список возможных процедур
    				defw	c_op_pass
    				defw	c_op_destroy
    				defw	c_op_move_west_earth
    				defw	c_op_move_east_earth
    				defw	c_op_move_nord_earth
    				defw	c_op_move_sud_earth
    				defw	c_op_move_nord_west_earth
    				defw	c_op_move_nord_east_earth
    				defw	c_op_move_sud_west_earth
    				defw	c_op_move_sud_east_earth
    				defw	c_op_take_source
    				defw	c_op_give_source
    unit_soldier_end
    
    
    ; id=2, галера
    
    unit_galley			defb	unit_galley_end-unit_galley		; длина данных юнита
    				defb	s32_galley				; код символа
    				defb	9					; количество и список возможных процедур
    				defw	c_op_pass
    				defw	c_op_move_west_earth
    				defw	c_op_move_east_earth
    				defw	c_op_move_nord_earth
    				defw	c_op_move_sud_earth
    				defw	c_op_move_nord_west_earth
    				defw	c_op_move_nord_east_earth
    				defw	c_op_move_sud_west_earth
    				defw	c_op_move_sud_east_earth
    unit_galley_end
    И как вы собираетесь вызывать эти процедуры, чтобы был понятный код?

    Я делаю так:

    Код:
    hl = считанный из базы адрес процедуры, например c_op_destroy
    ld bc,label_01_continue
    push bc
    jp (hl)
    label_01_continue
    ...
    ld bc,label_02_continue
    push bc
    jp (hl)
    label_02_continue
    ...
    ret
    c_op_destroy
    ...
    ret

  3. #13
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    ;hl=addr
    call callhl
    ....
    
    callhl jp (hl)

  4. #14
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    hl читается из базы - это адрес вызова нужной процедуры, может вызываться из нескольких мест. Возвращаться как?

    Всё, дошло! Спасибо, psb. Исправлю в следующей версии, твой вариант намного проще и понятнее.
    Последний раз редактировалось Andrew771; 16.01.2014 в 17:33.

  5. #15
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    я ниче не понял, я просто твой монструозный код сократил (теперь не надо указывать bc). массивы указателей сами по себе - ок.

  6. #16
    Veteran Аватар для Hacker VBI
    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Andrew771, показывай демку!
    "наличие готового программного обеспечения для нового компьютера в наши дни имеет мало смысла."
    "Еще вопрос - почему на Спектруме большинство звуков на AY булькающие ? Как это исправить ?"
    (c) zst

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

  8. #17
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    Cool

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    hl читается из базы - это адрес вызова нужной процедуры, может вызываться из нескольких мест. Возвращаться как?

    Всё, дошло! Спасибо, psb. Исправлю в следующей версии, твой вариант намного проще и понятнее.

    как там было у Тёрнера?
    если вы чего-то не понимаете, то
    вернитесь на этап 2 и повторите проектирование.
    С уважением,
    Jerri / Red Triangle.

  9. #18
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,767
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    1,173
    Поблагодарили
    770 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    как там было у Тёрнера?
    в RanaRama кстати встроен тот маленький монитор про который была статья перевод в ZXreview.
    и если я не ошибаюсь статей перевели меньше чем было напечатано в оригинале

  10. #19
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hacker VBI Посмотреть сообщение
    Andrew771, показывай демку!
    Уже давно готова первая версия игры, туть. Сейчас вторую делаю, но пока приостановил на пару месяцев в связи с занятостью.

  11. #20
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    Cool

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

    Код:
    output_more_xxx0        ld    a,e
                    cp    xmax
                    jp    z,output_more_01
                    inc    a
                    ld    b,d
                    ld    c,a
                    call    read_cell
                    cp    cell_sea
                    jp    z,output_more_01
    
    ;                ld    a,(parameter_okruga)
    ;                inc    a
    ;                ld    (parameter_okruga),a
    
                     ld hl,parametr_okruga
                     inc (hl)
    ;-3 byte
    output_more_01            
    ;                ld    h,0
    ;                ld    a,(parameter_okruga)
    ;                ld    l,a
    
                    ld hl,(parametr_okruga)
                    ld h,0
    ;-1 byte
                    ld    bc,table_more
                    add    hl,bc
                    ld    a,(hl)
    
                    jp    output_map_region_03
    я уверен твой код можно много где пооптимизировать
    С уважением,
    Jerri / Red Triangle.

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Програмирование
    от Snaper97 в разделе Для начинающих
    Ответов: 58
    Последнее: 23.11.2009, 14:45
  2. Ответов: 21
    Последнее: 23.02.2005, 20:56

Ваши права

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