Структуры данных для игры в блэкджек - PullRequest
2 голосов
/ 20 февраля 2011

Я пытаюсь научиться использовать Ruby, и в качестве своего первого приложения я бы хотел создать консольную игру в блэкджек.

Я не слишком знаком с конструкциями Ruby, и единственный способ научиться и чувствовать себя как дома - это строить вещи и учиться на своих ошибках.

Я думаю о создании класса Card, и у него в классе Stack есть коллекция карт.

Однако я не знаю точно, какой встроенный тип мне нужно использовать для хранения этих объектов Карты.

Вот мой класс карты:

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, или, может быть, есть лучший более рубиновый способ сделать это.

Ответы [ 3 ]

2 голосов
/ 21 февраля 2011

Встроенный в 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 голосов
/ 21 февраля 2011

Ruby - это динамический язык, поэтому он обычно не полагается на строгую проверку типов во время компиляции, что делает конструкции, такие как шаблоны List<Card>, довольно бесполезными.В Ruby обычно есть один универсальный тип данных упорядоченных коллекций - Array, который близко имитирует ArrayList концепцию Java / C #.

Так что, если вы не хотите, чтобы 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 голос
/ 21 февраля 2011

Два эпизода Ruby Quiz были посвящены блэкджеку.Решения второго могут дать вам несколько идей: http://www.rubyquiz.com/quiz151.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...