【问题标题】:An object as a parameter/argument in Ruby?一个对象作为Ruby中的参数/参数?
【发布时间】:2017-10-12 17:22:11
【问题描述】:

我一直在玩 Ruby,想制作简单的小型 RPG 游戏。它进展顺利(已经完成了大部分角色的创建)。但是,我很难找出如何制作攻击方法(或其他类型的目标方法,如治疗)。例如,该方法将采用“用户”参数和“目标”参数。它将使用用户的统计数据来影响目标的 HP。我一直在寻找这方面的信息,但我无法“获得”这些线程的内容。我是初学者,所以我什至不确定他们是否在谈论我想要了解的内容。

这基本上就是我想要的。当然,这是行不通的:

 class Enemy
      attr_accessor :hp, :power
      def initialize (hp, power)
           @hp = hp
           @power = power
      end
 end
 class Hero
      attr_accessor :hp, :power
      def initialize (hp, power)
           @hp = hp
           @power = power
      end
 end

 monster = Enemy.new(7,3)
 dude = Hero.new(10,5)

 def attack(user,target)
      user.hp - target.power
 end

 puts "Dude's HP is #{dude.hp}, and power is #{dude.power}"
 puts "Monster's HP is #{monster.hp}, and power is #{monster.power}"

 puts " "

 puts "Dude attacks!"

 attack(dude, monster)

 puts "Dude's HP is #{dude.hp}, and power is #{dude.power}"
 puts "Monster's HP is #{monster.hp}, and power is #{monster.power}"

 puts " "

 puts "Monster attacks!"

 attack(monster, dude)

 puts "Dude's HP is #{dude.hp}, and power is #{dude.power}"
 puts "Monster's HP is #{monster.hp}, and power is #{monster.power}"

 x = gets

如果这是一个非常菜鸟的问题,我深表歉意,但我只是没有找到它。如果另一个帖子有答案(以我能理解的方式),请指点我。

也许我还应该提供我的角色创建和统计代码,所以你知道我在处理什么吗?

感谢您阅读我的问题,并希望回答。

【问题讨论】:

  • 据我所知,您正在寻找实现 attack 方法的想法。如果我是对的,那么兄弟你来错地方了。请说明您正在尝试的内容、错误的附加内容以及您的尝试方式,没有人可以帮助任何人。

标签: ruby object parameters arguments


【解决方案1】:

试试这个:

def attack(user,target)
  user.hp -= target.power
end

但我真的认为你应该用 OOP 风格来写它:

class Common
  attr_accessor :hp, :power

  def initialize(hp, power)
    self.hp = hp
    self.power = power
  end

  def hit(target)
    p "#{self.class} hits #{target.class}"
    target.hp = [target.hp - power, 0].max # you don't want hp less then 0 possible
  end
end

class Hero < Commom; end
class Enemy < Common; end

然后像这样使用它

monster = Enemy.new(7,3)
dude = Hero.new(10,5)

moster.hit(dude)
dude.hit(monster)

【讨论】:

  • ... 我的数学计算错了,如果我没有,我就不需要这个线程了。谢谢!不过,我相信我仍然会在大多数情况下使用第一种方法
  • @Natheus 帮忙没问题。如果我理解你的话,我的答案是正确的,所以你可能应该选择它。
猜你喜欢
  • 1970-01-01
  • 2011-03-28
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 2019-07-22
相关资源
最近更新 更多