2016-03-04 47 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

这实际上是完美的,所以谢谢你,但现在我已经能够减慢循环,我注意到我的事件只出现在屏幕上,当我调试我的程序。如果我试图通常运行程序,它会显示更新消息,然后在进入下一个循环之前提示用户输入。这可能是因为程序在不调试时运行速度如此之快以至于陷阱8函数生成的数字每次都完全相同? –