我正在構建一個調用方法時遇到問題的遊戲。一個怪物可以出現並獲得一個隨機武器,如果該武器射程,該怪物獲得一個回合挫折,給玩家一個戰鬥機會。當monsterRangedTurnSetback方法被調用時,我得到它試圖在nil:NilClass中查找屬性的錯誤。我最終追溯到genWeapon函數,並且該函數不能被調用。她的一些代碼是attr_reader不調用變量
def monsterRangedTurnSetback(weapon)
attribs = weapon.attributes()
attribs.each do |attrib|
if attrib == "Ranged"
return 1
else
return 0
end
end
end
def genWeapon
weaponGen = rand(1..80)
if weaponGen == 1 or weaponGen == 2
weapon = GreatSword.new
hasTwoHandedWeapon = true
elsif weaponGen == (3..23)
weapon = ShortSword.new
hasTwoHandedWeapon = false
elsif weaponGen == (24..34)
weapon = ShortBow.new
hasTwoHandedWeapon = true
elsif weaponGen == (35..48)
weapon = LongBow.new
hasTwoHandedWeapon = true
elsif weaponGen == (49..64)
weapon = Dagger.new
hasTwoHandedWeapon = false
elsif weaponGen == (65..78)
weapon = HandCrossbow.new
hasTwoHandedWeapon = false
elsif weaponGen == 79 or weaponGen == 80
weapon = HeavyCrossbow.new
hasTwoHandedWeapon = true
end
return weapon
puts weapon.name
sleep 2
end
class Orc
attr_accessor :totalDamage, :totalHealth, :armorClass, :attackText, :name,
:turnSetback
def initialize
@wep = genWeapon()
@baseDamage = 7
@weapon = @wep
@turnSetback = monsterRangedTurnSetback(@weapon)
@wep = nil
@health = 5
@hasShield = shield(@weapon)
@armorClass = 6
if @hasShield == true
@armorClass += 2
end
@challengeLevel = 1
@attackText = ["Orc stabs you", "Orc slashes at you", "Orc intimidates you"]
@name = "Orc"
end
end
class ShortSword
attr_reader :attributes, :name, :attackBonus
def initialize
@attributes = ["Melee", "1Hand"]
attackBonus = 3
name = "Short Sword"
end
end
是的代碼是按照這個順序進行的,是的,我知道怪物類允許讀取不存在的變量。任何幫助表示讚賞。
武器是唯一當'weaponGen'爲1,2,79或80時,因爲'weaponGen'永遠不會等於('==')'Range',而不是'weaponGen ==(3..23)'我想你是什麼意思是'(3..23).cover?(weaponGen)'。這個代碼肯定還有很多其他問題(邏輯和語法上都有),但是這應該會讓你超過當前的代碼 – engineersmnky
這非常需要'case'語句或ev更好,查找表。另外,在Ruby方法中,沒有參數的方法定義和調用都省略了相應的parens,所以你會寫'attributes'而不是'attributes'。這使得鏈接方法在語法上更不復雜。同樣,變量和方法名都是小寫,大寫字母在Ruby中有重要意義,所以使用'weapon_gen'優先於'weaponGen'。 – tadman
這裏還有一些代碼在'return'語句之後,這意味着它永遠不會運行,所以它很好奇爲什麼它在那裏。希望有一些早期的調試工作的人爲因素。 – tadman