0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

🐣【Ruby入門】すごろくゲームを作ってみた🎲

Last updated at Posted at 2023-02-25

簡易的なすごろくゲームを 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 に関して、メッセージ部分と混在しているので読みにくいなと感じた、メソッド化して、メッセージはメッセージで管理するのがベターな気がする。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?