AR삽질러

Ruby ロト自動生成プロクラム 본문

Ruby/Ruby-日本語

Ruby ロト自動生成プロクラム

아랑팡팡 2023. 12. 21. 13:28
728x90

 

Ruby ロト自動生成プロクラム

 

使用者がLottoの金額を入力しその金額のLotto番号を自動生成する。

生成された自分のLotto番号とパソコンのLotto番号が合っているかチェックする。

 

例題

1. Lottoクラス

 - Lottoクラスは1から45までの数字の中からランダムに6つの数字を選択する必要。 これらの数字は整列で、重複があってはなりません。


2. ユーザクラス機能

 - ユーザが入力できる金額は、最低100円から最大20,000円の間でなければならない。 入力された金額に応じて購入できるロトの数を計算し、その数だけロト番号を生成する。

3. 当選番号生成

 - ComLottoクラスは当せん番号を生成する役割で、 このクラスは、1 から 45 までの数字の中からランダムに 6 つの数字を選択する。

4. 当選確認

 - Confirmationクラスは、ユーザーのロト番号と当せん番号を比較し、一致する数字の個数によって異なるメッセージを出力する。(例:6つ一致 - "1位!")! 20億」、5つ一致。 - 「2位!2000万円」)。

5. ユーザーインターフェイス

 - プログラムは、ユーザーに明確なガイダンス メッセージを提供する必要があり、入力エラーに対する適切な処理をする。

6. プログラムの流れ

 - プログラムは、ユーザーが終了を選択するまで繰り返す。

 

 

class Lotto
    attr_accessor :lotto_numbers

    def lotto_create_number
        @lotto_numbers = (1..45).to_a.sample(6).sort
    end
end

class User
    attr_accessor :money, :user_lotto_numbers

    def initialize
        @money = 0
        @user_lotto_numbers = []
    end

    def user_greet
        puts "---lotto店へようこそ           ---"
        puts "---1.       lotto購買         ---"
        puts "---2.       終了              ---"
        print "入力 1 or 2 : "
        select_user = gets.chomp.to_i

        if select_user == 1
            user_by_lotto
        elsif select_user == 2
            puts "lottoプロクラムを終了します.."
        else
            puts "間違った入力です.."
        end
    end

    def user_by_lotto
        print "\n購買するLotto金額を入力してください : "
        input_money = gets.chomp.to_i

        if input_money.between?(100, 20000)
            @money = input_money
            lotto_price = 100
            @lotto_count = @money / lotto_price
            puts "#{@money}円で #{@lotto_count}回を購入しました。\n"
            user_lotto_confirmation
        elsif input_money == 3
            puts "lottoプロクラムを終了します.."
        else
            puts "100円以上、 20000円以下で購入してください!"
        end
    end

    def user_lotto_confirmation
        com_lotto = ComLotto.new()
        confirmation = Confirmation.new(self, com_lotto)

        while true
            puts "\n---お買い上げのロト#{@lotto_count}回---"
            puts "---1. 自分のロトの番号を確認     ---"
            puts "---2.      当せん 確認          ---"
            puts "---3.      プロクラムを終了      ---"
            print "入力 1, 2, 3 : "
            choice = gets.chomp.to_i
            
            puts "\n"
            case choice
            when 1
                @lotto_count.times do |i|
                    lotto = Lotto.new()
                    lotto.lotto_create_number
                    @user_lotto_numbers << lotto.lotto_numbers
                    puts "#{i+1}番のロト : #{lotto.lotto_numbers}"
                end
            when 2
                com_lotto.com_lotto
                confirmation.check_winnig
            when 3
                puts "--プロクラムを終了します--"
                break
            else
                puts "間違った入力です。 もう一度試してください.."
            end
        end
    end
end

class LottoMachine
    
end

class ComLotto
    attr_accessor :com_lotto_numbers

    def initialize
        @com_lotto_numbers = (1..45).to_a.sample(6).sort
    end

    def com_lotto
        puts "\n--今週の当せん番号--"
        puts "#{@com_lotto_numbers}"
    end
end

class Confirmation

    def initialize(user, com_lotto)
        @user = user
        @com_lotto = com_lotto
    end

    def check_winnig
           winning_numbers = @com_lotto.com_lotto_numbers
           @user.user_lotto_numbers.each_with_index do |lotto_numbers, index|
                matched_number = lotto_numbers & winning_numbers
                case matched_number.size
                when 6
                    puts "#{index + 1}番のLotto番号 #{lotto_numbers} : 1位! 20億円"
                when 5
                    puts "#{index + 1}番のLotto番号 #{lotto_numbers} : 2位! 5000千万円"
                when 4
                    puts "#{index + 1}番のLotto番号 #{lotto_numbers} : 3位! 2000千万円"
                when 3
                    puts "#{index + 1}番のLotto番号 #{lotto_numbers} : 4位! 5000万円"
                when 2
                    puts "#{index + 1}番のLotto番号 #{lotto_numbers} : 5位! 500円"
                else
                    puts "#{index + 1}番のLotto番号 #{lotto_numbers} : すみません..ㅠㅠ"
                end
           end
    end
end

user = User.new()
user.user_greet

 

 


 

1. Lottoクラス

 - このクラスはロト番号を生成し、 lotto_create_numberメソッドを介して1から45までの数字の中からランダムに6つの数字を選択し、これを昇順に並べ替えます。
 - attr_accessor : lotto_numbersはlotto_numbersインスタンス変数に対するgetterとsetterメソッドを提供する。

 

2. Userクラス
 - ユーザーとの相互作用を管理し、 ユーザーからロト購入の金額を入力してもらい、購入したロト番号を保存する。
 - user_greetメソッドは、ユーザーに挨拶を出力し、ロト購入またはプログラム終了を選択する。
 - user_by_lottoメソッドは、ユーザーが入力した金額に応じてロトを購入し、 購入可能なロトの数は入力金額によって決まる。
 - user_lotto_confirmationメソッドは、ユーザーが購入したロト番号を確認し、当せんしたかどうかを検査したり、プログラムを終了できるオプションを提供する。

 

3. ComLottoクラス

 - コンピュータが生成した当せんロット番号を管理し、initializeメソッドでランダムに6つの当選番号を生成し、整列して保存する。また、com_lottoメソッドは、生成された当せん番号を出力する。

 

4. Confirmationクラス

 - ユーザーのロト番号と当選番号を比較して当せん可否を確認します。
 - initializeメソッドでは、ユーザクラスとComLottoクラスのインスタンスを受け取り、これらのインスタンスに保存された情報にアクセスする。
 - check_winningメソッドは、ユーザーの各ロット番号と当選番号を比較し、一致する数字の数に応じて当選順位と賞金を出力する。


5. プログラムを実行
 - プログラムの実行は、User クラスのインスタンスを作成し、user_greetメソッドを呼び出すことで開始する。 これにより、ユーザーはロトを購入し、当選したかどうかを確認することができる。

 


ソースコード

 

https://github.com/designAR/ruby_lotto?tab=readme-ov-file

 

GitHub - designAR/ruby_lotto: Ruby ロト自動生成プロクラム

Ruby ロト自動生成プロクラム. Contribute to designAR/ruby_lotto development by creating an account on GitHub.

github.com

 

 

 

728x90
반응형
LIST