我正在用Ruby创建一个简单的Rock,Paper,Scissor OOP游戏,以更好地了解Ruby OOP的所有工作原理。但是我遇到了问题。
我想从另一个类访问实例变量,但是在运行程序时收到此错误
Traceback (most recent call last):
2: from rps.rb:44:in `<main>'
1: from rps.rb:40:in `start'
rps.rb:17:in `greeting': undefined method `name' for nil:NilClass (NoMethodError)
第17行是
puts "Welcome #{@player1.name} and #{@player2.name}"
这是我到目前为止的所有代码
class Player
attr_accessor :name, :player1, :player2,
def initialize(name)
@name = name
@player1 = Player.new(name1)
@player2 = Player.new(name2)
end
end
class Main
def greeting
puts "Welcome to Rock-Paper-Scissor"
sleep(0.5)
puts "Welcome #{@player1.name} and #{@player2.name}"
end
def instruct
puts "The rules of the game are simple\n"
puts "Choose Rock, Paper or Scissor each turn\n "
puts "Paper beats Rock, Scissor beats paper and Rock beats Scissor\n"
puts "Ready....?"
end
end
def start
puts "Hi, please enter your name player 1: "
name1 = gets.chomp
puts "Hi, please enter your name player 2: "
name2 = gets.chomp
game = Main.new
game.greeting
game.instruct
end
start
*****对代码进行了新更改,使其可以正常运行*******
class Player
attr_accessor :name
def initialize(name)
@name = name
end
end
class Game
def greeting
puts "Hi, please enter your name player 1: "
name1 = gets.chomp
@player1 = Player.new(name1)
puts "Hi, please enter your name player 2: "
name2 = gets.chomp
@player2 = Player.new(name2)
puts "Welcome to Rock-Paper-Scissor"
sleep(0.5)
puts "Welcome #{@player1.name} and #{@player2.name}"
end
def instruct
puts "The rules of the game are simple\n"
puts "Choose Rock, Paper or Scissor each turn\n "
puts "Paper beats Rock, Scissor beats paper and Rock beats Scissor\n"
puts "Ready....?"
end
end
def start
game = Game.new
game.greeting
game.instruct
end
start
您可以做这样的事情。
def greeting
...
return name1, name2
end
def start
game = Game.new
name1,name2=game.greeting
game.instruct
end