"undefined method `+' for nil:NilClass"


# .              gLayer1. gLayer2  gLayer3  gLayer4. gLayer5. gLayer6. gLayer7. gLayer8. gLayer9
gameBoard = %w[oooooooo xooooooo oxoooooo ooxooooo oooxoooo ooooxooo oooooxoo ooooooxo ooooooox]
puts 'hello, welcome to eve sim'
sleep 1
puts 'this is a game, where the player has to avoid stuff, and collect candy.'
sleep 2
puts 'please use wasd to move around'
puts ' '
puts gameBoard[1]
puts gameBoard[0]
puts gameBoard[0]
puts gameBoard[0]
puts gameBoard[0]
gLayer1 = 1
gLayer2 = 0
glayer3 = 0
gLayer4 = 0
gLayer5 = 0
x_layer = 1
x_pos = 1
loop do
move_command = gets.chomp
if move_command == 'd'
# /.    /.    /.    /.    /.    /.    /.
# this is the code to move the player right
if x_layer == 1
gLayer1 += 1
puts gameBoard[gLayer1]
puts gameBoard[gLayer2]
puts gameBoard[glayer3]
puts gameBoard[gLayer4]
puts gameBoard[gLayer5]
x_pos += 1
elsif x_layer == 2
gLayer2 += 1
puts gameBoard[gLayer1]
puts gameBoard[gLayer2]
puts gameBoard[glayer3]
puts gameBoard[gLayer4]
puts gameBoard[gLayer5]
x_pos += 1
elsif x_layer == 3
glayer3 += 1
puts gameBoard[gLayer1]
puts gameBoard[gLayer2]
puts gameBoard[glayer3]
puts gameBoard[gLayer4]
puts gameBoard[gLayer5]
x_pos += 1
elsif x_layer == 4
gLayer4 += 1
puts gameBoard[gLayer1]
puts gameBoard[gLayer2]
puts gameBoard[glayer3]
puts gameBoard[gLayer4]
puts gameBoard[gLayer5]
x_pos += 1
elsif x_layer == 5
gLayer5 += 1
puts gameBoard[gLayer1]
puts gameBoard[gLayer2]
puts gameBoard[glayer3]
puts gameBoard[gLayer4]
puts gameBoard[gLayer5]
x_pos += 1
end
if x_pos == 9
puts 'you have died, sorry'
sleep 2
exit!
end
elsif move_command == 's'
if x_layer == 1
gLayer1 -= gLayer1
gLayer2 += x_pos
puts gameBoard[gLayer1]
puts gameBoard[gLayer2]
puts gameBoard[glayer3]
puts gameBoard[gLayer4]
puts gameBoard[gLayer5]
x_layer += 1
elsif x_layer == 2
gLayer2 -= gLayer2
gLayer3 += x_pos
puts gameBoard[gLayer1]
puts gameBoard[gLayer2]
puts gameBoard[glayer3]
puts gameBoard[gLayer4]
puts gameBoard[gLayer5]
x_layer += 1
elsif x_layer == 3
gLayer3 -= gLayer3
gLayer4 += x_pos
puts gameBoard[gLayer1]
puts gameBoard[gLayer2]
puts gameBoard[glayer3]
puts gameBoard[gLayer4]
puts gameBoard[gLayer5]
x_layer += 1
elsif x_layer == 4
gLayer4 -= gLayer4
gLayer5 += x_pos
puts gameBoard[gLayer1]
puts gameBoard[gLayer2]
puts gameBoard[glayer3]
puts gameBoard[gLayer4]
puts gameBoard[gLayer5]
x_layer += 1
elsif x_layer == 5
gLayer5 -= gLayer5
gLayer6 += x_pos
puts gameBoard[gLayer1]
puts gameBoard[gLayer2]
puts gameBoard[glayer3]
puts gameBoard[gLayer4]
puts gameBoard[gLayer5]
x_layer += 1
puts 'you are dead, sorry.'
sleep 1
exit!
end
elsif move_command == 'a'
elsif move_command == 'w'
x_layer += 1
end
end

先到的部分很好。它只是s控制器。当我进入第三层时,它会给我那个错误。

我很确定这与将两个负片相加有关,但我仍然不知道这会如何引发错误。我不知道这个代码出了什么问题。

请不要添加任何内容;只要解释一下并修复需要修复的部分。

gLayer3没有值。或者更好的是,它的值是nil。因为你叫它glayer3。所以,你实际上是在做nil + something_else。这就是nil.+(something_else)。CCD_ 7没有CCD_ 6方法。

在xlayer==5中,没有定义块gLayer6并返回nil。就在程序的开头,设置gLayer6=0。

请记住everything on Ruby are objects。所以当你调用a + b时,它和a.+ b是一样的。所以+是一个来自"a"的方法。

所以,如果您收到"未定义的方法+for nil:NilClass",是因为运算符/方法左侧的某个变量为nil。

要彻底检查它发生在哪里,请检查日志上发生它的行。希望我能帮助你理解你的错误,让事情在下次变得简单。

相关内容