Programming Technique: How to create a simple card game

前端 未结 6 1203
自闭症患者
自闭症患者 2020-12-24 00:10

as I am learning the Ruby language, I am getting closer to actual programming. I was thinking of creating a simple card game. My question isn\'t Ruby oriented, but I do kno

6条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-24 00:13

    Something to get you started

    You can ensure unique cards very easily by using numbers from 0 to 51.

    The Array#shuffle method is based off the Knuth-Fisher-Yates shuffle algorithm. 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
    

    test

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

    output

    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
    

提交回复
热议问题