簡易的なすごろくゲームを Ruby で作ってみました。
前段
- 今回、クラスを用いた実装を行いたかったので、 Player クラスを用意しました。
- 「名前」、「サイコロ数」、「ゴール数」を保持するようにしています。
- main.rb では、メッセージやゲームの進行など実装しています。
- 実装を少なく、機能実現を目指したので、色々考慮出来ていないところは温かい目で、、、🥺
実装
player.rb
class Player
def initialize(name)
@name = name
@dice_number = 0
@number_up_to_goal = 10
end
def add_dice_number(number)
@dice_number += number
end
def get_name
@name
end
def goal?
@number_up_to_goal <= @dice_number
end
def subtract_goal
@number_up_to_goal - @dice_number
end
end
main.rb
# Player クラスを読み込めるようにしておく。
require './player'
# 🎲 呼び出し処理
def roll_dice
return rand(1..3)
end
puts '-----------------------------',
'すごろくゲームにようこそ!!🎲',
'先に10マス進めた方が勝ちです。',
'あなたの名前を教えてください。',
'-----------------------------'
# gets でユーザーにキーボード入力をさせる
player_name = gets
player_human = Player.new(player_name.chomp)
player_com = Player.new('HOGE')
puts "「#{player_human.get_name}さん。よろしくね。👤」",
"「COMは、#{player_com.get_name}さんだよ。👤」"
# 処理内で break を実装しているので loop 処理にしています。
loop do
puts '-----------------------------',
"#{player_human.get_name}さんは、残り#{player_human.subtract_goal}マスです!!",
"COMは、残り#{player_com.subtract_goal}マスです!!",
"#{player_human.get_name()}さんの番です。エンターキーを押してください。",
'-----------------------------'
gets
player_dice_count = roll_dice
puts "コロコロコロコロ...🎲"
sleep(1) # サイコロ振っている感じを出すため、 sleep を使用
puts "#{player_dice_count}が出ました!"
player_human.add_dice_number(player_dice_count)
com_dice_count = roll_dice
puts "COMは、#{com_dice_count}が出ました!"
player_com.add_dice_number(com_dice_count)
if player_human.goal?
puts "#{player_human.get_name}さんの勝ちです!!😆"
break
end
if player_com.goal?
puts 'COMの勝ちです!!🥺'
break
end
end
実行
ruby main.rb
=>
-----------------------------
すごろくゲームにようこそ!!🎲
先に10マス進めた方が勝ちです。
あなたの名前を教えてください。
-----------------------------
=>
「Qiita太郎さん。よろしくね。👤」
「COMは、HOGEさんだよ。👤」
-----------------------------
Qiita太郎さんは、残り10マスです!!
COMは、残り10マスです!!
Qiita太郎さんの番です。エンターキーを押してください。
-----------------------------
=>
コロコロコロコロ...🎲
3が出ました!
COMは、1が出ました!
-----------------------------
Qiita太郎さんは、残り7マスです!!
COMは、残り9マスです!!
Qiita太郎さんの番です。エンターキーを押してください。
-----------------------------
(省略..)
=>
コロコロコロコロ...🎲
1が出ました!
COMは、2が出ました!
Qiita太郎さんの勝ちです!!😆
所感
- ルールを複雑化にしたり、カード要素や、イベント要素まで機能があると、楽しめるゲームになりそう。機会があれば改良版を実装したいと思います。
- main.rb に関して、メッセージ部分と混在しているので読みにくいなと感じた、メソッド化して、メッセージはメッセージで管理するのがベターな気がする。