私は Lua にまったく慣れていませんが、基本をしっかりと把握していると感じています。最近コンピュータークラフトで、原子炉がオンになっているかどうかを表示する独自のモニターを設計しようとしました。これは私が思いついたものです:
function screen()
monitor = peripheral.wrap("top")
monitor.clear()
monitor.setCursorPos(1,1)
monitor.setTextColor(colors.white)
monitor.write("Reactor 1: ")
monitor.setCursorPos(1,3)
monitor.write("Reactor 2: ")
monitor.setCursorPos(1,5)
monitor.write("Reactor 3: ")
monitor.setCursorPos(1,7)
monitor.write("Reactor 4: ")
monitor.setCursorPos(1,9)
monitor.write("Reactor 5: ")
monitor.setCursorPos(1,11)
monitor.write("Reactor 6: ")
end
function test(color,cursor1,cursor2)
while true do
if colors.test(rs.getBundledInput("right"), color) == true then
monitor.setCursorPos(cursor1,cursor2)
monitor.setTextColor(colors.green)
monitor.write("Active ")
elseif colors.test(rs.getBundledInput("right"), color) == false then
monitor.setCursorPos(cursor1,cursor2)
monitor.setTextColor(colors.red)
monitor.write("Inactive")
end
sleep(0.1)
end
sleep(0.1)
end
sleep(0.1)
function status()
screen()
test(colors.red,12,1)
test(colors.orange,12,3)
test(colors.yellow,12,5)
test(colors.green,12,7)
test(colors.blue,12,9)
test(colors.purple,12,11)
sleep(0.1)
end
status()
残念ながら、これは私に望ましい結果をもたらしませんでした。各リアクターの名前とそれがアクティブかどうかを表示する代わりに、すべてのリアクター名を表示し、最初のリアクターがアクティブかどうかのみを表示しました。他の 5 基の原子炉には、名前の横に空白がありました。
これは私が回避策として思いついたものです。それは機能しますが、最初のものよりもはるかに長くなります:
function test(color,cursor1,cursor2)
while true do
if colors.test(rs.getBundledInput("right"), color) == true then
monitor.setCursorPos(cursor1,cursor2)
monitor.setTextColor(colors.green)
monitor.write("Active ")
elseif colors.test(rs.getBundledInput("right"), color) == false then
monitor.setCursorPos(cursor1,cursor2)
monitor.setTextColor(colors.red)
monitor.write("Inactive")
end
sleep(0.1)
end
sleep(0.1)
end
sleep(0.1)
function status()
screen()
test(colors.red,12,1)
test(colors.orange,12,3)
test(colors.yellow,12,5)
test(colors.green,12,7)
test(colors.blue,12,9)
test(colors.purple,12,11)
sleep(0.1)
end
status()
function screen()
monitor = peripheral.wrap("top")
monitor.clear()
monitor.setCursorPos(1,1)
monitor.setTextColor(colors.white)
monitor.write("Reactor 1: ")
monitor.setCursorPos(1,3)
monitor.write("Reactor 2: ")
monitor.setCursorPos(1,5)
monitor.write("Reactor 3: ")
monitor.setCursorPos(1,7)
monitor.write("Reactor 4: ")
monitor.setCursorPos(1,9)
monitor.write("Reactor 5: ")
monitor.setCursorPos(1,11)
monitor.write("Reactor 6: ")
end
function test()
local monitor = peripheral.wrap("top")
while true do
if colors.test(rs.getBundledInput("right"), colors.red) == true then
monitor.setCursorPos(12,1)
monitor.setTextColor(colors.green)
monitor.write("Active ")
elseif colors.test(rs.getBundledInput("right"), colors.red) == false then
monitor.setCursorPos(12,1)
monitor.setTextColor(colors.red)
monitor.write("Inactive")
end
if colors.test(rs.getBundledInput("right"), colors.orange) == true then
monitor.setCursorPos(12,3)
monitor.setTextColor(colors.green)
monitor.write("Active ")
elseif colors.test(rs.getBundledInput("right"), colors.orange) == false then
monitor.setCursorPos(12,3)
monitor.setTextColor(colors.red)
monitor.write("Inactive")
end
if colors.test(rs.getBundledInput("right"), colors.yellow) == true then
monitor.setCursorPos(12,5)
monitor.setTextColor(colors.green)
monitor.write("Active ")
elseif colors.test(rs.getBundledInput("right"), colors.yellow) == false then
monitor.setCursorPos(12,5)
monitor.setTextColor(colors.red)
monitor.write("Inactive")
end
if colors.test(rs.getBundledInput("right"), colors.green) == true then
monitor.setCursorPos(12,7)
monitor.setTextColor(colors.green)
monitor.write("Active ")
elseif colors.test(rs.getBundledInput("right"), colors.green) == false then
monitor.setCursorPos(12,7)
monitor.setTextColor(colors.red)
monitor.write("Inactive")
end
if colors.test(rs.getBundledInput("right"), colors.blue) == true then
monitor.setCursorPos(12,9)
monitor.setTextColor(colors.green)
monitor.write("Active ")
elseif colors.test(rs.getBundledInput("right"), colors.blue) == false then
monitor.setCursorPos(12,9)
monitor.setTextColor(colors.red)
monitor.write("Inactive")
end
if colors.test(rs.getBundledInput("right"), colors.purple) == true then
monitor.setCursorPos(12,11)
monitor.setTextColor(colors.green)
monitor.write("Active ")
elseif colors.test(rs.getBundledInput("right"), colors.purple) == false then
monitor.setCursorPos(12,11)
monitor.setTextColor(colors.red)
monitor.write("Inactive")
end
sleep(0.1)
end
sleep(0.1)
end
sleep(0.1)
function run()
screen()
test()
end
run()
他のシステムにも同様のコードを実装したいと考えていますが、可能であれば、2 番目のコードよりも 1 番目のコードと同様に実装したいと考えています。
私はまだコーディングにかなり慣れていないので、これが明らかなエラーまたはばかげたエラーである場合は、心からお詫び申し上げます。私は、コードを見て、さまざまなことを試すことで、一種のことを学びました。私の問題について何か助けていただければ幸いです。
また、何かを合理化または簡素化するための提案も大歓迎です! ありがとうございました!!