ポーカーのルール
- n回手札を交換できます。
- ジョーカーを含めない52枚から構成されます。
- 同じ札は入りません。
- 以下の順番に役が出力されます。
m = 0
mark = ["heart","diamond","spade","club"]
puts "何回交換しますか?"
n = gets.to_i
a = [rand(1..13),mark[rand(4)]]
b = [rand(1..13),mark[rand(4)]]
c = [rand(1..13),mark[rand(4)]]
d = [rand(1..13),mark[rand(4)]]
e = [rand(1..13),mark[rand(4)]]
cards = [a,b,c,d,e].sort.uniq
(n + 1).times do
while cards[4] == nil do
cards << [rand(1..13),mark[rand(4)]]
end
sum = cards.flatten!
puts "手札"
puts "#{a},#{b},#{c},#{d},#{e}"
hea = sum.count("heart")
dia = sum.count("diamond")
spa = sum.count("spade")
clu = sum.count("club")
sum.delete_if do |str|
mark.include?(str)
end
array = sum.group_by(&:itself).map{ |k, v| [k, v.count] }.to_h
if hea == 5 || dia == 5 || spa == 5 || clu ==5
if cards[0][0] == 1 && cards[1][0] == 10 && cards[1][0]+3 == cards[4][0]
puts "loyal_straight_flash"
elsif cards[0][0]+4 == cards[4][0]
puts "straight_flash"
end
end
if array.value?(4)
puts "four Card"
elsif array.value?(3) && array.value?(2)
puts "full house"
elsif hea == 5 || dia == 5 || spa == 5 || clu ==5
puts "flash"
elsif cards[0][0]+4 == cards[4][0]
puts "straight"
elsif array.value?(3)
puts "three card"
elsif array.values[0] == 2 || array.values[1] == 2 && array.values[3] == nil
puts "two pair"
elsif array.value?(2)
puts "one pair"
else
puts "no pair"
end
m += 1
if n >= m
puts "交換しますか? yes=1 no=0"
change = gets.to_i
if change == 1
puts "どれを交換しますか?"
puts "a b c d e"
trade = gets.chomp.split.map(&:to_s)
if trade.include?("a")
a = [rand(1..13),mark[rand(4)]]
end
if trade.include?("b")
b = [rand(1..13),mark[rand(4)]]
end
if trade.include?("c")
c = [rand(1..13),mark[rand(4)]]
end
if trade.include?("d")
d = [rand(1..13),mark[rand(4)]]
end
if trade.include?("e")
e = [rand(1..13),mark[rand(4)]]
end
else
break
end
end
end
2次元配列のみで出来そうでしたけど、ペアの定義がややこしくなりそうだったので、1次元配列に直してから定義しました。