前提・実現したいこと
Rubyを使ってビンゴカードゲームを作成したいのですが、初心者ですのでわからない部分が非常にあるので解決したいです。
発生している問題
作成までに3ステップ、以下。
STEP1【ビンゴボールの取り出し】
・ランダムに数字が出る
・一度出た数字は出ない
・出た数字を画面に標示する
STEP2 【カードの作成】
・ランダムにビンゴカードを作成する
・BINGOカード内の数字配置にはルールがある
(B列:115 I列:1630 N列:3145 G列:4660 O列:61~75)
・BINGOカードは2次元配列で表現する
・1つのカード内に同じ数字は出現しない
・真ん中はFREE(穴の開いた状態)
・カードを画面に表示する
STEP3 【ゲームの開始とカードのチェック】
・開始時にカードと数字を初期化(ランダム作成なので前回と同じにならないこと)
・出たボールとカードの状態を表示する
・穴の開いた状態でも元の数字が確認できるようにする
・1度数字を出すたびに現在のリーチ数、ビンゴ数を表示する 表示例↓
ball[46]:47 #ボールを引いて46回目、47が出る
03 28 44 (54)(68)
(01)(23) 42 57 75
(07) 25 FREE(50)(69)
(02)(27)(32)(60)(73)
04 (30) 43 (49)(64)
REACH: 4
BINGO: 1 #この時点でリーチ4、ビンゴは一個
ball[47]:25 #ボールを引いて47回目、以下同様
03 28 44 (54)(68)
(01)(23) 42 57 75
(07)(25)FREE(50)(69)
(02)(27)(32)(60)(73)
04 (30) 43 (49)(64)
REACH: 4
BINGO: 2
試したこと
STEP2の作成
class Bingo
def self.generate_card
title = 'BINGO'.chars
col_size = title.size
range = 15
title_str = title.map { |t| t.rjust(2) } * ' | ' numbers = col_size.times .map { |i| range.times.map { |j| (i * range + j + 1) }.sample(col_size) } .transpose body = numbers.map.with_index do |row, row_index| row.map.with_index { |col, col_index| center = row_index == col_size / 2 && row_index == col_index center ? ' ' : col.to_s.rjust(2) } * ' | ' end [title_str, body].join("\n")
end
end
ステップ2はこのような感じだと思います。。
まったくの初心者でステップ2、カードの作成だけブログなどを参考にできましたが、ステップ1、3がわからないです。また、「ダウンロード内」にてtxtファイル保存までの流れをどなたかお教えくださると助かります!
補足情報(FW/ツールのバージョンなど)
Mac OS Catalina 10.15.2 Ruby 2.5.0