В настоящее время я создаю простую в пространстве-стиле игру управления ресурсами в 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
Поместите события в очередь и покажите им правильную задержку? – Jester
Я только начал заниматься сбором пару недель назад, так что я не уверен точно, как бы я это сделал? –
Не знаете, какая часть вас беспокоит? Можете ли вы сделать это в C? – Jester