if 语句中的 computercraft 变量

computercraft variable in if statment

我有一个小问题,我是 Lua 和 ComputerCraft 的新手。所以我认为我的问题是我太愚蠢了,无法编写 if 语句中的变量更改我会 post 我的代码希望你能帮助我解决这个问题 thx

mon = peripheral.wrap("top")
modem = peripheral.wrap("right")
mon.clear()
mon.setCursorPos(1,2)
mon.blit("Pulverizer","0000000000","dddddddddd")
redstone.setOutput("right", true)
Pulverizer = true
mon.setCursorPos(1,4)
mon.write("Furnice","0000000","ddddddd")
redstone.setOutput("left", true)
local Furnice = true
mon.setCursorPos(1,6)
mon.write("Injection Chamber","00000000000000000","ddddddddddddddddd")
local Injection_Chamber = true
redstone.setOutput("top",true)
mon.setCursorPos(1,8)
mon.write("Metalurgig InFuser","000000000000000000","dddddddddddddddddd")
local Metalurgig_InFuser = true
redstone.setOutput("bottom", true)
while true do
  event,side,x,y = os.pullEvent("monitor_touch")


  if x > 1 and x < 11 and y == 2 and Pulverizer == true then
    mon.setCursorPos(1,2)
    mon.clearLine()
    mon.blit("Pulverizer","0000000000","eeeeeeeeee")
    redstone.setOutput("right", false)
    Pulverizer = false

 elseif x > 1 and x < 11 and y == 2 and Pulverizer == false then
   mon.setCoursorPos(1,2)
   mon.clearLine()
   mon.blit("Pulverizer","0000000000","dddddddddd")
   redstone.setOutput("right", true)
   Pulverizer = true
  end
end

Pastebin 的 link : link to code

所以问题出在这部分代码

if x > 1 and x < 11 and y == 2 and Pulverizer == true then
mon.setCursorPos(1,2)
mon.clearLine()
mon.blit("Pulverizer","0000000000","eeeeeeeeee")
redstone.setOutput("right", false)
Pulverizer = false

Pulverizer 变量不想从 true 更改为 false,因此现在无法激活此代码

   elseif x > 1 and x < 11 and y == 2 and Pulverizer == false then
   mon.setCoursorPos(1,2)
   mon.clearLine()
   mon.blit("Pulverizer","0000000000","dddddddddd")
   redstone.setOutput("right", true)
   Pulverizer = true

我也不知道为什么 这里还有一个来自游戏内镜头的视频 link 所以你可以在视频中看到它变成红色但不再变成绿色

https://youtu.be/R4dpN-egnwY

不确定这是否能解决您的问题,但值得尝试调试它。 作为良好实践,我建议您在第 7 行定义 Pulverizer 时,使用 local Pulverizer = true 将其设置为本地。可能不会有所作为,但这是很好的做法。根据我的经验,避免使用首字母大写的变量也是一种很好的做法。

其次,尝试像这样将 if 块重新加工成 2 个块:

if x > 1 and x < 11 and y == 2 then
  --Put some output message here or something so that you can see that it's entered this block of code and detected the cursor properly
    mon.setCursorPos(1,2)
    mon.clearLine()
  if Pulverizer == true then
    --Put another output message here so that you can see that Pulverizer is being evaluated as true
    mon.blit("Pulverizer","0000000000","eeeeeeeeee")
  elseif Pulverizer == false then
    --Put one last output message here so that if Pulverizer is being evaluated as false you'll know
    mon.blit("Pulverizer","0000000000","dddddddddd")
  end
Pulverizer = not Pulverizer
redstone.setOutput("right", Pulverizer)
end

如果您在我放置注释的地方(灰色线)插入调试消息,那么它应该可以帮助您缩小问题范围,因为您可以看到哪些 if 块正在被输入,哪些没有.另一个好主意是在执行 Pulverizer = truePulverizer = false 后立即输入一些代码,以显示 Pulverizer 的值。

我不太熟悉 Computercraft 的特定语法,所以我不确定您是否可以在聊天中或仅在监视器上显示消息以进行调试,但您明白了。每当您遇到无法缩小范围的问题时,请尝试将调试消息放在代码中,这样您就可以准确地看到正在发生的事情并从那里开始工作。如果您发现更多信息,请随时发表评论,我会回来查看是否可以提供更多帮助。

希望这对您有所帮助,祝您周末愉快!