FCEUX运行我的代码时停止响应

--调用IUP

require("iuplua")

--变量

on= 1

puntos1=memory.readbyte(0x0007DE) --读取points值
puntos2=memory.readbyte(0x0007DF)
puntos3=memory.readbyte(0x0007E0)
puntos4=memory.readbyte(0x0007E1)
puntos5=memory.readbyte(0x0007E2)

p1=puntos1*100000 --将原始值转换为游戏值
p2=puntos2*10000
p3=puntos3*1000
p4=puntos4*100
p5=puntos5*10

maxpuntaje=p1+p2+p3+p4+p5 --计算最终结果

mundo=memory.readbyte(0x00075F) --读取"world"值
nivel=memory.readbyte(0x000760) --读取"level"值

estado=memory.readbyte(0x000770) --读取马里奥"状态"(00未运行,01运行中,03游戏结束)

--死亡前将变量写入内存

memory.writebyte(0x00075A,00) --将"lives"值更改为1

while(on==1) do
estado=memory.readbyte(0x000770)
print(estado)
print(type(estado))
if(estado==03)then
    print("最高得分(本次游戏)= ",maxpuntaje)
    print("当前世界和级别: ",mundo+1,"-",nivel+1)
end

end

(已编辑代码)

这是游戏运行时0x000770的状态

这是游戏结束场景中0x000770的状态

有什么问题吗?运行此脚本时,fceux会停止响应,我是stack overflow和编程的新手,欢迎任何帮助

点赞
用户5525442
用户5525442

这很简单,但需要更多的信息来调试这个问题。

  1. 确保(estado==03)为真并打印以下变量并添加到您的问题中

    mundo=memory.readbyte(0x00075F)

    nivel=memory.readbyte(0x000760)

    estado=memory.readbyte(0x000770)

    print(mundo, nivel, estado)

  2. 检查这些内存读取变量的类型,例如:print(type(mundo))

  3. 确保 if 条件检查正确的类型

  4. 您意识到内存只读取一次,但 while 循环一直为真

请尝试以下操作:

while(on==1) do
    estado=memory.readbyte(0x000770)
    print(estado)
    print(type(estado))
    if(estado==03)then
        print("Puntuacion maxima (sesion actual) = ",maxpuntaje)
        print("Mundo y nivel Actual: ",mundo+1,"-",nivel+1)
    end
end
2018-10-08 04:59:20
用户10470577
用户10470577

我非常抱歉浪费您的时间,但我发现错误了,实际上非常简单,在循环结尾处缺少了 FCEU.frameadvance。 我不知道为什么会导致模拟器崩溃,但是在放置它后,它停止了崩溃,感谢 wsha 的帮助。

2018-10-08 21:50:13