【发布时间】:2011-06-17 17:31:44
【问题描述】:
我创建这个游戏的目的是为了学习 OOP,但我在其中的一部分遇到了问题。以下是导致我出现问题的原因:
我有两节课。在 Player 类的第 3 行,我有一些代码可能是错误的,但基本上,我想要做的是使用盔甲来修改玩家受到的伤害。但是,我收到一个错误:“nil:NilClass (NoMethodError) 的未定义方法'保护'
我有盔甲作为另一个职业。我认为这个问题可能与我在 Armor 中提到保护并且在 Player 中提到 @armor 时调用 @armor.protection 的事实有关,但我不确定如何解决这个问题。我已经添加了我认为与下面我的问题相关的所有代码。就像我说的,我在这方面真的很陌生,所以请使用菜鸟能理解的术语。
class Player
def equip(armor)
@armor = armor
end
def hit(damage)
#damage = damage - @armor.protection
@health -= damage
end
end
class Armor
def initialize(name, protection)
@protection = protection
end
end
编辑:添加了额外的代码来显示我为澄清所做的所有事情。 不过,我不希望任何人阅读我所拥有的所有内容。 :S 这可能很吓人并咆哮起来。 :P
class Player
def initialize(name, health)
@name = name
@health = health
end
def equip(armor)
@armor = armor
end
def health
@health
end
def health=(value)
@health = value
end
def hit(damage)
damage = damage - @armor.protection
@health -= damage
end
def dead?
if @health <= 0
return true
elsif @health > 0
return false
end
end
def name
@name
end
def attack(target)
damage = rand(30)
puts "#{@name} attacks #{target.name}"
target.hit(damage)
puts "#{@name} hits #{target.name} for #{damage} damage."
end
end
class Armor
def initialize(name, protection)
@protection = protection
end
end
player1 = Player.new("Melanie", 100)
player2 = Player.new("a Monster", 200)
shirt = Armor.new('shirt', 4)
player1.equip(shirt)
while player1.dead? == false && player2.dead? == false
player1.attack(player2)
if player2.health > 0
puts "#{player2.name}'s health is at #{player2.health}."
elsif player2.health <= 0
puts "#{player2.name} has no health."
end
player2.attack(player1)
if player1.health > 0
puts "#{player1.name}'s health is at #{player1.health}."
elsif player1.health <= 0
puts "#{player1.name} has no health."
end
end
if player1.health > player2.health
puts "#{player2.name} is dead."
puts "#{player1.name} wins."
elsif player2.health > player1.health
puts "#{player1.name} is dead."
puts "#{player2.name} wins."
elsif player2.health == player1.health
puts "#{player1.name} and #{player2.name} killed each other."
end
【问题讨论】: