1

私はLuaにかなり慣れていないので、プログラムをコーディングしています。このプログラムは、手紙を巡回して他の手紙を収集するものです (ワーム プログラムのようなものです)。ただし、これはタイミングを合わせてほしい。(私はマインクラフトのモッズですが、まだLuaを使用しているコンピュータークラフトを使用しているので、それは問題ではないと思います)文字を移動できるようにos.PullEvent(「キー」)を使用していますが、os. pullEvent() は、満足するまでプログラムを一時停止します。私の問題は、タイマーが常に同時にカチカチ音をたてるようにしたいということです。どうすればこれを行うことができるかについてのアイデアはありますか? ありがとう!

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
4

4 に答える 4

3

への呼び出しからイベントos.StartTimer()を生成する を使用できます"timer"os.pullEvent()

ComputerCraft OS API ドキュメントを参照してください。

于 2013-05-05T03:17:22.143 に答える
0

これがあなたの質問に答えるかどうかはわかりませんが、次のように一部のコードの実行にかかる時間を確認できます。

local x = os.clock()

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

print(string.format("Elapsed time: %.6f\n", os.clock() - x))
于 2013-05-05T01:36:41.960 に答える
0

現在、人々は通常、変数で os.startTimer を使用するだけですが、変数を含む別の方法と、関数内のループ内の if ステートメントがあります。

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

これは通常、smilebasic で見られるものですが、これを複製することができます。これは 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

これで、毎回 15 ~ 30 ティックの間、そのテキスト行が単純に出力されます。それがこのトピックフォームの質問に対する私の答えです。

于 2016-06-09T19:07:44.733 に答える