2016-03-04 3 views
0

В настоящее время я создаю простую в пространстве-стиле игру управления ресурсами в 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 
+0

Поместите события в очередь и покажите им правильную задержку? – Jester

+0

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

+0

Не знаете, какая часть вас беспокоит? Можете ли вы сделать это в C? – Jester

ответ

1

По форумам Easy68k есть ловушка просто подождать определенное количество времени:

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

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

+0

. Это действительно отлично работает, спасибо за это, но теперь, когда я смог замедлить цикл, я замечаю, что мои события отображаются только на экране, когда я отлаживать мою программу. Если я пытаюсь просто запустить программу, она просто отображает сообщение «Обновление», а затем запрашивает пользователя для ввода до того, как он перейдет к следующему циклу. Может ли это быть так, потому что программа работает так быстро, когда не отлаживается, что число, генерируемое функцией trap 8, точно такое же каждый раз? –

Смежные вопросы