ruby – 编程技巧:如何创建简单的纸牌游戏

前端之家收集整理的这篇文章主要介绍了ruby – 编程技巧:如何创建简单的纸牌游戏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我正在学习 Ruby语言时,我越来越接近实际编程.我正在考虑创建一个简单的纸牌游戏.我的问题不是面向Ruby的,但我知道要学习如何用真正的OOP方法解决这个问题.在我的纸牌游戏中,我想要有四个玩家,使用一个52卡的标准甲板,没有小丑/通配符.在游戏中,我不会使用ace作为双卡,它总是最高的卡.

所以,我想知道的编程问题如下:

>如何对卡片卡进行排序/随机化?有四种类型,每种都有13个值.最终只能有唯一的值,所以选择随机值可能会产生重复.
>如何实现一个简单的AI?因为有大量的纸牌游戏,有人会把这部分已经弄清楚了,所以参考是很棒的.

我是一个真正的Ruby nuby,我的目标是学习解决问题,所以伪代码会很棒,只是为了了解如何以编程方式解决问题.对于我的语法和写作风格,如果不清楚道歉,因为这不是我的母语.

此外,指向这些挑战的网站的指针将是一个很好的资源!

感谢您的意见,答案和反馈!

解决方法

有事让你开始

您可以通过使用0到51之间的数字轻松确保独特的卡片.

Array#shuffle方法基于Knuth-Fisher-Yates随机播放算法. http://en.wikipedia.org/wiki/Fisher–Yates_shuffle

class Card
  RANKS = %w(2 3 4 5 6 7 8 9 10 J Q K A)
  SUITS = %w(Spade Heart Club Diamond)

  attr_accessor :rank,:suit

  def initialize(id)
    self.rank = RANKS[id % 13]
    self.suit = SUITS[id % 4]
  end
end

class Deck
  attr_accessor :cards
  def initialize
    # shuffle array and init each Card
    self.cards = (0..51).to_a.shuffle.collect { |id| Card.new(id) }
  end
end

# people with Ruby 1.9 (or 1.8.7 with backports) can safely ignore this duck punch
class Array
  # knuth-fisher-yates shuffle algorithm
  def shuffle!
    n = length
    for i in 0...n
      r = rand(n-i)+i
      self[r],self[i] = self[i],self[r]
    end
    self
  end
  def shuffle
    dup.shuffle!
  end
end

测试

d = Deck.new
d.cards.each do |card|
  puts "#{card.rank} #{card.suit}"
end

产量

6 Spade
5 Heart
2 Heart
8 Heart
8 Diamond
7 Club
J Diamond
4 Club
K Spade
5 Diamond
J Heart
8 Spade
10 Club
4 Diamond
9 Heart
7 Diamond
3 Diamond
K Diamond
7 Spade
Q Diamond
9 Diamond
6 Heart
A Heart
9 Club
A Spade
5 Club
J Club
Q Spade
2 Club
2 Spade
Q Heart
A Diamond
10 Spade
10 Diamond
Q Club
3 Club
A Club
K Club
6 Club
10 Heart
2 Diamond
3 Spade
K Heart
5 Spade
9 Spade
7 Heart
4 Spade
J Spade
3 Heart
4 Heart
8 Club
6 Diamond

猜你在找的Ruby相关文章