我是新手編程,但很想學習,所以請原諒這個問題。我已經創建了這個遊戲,以幫助我學習OOP,並且遇到了一些問題。這是什麼導致我的問題:Ruby>如何從另一個類的方法中的一個類使用方法?
我有兩個類。在類Player的第3行,我有一些代碼可能是錯的,但基本上,我想要做的就是使用護甲來修改玩家受到的傷害。我得到一個錯誤,雖然:「未定義的方法'保護'零:NilClass(NoMethodError)
我有護甲作爲另一類,我認爲這個問題可能與我打電話@ armor.protection在Armor中提到了保護,並且在Player中提到了@armor,但我不確定如何解決這個問題。我添加了所有我認爲與以下問題相關的代碼。就像我說的,我真的是新手,所以請使用術語一個小白可以理解
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
截至目前,該程序並不知道通過說鎧甲,我的意思是,在這個球員的情況下,一件襯衫。唯一提到的是我的裝甲,小寫字母a,除此之外,在傷害=傷害 - @ armor.protection中,是類Player中的裝備定義。我嘗試了第二個例子,希望能夠照顧到這一點,但無論如何我仍然有同樣的錯誤。我知道我有點過頭了,但我確實瞭解了很多,這絕對是一種學習體驗。 :S – 2011-01-29 12:50:38
@Melanie:當我提到保護時,我意外地輸入了護甲,所以我的代碼首先出錯了,所以它無法工作。現在我解決了它,只要你在調用任何使用`@ armor`的方法之前調用`equip`,它就可以工作。 – sepp2k 2011-01-29 12:55:20