# # 「カード」を表現するCardクラスを定義する # class Card # クラス定義におけるinitializeという名前のメソッドは、 # そのクラスの値(インスタンス)がnewされるときに自動的に # 呼ばれるメソッド。 # 通常initializeメソッドは必ず定義する。 def initialize() # @で始まる変数はインスタンス変数といい、クラスの中で # しか利用できないつまりクラス定義の外からは一切いじる # ことも見ることもできないので後で変えるかもしれない # データ構造はインスタンス変数に閉じ込めるのがポイント @card = Array.new # 全てのカードを保存する配列 @now = -1 # 今何枚目かをしまう変数 for suit in ["ハート", "スペード", "ダイヤ", "クラブ"] @card << {"suit" => suit, "n" => "A"} # ここで代入しているのがハッシュ 2.upto(10) do |n| @card << {"suit" => suit, "n" => n.to_s} end for n in ["J", "Q", "K"] @card << {"suit" => suit, "n" => n} end end shuffle end def shuffle() # @cardをいじるので引数は要らない srand 0.upto(@card.length-1) do |i| j = rand(@card.length-1) # 交換相手をランダムに選ぶ w = @card[i] @card[i] = @card[j] @card[j] = w end @now = -1 # カードの順番-1にしておく。 end def next() # つぎの1枚を引く、メソッド if @now >= @card.length shuffle() end @card[@now += 1] end # クラスメソッドの定義 # クラスメソッドはそのクラスのインスタンス全体に共通のメソッド # クラスメソッドは クラス名.メソッド名 で定義する def Card.suit(card) # スートを得るメソッド card["suit"] end def Card.n(card) # 数を得るメソッド card["n"] end end