我正在创建一个包含多个班级的纸牌游戏.目前,我使用全局变量来保存$shuffled_deck,$players_hand和$dealers_hand变数,但我使用全局变量时(也许,不必要的),并希望使用实例变量担心.
我一直在看书,但没有什么是真的点击.任何人都可以帮我指出正确的方向吗?
使用实例变量我无法保存@players_hand并@dealers_hand能够在其他类中使用它们.例如,我@players_hand来自Player班级.我有Dealer班级画一张卡片,但是我不能把它拉@players_hand进Dealer班里把两者加在一起.
我目前的代码是:
class Blackjack
def initialize
@player = Player.new
@dealer = Dealer.new
end
end
class Dealer
def initialize
@deck = Deck.new
$dealers_hand = 0
end
def hit_dealer
@deck.hit_dealer
end
def hit_player
@deck.hit_player
end
def draw_card
@hit = $shuffled_deck
end
def shuffle
@deck.suits
end
end
class Player
def initialize
$players_hand = 0
end
end
class Deck
def suits
#code that shuffled the deck..
$shuffled_deck = @shuffled_deck
end
def hit_player
@hit = $shuffled_deck.pop
end
def hit_dealer
@hit = $shuffled_deck.pop
end
end
Run Code Online (Sandbox Code Playgroud)
您想使用attr_reader、attr_writer、 或attr_accessor。它们的工作原理如下:
attr_reader :players_hand:允许您编写以获取该玩家实例变量some_player.players_hand的值players_handattr_writer :players_hand:允许您写入some_player.players_hand = 0将变量设置为 0attr_accessor :players_hand:允许您读取和写入,就好像您同时使用了attr_reader和 一样attr_writer。顺便说一下,这些所做的只是为您编写方法。如果你愿意,你可以像这样手动完成:
class Player
def initialize
@players_hand = 0
end
def players_hand
@players_hand
end
def players_hand=(new_value)
@players_hand = new_value
end
end
Run Code Online (Sandbox Code Playgroud)
使用你的例子,你可以这样做
class Blackjack
attr_reader :player, :dealer
def initialize
@player = Player.new
@dealer = Dealer.new
end
end
class Dealer
def dealers_hand #the long java way of a getter
@dealers_hand
end
#and now the short ruby way
attr_reader :dealers_hand #if you only need to read the attribute
attr_writer :dealers_hand #if you only need to write the attribute
attr_accessor: dealers_hand #if you need both
def initialize
@deck = Deck.new
@dealers_hand = 5
end
def hit_dealer
@deck.hit_dealer
end
def hit_player
@deck.hit_player
end
def draw_card
@hit = $shuffled_deck
end
def shuffle
@deck.suits
end
end
class Player
attr_reader :players_hand
def initialize
@players_hand = 0
end
end
class Deck
def suits
attr_reader :shuffled_deck
@shuffled_deck = @shuffled_deck
end
def hit_player
@hit = $shuffled_deck.pop
end
def hit_dealer
@hit = $shuffled_deck.pop
end
end
game = Blackjack.new
p game.dealer.dealers_hand
game.dealer.dealers_hand = 4
p game.dealer.dealers_hand
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6676 次 |
| 最近记录: |