如何使同一类的两个实体进行交互



我正试图获得2"人;同一类的人相互作用,并改变彼此的";统计数据"然而,我得到了错误,";形式参数不能是常量">

class Hands 
attr_reader :name, :element, :skill, :mana, :health, :attack, :fire, :water, :lyfe
def initialize(name, element, skill)
@mana = 100
@health = 200
@name = name
@element = element
@skill = skill
end
def mana 
sleep 1
puts "#{@name} has #{@mana} mana."
end
def health
sleep 1
puts "#{@name} has #{@health} HP."
end
def restore(Hands)
if @element == "Lyfe"
@mana = 100
puts "#{@name} has been restored!"
else 
puts "#{@name} cannot use this ability!"
end
end
end
player1 = Hands.new('Silk', 'Lyfe', 'Summon')
player2 = Hands.new('Nubz', 'Lyfe', 'Manipulate Wildlife')
player3 = Hands.new('Lisk', 'Water', 'Invisible')
player4 = Hands.new('Azzi', 'Water', 'Manipulate Water')
player5 = Hands.new('Zeph', 'Fire', 'Lightning')
player6 = Hands.new('Ford', 'Fire', 'Manipulate Fire')
player7 = Hands.new('Boyd', 'Fire', 'Craft')
player1.restore("Nubz")

在这里,我试图让player1";恢复";玩家2恢复到满魔法值。我知道代码并不完美,但我不知道该怎么做。专注于restore命令,其他命令运行良好。

您应该能够将您想要影响的播放器的实例传递给restore方法,而不是名称字符串。然后,您可以根据需要更新该玩家的属性。举个简单的例子:

更新类以使mana可写:

class Hands 
attr_reader :name, :element, :skill, :mana, :health, :attack, :fire, :water, :lyfe
attr_writer :mana
# ...
end

更新restore方法以接受玩家实例:

def restore(hands)
if element == "Lyfe"
hands.mana = 100
puts "#{hands.name} has been restored!"
else 
puts "#{name} cannot use this ability!"
end
end

将实例传递给方法:

player1 = Hands.new('Silk', 'Lyfe', 'Summon')
player2 = Hands.new('Nubz', 'Lyfe', 'Manipulate Wildlife')
player1.restore(player2)
#=> Nubz has been restored!

最新更新