所以我不是要求任何人为我解决这个问题,但我确实需要一些帮助。我是面向对象编程的新手,但它开始对我有意义。以下是我目前为战争卡片游戏所做的代码。我现在不关心西装,虽然我知道如果需要的话如何添加它们。基本上,我的下一步是弄清楚如何为每个玩家交出26张牌。
这段代码现在使用Fisher-Yates算法对牌组进行洗牌,并输出一个包含现在改组牌组的字符串。我以为这会返回一个数组,因为我使用的是“to_a”方法,但我不认为是这种情况。
我如何将这个套牌交给每个玩家?我需要桌子或球员的等级吗?任何正确方向的帮助都会很棒。再说一遍,请不要为我解决。我想尽可能地为自己解决这个问题。 编辑:使用1.9.3,如果它有用。
class Card
VALUE = %w(2 3 4 5 6 7 8 9 10 J Q K A)
attr_accessor :rank
def initialize(id)
self.rank = VALUE[id % 13]
end
end
class Deck
attr_accessor :cards
def initialize
self.cards = (0..51).to_a.shuffle.collect { |id| Card.new(id) }
end
end
class Array
def shuffle!
each_index do |i|
r = rand(length-i) + i
self[r], self[i] = self[i], self[r]
end
end
def shuffle
dup.shuffle!
end
end
d = Deck.new
d.cards.each do |card|
print "#{card.rank} "
end
答案 0 :(得分:0)
有很多方法可以做到这一点。我没有解决它,但开始了一些你可以添加到结构游戏中的基本类。我会在你的Deck课程中添加一个方法,从甲板上取一张牌。此外,“玩家”类对于代表每个玩家也很有用。每个玩家对象都有一个持有牌的手牌属性:
class Deck
def remove_card
self.cards.pop # removes a card from end of array
end
def empty?
self.cards.count == 0
end
end
d = Deck.new
d.cards.count #=> 52 cards
p = Player.new
p.hand << d.remove_card
d.cards.count #=> 51 cards now that one has been removed
你的牌组将牌固定在阵列中。你的输出是一个字符串,因为你打印出了排名,但是card属性确实是一个包含卡片对象的数组。你也可以有一个游戏类来处理游戏:
class Game
def initialize(player1, player2)
@player1 = player1
@player2 = player2
end
def play_poker
@deck = Deck.new
# give each player five cards
1.upto(5) do |num|
@player1.hand << @deck.remove_card
@player2.hand << @deck.remove_card
end
# each player has a five card hand at this point
# omitted code, have a method to score the two hands and determine the winner
end
def play_war
# omitted code, have players issued cards
# omitted, instructions, game play code
end
end
所以你可以让游戏玩不同的游戏。评分和输出是您需要添加的其他方法。我也省略了你要做的Player类。但是你可以玩这样的游戏:
p1 = Player.new
p2 = Player.new
game = Game.new(p1, p2)
game.play_poker #=> output could be text like: Player 1's hand: A, 4, 4, 2, Q, Player 2's hand:...... etc
#=> winner is Player 1!
评分可以通过游戏类中的方法完成。它还会输出上面的文字,打印每个玩家得到的手和谁赢了。如果使用相同的游戏对象进行许多游戏,则必须确保玩家清理双手,使用新的牌组(或进行重新洗牌)等等。
如果你真的想让两个人玩,你就会有按钮控制每一步。 H要打或留下等等。希望这会有所帮助。