Project1

标题: 自己写了一段配方类的脚本,MS有错自己又找不出来求改正 [打印本页]

作者: lxczzzcxl    时间: 2011-2-9 20:55
标题: 自己写了一段配方类的脚本,MS有错自己又找不出来求改正
话说那个recipe似乎是食谱= =
主代码在下面
  1. class TCItem
  2.   attr_accessor :kind
  3.   attr_accessor :num
  4.   attr_accessor :amount
  5.   def initialize(kind, num, amount)
  6.     @kind = kind
  7.     @num = num
  8.     @amount = amount
  9.   end
  10.   def kind
  11.     return @kind
  12.   end
  13.   def kind=(newkind)
  14.     @kind = newkind
  15.   end
  16.   def num
  17.     return @num
  18.   end
  19.   def num=(newnum)
  20.     @num = newnum
  21.   end
  22.   def amount
  23.     return @amount
  24.   end
  25.   def amount=(newamount)
  26.     @amount = newamount
  27.   end
  28.   def gain
  29.     if @kind = 1
  30.       $game_party.gain_item(@num, @amount)
  31.     elsif @kind = 2
  32.       $game_party.gain_weapon(@num, @amount)
  33.     elsif @kind = 3
  34.       $game_party.gain_armor(@num, @amount)
  35.     elsif @kind = 0
  36.       $game_party.gain_gold(@amount)
  37.     end
  38.   end
  39.   def lose
  40.     if @kind = 1
  41.       $game_party.lose_item(@num, @amount)
  42.     elsif @kind = 2
  43.       $game_party.lose_weapon(@num, @amount)
  44.     elsif @kind = 3
  45.       $game_party.lose_armor(@num, @amount)
  46.     elsif @kind = 0
  47.       $game_party.lose_gold(@amount)
  48.     end
  49.   end  
  50.   def to_string
  51.     if @kind = 1
  52.       return $data_item[@num].name + "(物品) × " + @amount.to_s
  53.     elsif @kind = 2
  54.       return $data_weapon[@num].name + "(武器) × " + @amount.to_s
  55.     elsif @kind = 3
  56.       return $data_armor[@num].name + "(防具) × " + @amount.to_s
  57.     elsif @kind = 0
  58.       return "金钱 " + @amount.to_s + " " + $data_system.words.gold
  59.     end   
  60.   end
  61.   def is_had
  62.     if @kind = 1
  63.       return $game_party.item_number(@num) >= @amount
  64.     elsif @kind = 2
  65.       return $game_party.weapon_number(@num) >= @amount
  66.     elsif @kind = 3
  67.       return $game_party.armor_number(@num) >= @amount
  68.     elsif @kind = 0
  69.       return $game_party.gold >= @amount
  70.     end
  71.   end
  72. end

  73. class TCRecipe
  74.   attr_accessor :materialkinds
  75.   attr_accessor :material
  76.   attr_accessor :productkinds
  77.   attr_accessor :product
  78.   attr_accessor :name
  79.   def initialize(name, ms, ps)
  80.     @name = name
  81.     @material = ms
  82.     @product = ps
  83.     @materialkinds = ms.length
  84.     @productkinds = ps.length
  85.   end
  86.   def name
  87.     return @name
  88.   end
  89.   def list_of_material
  90.     if @materialkinds = 0
  91.       return "无"
  92.     elsif @materialkinds = 1
  93.       return @material[1].to_string
  94.     else
  95.       q = ""
  96.       @material.each{|unit| q << (unit.to_string + " ")}
  97.       return q.strip
  98.     end
  99.   end
  100.   def list_of_product
  101.     if @productkinds = 0
  102.       return "无"
  103.     elsif @productkinds = 1
  104.       return @product[1].to_string
  105.     else
  106.       q = ""
  107.       @product.each{|unit| q << (unit.to_string + " ")}
  108.       return q.strip
  109.     end
  110.   end
  111.   def is_can_use
  112.     q = true
  113.     @material.each{|unit| q = q and unit.is_had}
  114.     return q
  115.   end
  116.   def use_it
  117.     @material.each{|unit| unit.lose}
  118.     @product.each{|unit| unit.gain}
  119.   end
  120. end
复制代码
测试时的代码是这样
  1. a1 = TCItem.new(1, 1, 3)
  2. a2 = TCItem.new(1, 2, 1)
  3. a3 = TCItem.new(0, 0, 1000)
  4. b1 = TCItem.new(1, 3, 1)
  5. b2 = TCItem.new(2, 1, 1)
  6. b3 = TCItem.new(3, 1, 1)
  7. a = [a1, a2, a3]
  8. b = [b1, b2, b3]
  9. $reci = TCRecipe.new("test", a, b)
  10. p $reci.name
  11. p $reci.is_can_use
  12. p $reci.list_of_material
  13. p $reci.list_of_product
复制代码
结果打印出来的结果是
"test"
true
"无"
"无"
也就是说"原料"数组和“成品”数组没有被读入

求高手挑刺,到底是哪里出了问题

作者: Wind2010    时间: 2011-2-9 22:10
本帖最后由 Wind2010 于 2011-2-9 22:11 编辑

既然已经写了
  1.   attr_accessor :kind
  2.   attr_accessor :num
  3.   attr_accessor :amount
复制代码
那个下面的那串
  1.   def kind
  2.     return @kind
  3.   end
  4.   def kind=(newkind)
  5.     @kind = newkind
  6.   end
  7.   def num
  8.     return @num
  9.   end
  10.   def num=(newnum)
  11.     @num = newnum
  12.   end
  13.   def amount
  14.     return @amount
  15.   end
  16.   def amount=(newamount)
  17.     @amount = newamount
  18.   end
复制代码
就不用了
其他的需要再看看XD
作者: DeathKing    时间: 2011-2-9 23:22
楼主之前是VB的程序员?代码没什么问题,不过有一个很严重,很容易被忽视的错误:

在Ruby里,判断相等应该是 == 方法,而不是 = 操作符。

比如,如果1等于1就应该写作 if 1 == 1 而不是if 1 = 1。否则,无论if后面的condition是什么,都会认为是true而执行then(此关键字通常被省略)后面的语句块
作者: lxczzzcxl    时间: 2011-2-10 09:23
明白了……ORZ




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1