【发布时间】:2014-05-01 13:33:21
【问题描述】:
我正在尝试在 Ruby 中创建一个简单的回合制战斗,但在课程方面我总是卡住。我试图通过从基本代码开始并围绕它构建它来做到这一点。通过使用常规变量和基本攻击代码,我能够使其工作变得足够简单:
player = "goodguy"
player_health = 15
player_damage = 5
enemy = "badguy"
enemy_health = 15
enemy_damage = 5
puts "#{player} attacks #{enemy} and does #{player_damage} damage."
enemy_health -= player_damage
puts "#{enemy} has #{enemy_health} remaining."
然后,我将攻击变成了一个函数(我必须将变量设为全局变量,以便函数可以看到它们):
$player = "goodguy"
$player_health = 15
$player_damage = 5
$enemy = "badguy"
$enemy_health = 15
$enemy_damage = 5
def player_attack
puts "#{$player} attacks #{$enemy} and does #{$player_damage} damage."
$enemy_health -= $player_damage
puts "#{$enemy} has #{$enemy_health} health remaining."
if $enemy_health <= 0
puts "#{$enemy} died!"
end
end
player_attack()
接下来,我把Player变成了一个类:
class Player
attr_accessor :name; :hp; :damage
def initialize(name, hp, damage)
@name = name
@hp = hp
@damage = damage
end
def attack
puts "#{self.name} attacks #{$enemy}!"
$enemy_health -= @damage
puts $enemy_health
end
end
$enemy = "badguy"
$enemy_health = 15
$enemy_damage = 5
me = Player.new("goodguy", 15, 5)
me.attack
这就是我卡住的地方。当我将Enemy 变成一个类(基本上完全按照Player 类建模)时,我无法弄清楚如何使这两个对象相互交互。这段代码不起作用,但这是我尝试的最后一个。 #{} 变量更能显示我想要实现的目标:
class Player
attr_accessor :name; :hp; :damage
def initialize(name, hp, damage)
@name = name
@hp = hp
@damage = damage
end
def attack
puts "#{self.name} attacks #{badguy.name}!"
badguy.hp -= @damage
puts badguy.hp
end
end
class Enemy
attr_accessor :name; :hp; :damage
def initialize(name, hp, damage)
@name = name
@hp = hp
@damage = damage
end
def attack
puts "#{self.name} attacks #{goodguy.name}!"
player.hp -= @damage
puts player.hp
end
end
goodguy = Player.new("Nicehero", 15, 5)
badguy = Enemy.new("Eviljerk", 15, 5)
me.attack
基本上,我想做的是让Player 对象可以与Enemy 对象交互。当我尝试让 2 个类相互交互时,我似乎无法正常工作;此外,#{variable.name} 并不是我尝试让函数报告这些值的唯一方法,但我似乎无法找到如何实际引用该对象。
显然,关于对象如何交互或我的代码正在做什么以及我认为它应该做什么,我缺少一些东西。我将不胜感激有关让这两个类进行交互或如何重写它以使其按预期运行的任何建议。
【问题讨论】:
-
类不会神奇地知道彼此的实例;某些实体必须告诉他们。一种常见的方法是让另一个类代表游戏或棋盘,它负责对玩家说:“轮到你了,这是敌人,这是敌人做了什么,你会做什么? "
-
谢谢@JacobM,你能举个例子说明如何使用父类来完成吗?
标签: ruby