2
4

More than 3 years have passed since last update.

Rubyでトランプの山札からカードを引くアプリを作った(1)

Last updated at Posted at 2019-11-07

トランプを使ったゲームがたくさんあるのでRubyで書けるよなと思ってます。
よくあるのはブラックジャックとかポーカーとかですかね?

そのベースを作ってみました。

仕様要件

・ジョーカーを除いて、52枚のカードが重複しないようにする。
・一枚ずつ山札からカードを引く。
・手札の上限枚数までカードを引けるようにする。
・手札を捨てることができる。
・山札を使い切る、もしくはカードを引くことやめると終了する。

実際に書いてみた

playing_card.rb
# カード判定メソッド
def card_judge(i)
  # 記号判定
  if i % 13 == 0
    mark_no = (i / 13) - 1
  else
    mark_no = i / 13
  end
  # マーク番号:0スペード/1ハート/2ダイア/3クラブ
  case mark_no
  when 0
    card_mark = "♠️" #SPADE
  when 1
    card_mark = "♥️" #HEART
  when 2
    card_mark = "♦️" #DIAMOND
  when 3
    card_mark = "♣️" #CRAB
  else
    puts "ERROR"
    exit
  end

  # 数字判定
  card_num = i - ( 13 * mark_no )

  # 表示判定
  disp_list = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
  disp_num = disp_list[(card_num - 1)]

  # 戻り値:カードの数字/カードのマーク/表示される文字
  return card_num, card_mark, disp_num
end

# デッキをシャッフルする
puts "DECKをシャッフルします"
deck = [*(1..52)]
deck.shuffle!
puts ""

# 手札の設定
hand = []
hand_limit = 7

# ドローのループ
loop_flg = 0
while loop_flg == 0 do
  # カードをドローする
  puts "DECKからカードをドローします"
  draw_card = deck.shift(1)
  card = card_judge(draw_card[0])

  puts "#{card[1]} #{card[2]}"
  puts "DECKの残り枚数は、#{deck.length}枚"
  puts ""

   # 手札の表示させる
  hand.push(draw_card[0])
  puts "手札一覧(#{hand.length}枚):"
  i = 0
  while i < hand.length do
    puts "#{card_judge(hand[i])[1]} #{card_judge(hand[i])[2]}"
    i += 1
  end

  if deck.length == 0
    # デッキを使い切ったときの挙動
    puts "DECKを使い切りました"
    loop_flg = 1
  elsif hand.length >= hand_limit
    # 手札上限チェック
    puts "上限を超えているのでドローできません"
    puts "手札をすべて捨てますか?[Y/N]"
    response = gets
    case response
    when /^[yY]/
      hand = []
    when /^[nN]/
      loop_flg = 1
    end
  else
    # さらにドローする
    puts "ドローしますか?[Y/N]"
    response = gets
    case response
    when /^[yY]/
      puts ""
    when /^[nN]/
      loop_flg = 1
    end
  end
end

exit

ソースコードで使用したもの

後日まとめます

・商と余剰(トランプを判断するロジック)
・配列、何番目の要素を取得、要素数の取得、要素の追加、シャッフル
・while文
・shiftメソッド
・文字入力

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4