User Tag List

Показано с 1 по 10 из 21

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    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

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

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

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

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

Похожие темы

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

Ваши права

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