首页 > 解决方案 > if 语句中的计算机技术变量

问题描述

我有一个小问题我是 Lua 和 ComputerCraft 的新手。所以我认为我的问题是我太愚蠢了,无法编写 if 语句中的变量更改我将发布我的代码希望你能帮助我解决这个问题 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 的链接:链接到代码

所以问题出在这部分代码中

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

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

https://youtu.be/R4dpN-egnwY

标签: luacomputercraft

解决方案


不确定这是否会解决您的问题,但值得尝试调试一下。只是为了良好的实践,我建议在第 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 = true否则Pulverizer = false会显示Pulverizer.

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

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


推荐阅读