LoginSignup
kuramon01
@kuramon01

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Ruby スロットゲームの条件分岐について

解決したいこと

スロット

現在Rubyで「投入コイン数に応じて当たり列が ×1 ×3 ×5 となる一般的なスロットゲームを作成しているのですが、一行以上揃えた場合(コイン数に応じて揃った行×100ポイント)の条件分岐がわからず煮詰まっています。

最終的には、以下のようにしたいです。
・ 1(10コイン) 2(30コイン) 3(50コイン)から投入コインを選ぶ
・投入コイン数に応じて揃うと当たりになる列が増える
・揃った列に応じて×100ポイントを追加する(コインではありません)

下記は一列揃った場合のみのソースコードです。

該当するソースコード

coin = 100
point = 0

loop do
  puts "残りコイン数#{coin}"
  puts "ポイント#{point}"
  puts "何コイン入れますか?"
  puts "1(10コイン) 2(30コイン) 3(50コイン) 4(やめとく)"
  putin = gets.to_i
  latch = [0,10,30,50]
  
  if putin == 4
    puts "また挑戦してね!"
    break
  elsif putin == 1||2||3
    if latch[putin] > coin
      puts "コインが足りません。"
      break
    end
  end
  
  puts "エンターを3回押して数字を揃えよう!"
  coin = coin - latch[putin]

  num1 = rand(9)
  num2 = rand(9)
  num3 = rand(9)
  num4 = rand(9)
  num5 = rand(9)
  num6 = rand(9)
  num7 = rand(9)
  num8 = rand(9)
  num9 = rand(9)

  puts = gets
  puts "--------------------"
  puts "|#{num1}| | |"
  puts "|#{num2}| | |"
  puts "|#{num3}| | |"
  puts "--------------------"
  puts = gets
  puts "--------------------"
  puts "|#{num1}|#{num4}| |"
  puts "|#{num2}|#{num5}| |"
  puts "|#{num3}|#{num6}| |"
  puts "--------------------"
  puts = gets
  puts "--------------------"
  puts "|#{num1}|#{num4}|#{num7}|"
  puts "|#{num2}|#{num5}|#{num8}|"
  puts "|#{num3}|#{num6}|#{num9}|"
  puts "--------------------"

  if (num2 == num5) && (num5 == num8)
    puts "おめでとう!一列揃いました"
    puts "100ポイント獲得です!"
    point += 100
    puts "--------------------"
  else
    puts "残念!"
    puts "--------------------"
  end
end

自分で試したこと/聞きたいこと

初めは「case/when」等を使い、投入コインに応じた分岐を考えていたのですが、ある方から以下のような「別で変数を用意してそこに列が揃うごとにカウントをプラス1して、最終的にifで判断する」やり方を提示してもらいました。

ただ、下記のイメージはなんとなくわかるのですが、使い方がよくわかりません。
どのように使えばよいのでしょうか??

mathed_count = 0
mathed_count++ if (num2 == num5) && (num5 == num8)
......

if mathed_count
 mathced_count * 100
else 
  p 'fin'
end
0

2Answer

こんな感じでしょうか。

  mathed_count = 0
  mathed_count += 1 if (num2 == num5) && (num5 == num8) # 横中段
  mathed_count += 1 if (num3 == num5) && (num5 == num7) # 左斜め
  ......


  if mathed_count > 0
    puts "おめでとう!#{"一二三四五六七八九十"[mathed_count - 1]}列揃いました"
    puts "#{100 * mathed_count}ポイント獲得です!"
    point += 100 * mathed_count
    puts "--------------------"
  else
    puts "残念!"
    puts "--------------------"
  end

追記

必要に応じて、mathed_count += 1 if ...の行を追加してください。

1Like

Comments

  1. @kuramon01

    Questioner
    ご回答ありがとうございます!
    実際に当てはめて回答していただくとイメージが湧きやすいです!

    mathed_count += 1 if (num2 == num5) && (num5 == num8)のところですが、
    ここは複数列にする場合(横3列斜め2列)だとどのように書くのでしょうか。
    上記の場合だと真ん中の横一列だけが当たるたびにカウント+1されるとは思うのですが、
  2. @kuramon01

    Questioner
    早速のご回答ありがとうございます!
    うまくいきました!
    さらに何度も申し訳ないのですが、なぜ#{"一二三四五六七八九十"[mathed_count - 1]}で「mathed_count」からマイナス1をするのでしょうか。。

なぜ#{"一二三四五六七八九十"[mathed_count - 1]}で「mathed_count」からマイナス1をするのでしょうか。。

配列が0から始まるからです。

0Like

Your answer might help someone💌