二十一点游戏的数据结构

时间:2011-02-20 20:55:21

标签: ruby data-structures blackjack

我正在尝试学习如何使用Ruby,作为我的第一个应用程序,我想构建一个基于控制台的Blackjack游戏。

我对Ruby结构并不太熟悉,我在家里学习和感受的唯一方法就是构建并从错误中吸取教训。

我正在考虑创建一个Card类,并且Stack类有一组卡片。

但是我不确切知道我需要使用哪种内置类型来保存这些Card对象。

这是我的卡片类:

class Card

  attr_accessor :number, :suit

  def initialize(number, suit)
    @number = number
    @suit = suit
  end

  def to_s
    "#{@number} of #{@suit}"
  end
end

由于我来自C#,我想过使用像List Cards这样的东西{get; set;} - 在Ruby中存在类似的东西,或者有更好的rubyesque方法来实现这一点。

3 个答案:

答案 0 :(得分:2)

Ruby是一种动态语言,因此它通常不依赖于严格的编译时类型检查,因此使得诸如模板化List<Card>之类的构造相当无用。 Ruby通常有一个通用数据类型的有序集合 - Array,它非常类似于Java / C#的ArrayList概念。

因此,除非您希望Stack成为特殊内容,否则您可以按原样使用Array

@stack = []
@stack << Card.new(6, :spades)
@stack << Card.new(10, :hearts)

或以某种方式扩展Array

class Stack < Array
  # some ultra-cool new methods
end

@stack = Stack.new
@stack << Card.new(...)

答案 1 :(得分:2)

Ruby的内置Array类型具有像堆栈一样的方法:

a = [1, 2, 3]  # arrays can be initialized with []
a.push(4)      # a is now [1, 2, 3, 4]
a.pop          # returns 4, a is now [1, 2, 3]

答案 2 :(得分:1)

两个Ruby Quiz剧集专门用于二十一点。第二个解决方案可能会给你一些想法:http://www.rubyquiz.com/quiz151.html