2013-05-04 3 views
1

Я довольно новичок в Lua, и я кодирую программу. Программа представляет собой письмо, собирающееся и собирающее другие буквы (вроде программы червя). Тем не менее, я хочу, чтобы это было приурочено. (Я на computercraft, который является мод для minecraft, но все еще использует Lua, поэтому я не думаю, что это важно). Я использую os.PullEvent («ключ»), чтобы я мог перемещать письмо, но os. pullEvent() приостанавливает выполнение программы до тех пор, пока она не будет удовлетворена. Моя проблема в том, что я хочу, чтобы таймер постоянно тикал одновременно. Любые идеи относительно того, как я мог это сделать? Благодаря!Добавление таймера к моей программе Lua

term.clear() 
w = 1 
h = 1 
score = 0 
function topLine() 
    term.setTextColor(colors.orange) 
    term.setCursorPos(5,1) 
    print("Score: ", score) 
end 
function randLoc() 
    w,h = math.random(2,50) , math.random(3,17) 
    term.setCursorPos(w,h) 
    term.setTextColor(colors.red) 
    print"O" 
end 
function drawBorder() 
    term.setTextColor(colors.blue) 
    term.setCursorPos(1,2) 
    print"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 
    print"X             X" 
    print"X             X" 
    print"X             X" 
    print"X             X" 
    print"X             X" 
    print"X             X" 
    print"X             X" 
    print"X             X" 
    print"X             X" 
    print"X             X" 
    print"X             X" 
    print"X             X" 
    print"X             X" 
    print"X             X" 
    print"X             X" 
    print"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 
end 
function checkTouch() 
    if x ~= w or y ~= h then 
    term.setCursorPos(w,h) 
    term.setTextColor(colors.red) 
    print"O" 
    elseif x == w and y == h then 
    w,h = math.random(2,50) , math.random(3,17) 
    term.setCursorPos(w,h) 
    term.setTextColor(colors.red) 
    print"O" 
    score=score+1 
    end 
end     
x = 2 
y = 3 
randLoc() 
while true do 
    topLine() 
    drawBorder() 
    checkTouch() 
    term.setCursorPos(x,y) 
    term.setTextColor(colors.lime) 
    print"T" 
    local e,move = os.pullEvent("key") 
    if move == 30 or move == 203 then 
    x=x-1 
    if x <= 1 then 
     x = 2 
    end 
    end 
    if move == 32 or move == 205 then 
    x=x+1 
    if x >= 51 then 
     x = 50 
    end 
    end 
    if move == 31 or move == 208 then 
    y=y+1 
    if y >= 18 then 
     y = 17 
    end 
    end 
    if move == 17 or move == 200 then 
    y=y-1 
    if y <= 2 then 
     y = 3 
    end 
    end 
    term.clear() 
end 
+0

Вы можете просто использовать 'print ((« X »): rep (50))' для границ. – hjpotter92

+0

Спасибо! Имейте это в виду! – user1510082

ответ

0

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

local x = os.clock() 

---------------------- 
---- Timed code ------ 
---------------------- 

print(string.format("Elapsed time: %.6f\n", os.clock() - x)) 
3

Вы можете использовать os.StartTimer(), который будет генерировать "timer" событие из ваш призыв к os.pullEvent()

Посмотреть ComputerCraft OS API documentation

0

программы Мои Computercraft Подписчиков это «мул titasking»дизайн

local keepAlive = true 

local function NetworkingLoop() 
    while true do 
     -- Do Networking 
    end 
end 

local function InputLoop() 
    while true do 
     -- Do Input 
    end 
end 

local function DrawingLoop() 
    while true do 
     -- Do drawing 
    end 
end 

local function KeepAlive() 
    while keepAlive do 
     os.sleep(1) 
    end 
end 

parallel.waitForAny(NetworkingLoop, InputLoop, DrawingLoop, KeepAlive) 

NetworkingLoop, InputLoop, DrawingLoop и KeepAlive будет работать на "одновременно"
(на самом деле не потому Lua не может сделать это)

Чтобы остановить набор программ keepAlive (обратите внимание на нижний регистр k) до false в любом месте (внутри петель)

0

Теперь люди обычно используют только os.startTimer в переменные, но есть еще один способ, включающий переменные, а если заявления в петлях в пределах функций

tick = 0 
time = 0 
function timer() 
    tick=tick+1 
    if tick == 60 then 
    time=time+1 
    tick=0 
    end 
end 

running=true 
while running do 
    timer() 
    sleep(.1) 
end 

это то, что вы видите в Usally smilebasic, но вы все еще можете replecate это Lua. теперь добавляют к ней будет, как говорил его каждые секунды сказать ему, чтобы напечатать что-то

tick=0 
time=0 
running=true 
function timer() 
    tick=tick+1 
    if tick==60 then 
    time=time+1 
    tick=0 
    end 
    if tick > 15 and tick < 30 then 
    print("it inbetween 15 - 30 please wait") 
    end 
end 

running=true 
while running do 
    timer() 
end 

Теперь будет просто распечатать эту строку текста для Inbetween 15-30 клещей каждый раз. вот мой ответ на этот вопрос вопрос формы.

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