トランプを使ったゲームがたくさんあるので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メソッド
・文字入力