Как медленно выводить текст в консоль с помощью easy68k

В настоящее время я создаю простую игру по управлению ресурсами в космическом стиле в easy68k.

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

Между всеми этими событиями у меня генерируется случайное число от 1 до 100, в зависимости от сгенерированного числа может произойти определенное событие, например, игрок найдет трофей, членов экипажа, заброшенные корабли, пиратов и т. д. Когда произойдет одно из этих событий. Я хочу вывести сообщение на экран консоли, чтобы сообщить об этом игроку.

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

Мне интересно, есть ли способ отложить вывод, чтобы запись появлялась в темпе, за которым игрок мог бы легко следить?

Любая помощь будет принята с благодарностью.

Если это поможет, вот мой цикл, я еще не полностью реализовал всю механику, но сам цикл работает нормально.

      *-------------------------------------------------------
      *---------------Update Mission Progress-----------------
      *  Move to mission location, random events will occur
      *------------------------------------------------------- 
update:
bsr     endl            print a CR and LF
bsr     decorate        decorate with dots using a loop

move.w  $4000, D7       move distance value into D7
move.w  $4020, D6       move fuel value into D6

lea     update_msg,A1   Display update message
move.b  #14,D0
trap    #15

update_loop:

move.b  #8,d0           Get time 1/100th seconds since midnight
trap    #15
and.l   #$5FFFFF,D1     prevent overflow in divu
divu    #100,D1         time count / 100
swap    D1              swap upper and lower words of D1 to put remainder in low word
addq.w  #1,D1           d1.w contains number from 1 to 100
move    D1,D2           d2 = d1

bsr     check_events    check to see if any of the events will occur   

sub.b   #fuel_cost, D6  reduce ships fuel by one
CMP     #0, D6          if the ships fuel reaches 0 then go to out of fuel routine
BEQ     out_of_fuel     

sub.b   #1, D7          reduce mission distance by 1               
CMP     #0, D7          when it reaches 0 go to the continue subroutine            
BNE     update_loop     otherwise go back to the top of the loop

BRA     continue_loop 

continue_loop:
*Used to leave the update loop
lea     continue_msg,A1 
move.b  #14,D0
trap    #15

move.b  #5,D0           wait for input so the player can read the event messages
trap    #15

CMP     $94, D1
BNE     continue_loop


move.w  D6, $4020       store the new value for ship fuel

bsr     decorate                           
rts

check_events:    
*Check to make sure the random value is within the specific range for each event
CMP     #95, D2
BGE     check_found_salvage

CMP     #75, D2
BGE     check_hit_mine

CMP     #55, D2
BGE     check_pirate_attack

CMP     #35, D2
BGE     check_found_ship

CMP     #15, D2
BGE     check_found_crew

rts
*Further checks to make sure the random value is within the specific ranges 
check_found_salvage:

CMP     #97, D2                   
BLE     collect_salvage              
rts                                 

check_hit_mine:

CMP     #77, D2                    
BLE     hit_mine              
rts                 

check_pirate_attack:

CMP     #57, D2                    
BLE     initiate_attack              
rts                 

check_found_ship:

CMP     #37, D2
BLE     check_collect_ship
RTS

check_found_crew:

CMP     #17, D2
BLE     collect_crew
rts
*Run each event, outputting a message to the screen if an event occurs  
collect_salvage:

lea     found_salvage_msg,A1   
move.b  #14,D0
trap    #15

rts                                 

hit_mine:   

lea     hit_mine_msg,A1   
move.b  #14,D0
trap    #15

rts

initiate_attack:    

lea     initiate_attack_msg,A1   
move.b  #14,D0
trap    #15

rts

check_collect_ship:    

lea     found_ship_msg ,A1   
move.b  #14,D0
trap    #15

rts

collect_crew:    

lea     found_crew_msg,A1   
move.b  #14,D0
trap    #15

rts
*Not fully implemented out of fuel mechanic yet
out_of_fuel:
rts

person Brian Leigh    schedule 04.03.2016    source источник
comment
Поместить события в очередь и показать их с соответствующей задержкой?   -  person Jester    schedule 04.03.2016
comment
Я только начал заниматься сборкой пару недель назад, поэтому я не уверен, как именно я буду это делать?   -  person Brian Leigh    schedule 04.03.2016
comment
Не уверены, какая часть вызывает у вас проблемы? Можете ли вы сделать это на C?   -  person Jester    schedule 04.03.2016
comment
Я только недавно начал изучать ассемблер, поэтому не знаю многих команд. Я знаю, что использование № 8 с ловушкой № 15 используется для получения текущего времени, деленного на 100, поэтому я бы использовал это, чтобы каким-то образом задержать каждый вывод?   -  person Brian Leigh    schedule 04.03.2016
comment
А еще это для проекта колледжа, так что это нужно сделать в easy68k.   -  person Brian Leigh    schedule 04.03.2016


Ответы (1)


Согласно форумам Easy68k, есть ловушка, чтобы просто подождать определенное время:

move.l   #100,D1     ; delay in 1/100th of seconds
moveq    #23,D0
trap     #15

Вы могли бы просто использовать эту ловушку, чтобы немного подождать после печати события?

person Durandal    schedule 04.03.2016
comment
На самом деле это работает отлично, так что спасибо за это, но теперь, когда я смог замедлить цикл, я заметил, что мои события появляются на экране только при отладке моей программы. Если я попытаюсь просто запустить программу в обычном режиме, она просто отобразит сообщение об обновлении, а затем предложит пользователю ввести данные, прежде чем он перейдет к следующему циклу. Может ли это быть из-за того, что программа работает так быстро без отладки, что число, генерируемое функцией trap 8, каждый раз остается одним и тем же? - person Brian Leigh; 05.03.2016