Ich habe meinen eigenen mit Ruby erstellten Blackjack für mein Portfolio aktualisiert

Blackjack am Anfang gemacht ↓ ↓ Ich habe mit Ruby einen Blackjack gemacht (ich habe versucht, Minitest zu verwenden)

Inhalt aktualisieren

Regel

play.rb (Spielklasse)

play.rb


require './card'
require './deck'
require './judge'
require './money'
require './player'

class Play
    def initialize
        @player = Player.new
        @dealer = Player.new(name: 'Händler')
        play
    end

    def message(title, choice1="schlagen", choice2="Stand") # win or lose or draw or error
        case title
        when :win
            puts 'Du gewinnst'
        when :lose
            puts 'Du verlierst'
        when :draw
            puts 'Es ist eine Zeichnung'
        when :error
            puts 'Es ist ungültig. Tippen Sie es wieder ein'
        when :choice
            puts "Bitte auswählen\s\sPush「 1 」→ #{choice1} 、Push「 2 」→ #{choice2}" 
        end
    end

    def dealer_turn
        #Bearbeitung am Stand (Händler an der Reihe)
        puts 'Der Händler ist an der Reihe'
        wait
        #Dealer-Handling, wenn der Spieler Blackjack ist
        if @player.blackjack?
            @dealer.draw
            @dealer.show
            if [email protected]?
                message :win
                @player.money.stock = @player.bet_judge(@@bet, :blackjack)
                @player.money.show
                return
            else
                message :draw
                @player.money.stock = @player.bet_judge(@@bet, :draw)
                @player.money.show
                return
            end
        end
        #Der Prozess, den der Dealer so lange durchführt, bis der Spieler gewinnt
        while true
            @dealer.draw
            @dealer.show
            wait
            if @dealer.burst?
                puts 'platzen!'
                message :win
                @player.money.stock = @player.bet_judge(@@bet, :win)
                @player.money.show
                break
            elsif @dealer.total_score == 21 && @player.total_score == 21
                message :draw
                @player.money.stock = @player.bet_judge(@@bet, :draw)
                @player.money.show
                break
            elsif @player.total_score < @dealer.total_score
                message :lose
                @player.money.stock = @player.bet_judge(@@bet, :lose)
                @player.money.show
                break
            end
        end
    end

    def bet_turn
        @player.money.show
        puts "Wie viel möchten Sie wetten?"
        while true
            bet = gets.to_i
            if bet < 1
                message :error
                redo
            elsif bet > @player.money.stock.to_i
                puts "Ihr Einsatz ist höher als Sie. Tippen Sie es wieder ein."
                redo
            else
                puts <<~TEXT
                #{bet}Ich habe eine Yen-Wette gemacht.
                #{'-' * 41}
                TEXT
                return bet
            end
        end
    end

    def play
        while true #Schleifenverarbeitung für die Wiedergabe
            #Hand zurücksetzen
            @player.reset
            @dealer.reset
            #Verarbeitung der ersten Runde
            puts "Willkommen bei Blackjack"
            puts "Regel: Sie gewinnen, wenn Sie mehr als 1 Million Yen haben. Sie verlieren, wenn Sie 0 Yen erreichen."
            puts "Karten verteilen"
            @player.draw
            @player.draw
            @dealer.draw  
            @dealer.show
            @@bet = bet_turn
            @player.bet_calc(@@bet)
            @player.money.show
            #Verarbeitung, um zu bestätigen, dass der Spieler kein Blackjack ist
            if @player.blackjack?
                    puts "schwarzer Jack!"
                    @player.show
            else
                @player.show
                message :choice
            end
            #Treffer, Standverarbeitung (Spieler ist an der Reihe)
            while true
                #Im Falle von Blackjack der Prozess des gewaltsamen Stehens
                if @player.blackjack?
                    command = 2
                else
                    command = gets.to_i #Wählen Sie Treffer oder Stand
                end
                #Bearbeitung bei Treffer
                if command == 1
                    while true
                        @player.draw
                        if @player.burst? #Überprüfen Sie, ob ein Burst vorliegt
                            @player.show
                            puts "platzen! !!"
                            message :lose
                            @player.money.stock = @player.bet_judge(@@bet, :lose)
                            @player.money.show
                            break
                        end
                        #Bestätigung der Gesamtpunktzahl nach der Auslosung
                        @player.show
                        #Beim Maximalwert (21) wird der Stand zwangsweise bearbeitet.
                        if @player.total_score == 21
                            puts 'Die Gesamtpunktzahl hat das Maximum erreicht'
                            command = 2
                            break
                        end
                        #Wenn es nicht der Maximalwert ist, drücken Sie erneut oder verarbeiten Sie
                        puts "Möchten Sie es noch einmal ziehen?"
                        message :choice
                        while true
                            command = gets.to_i #Wieder schlagen oder stehen Auswahl
                            if command == 1
                                break
                            elsif command == 2
                                break
                            else
                                message :error
                                redo
                            end
                        end
                        #Schlag- oder Standhandhabung
                        if command == 1 
                            redo
                        elsif command == 2
                            break
                        end
                    end
                    #Erzwungene Terminierungsverarbeitung zum Zeitpunkt des Bursts
                    if @player.burst?
                        break
                    end
                elsif command == 2
                    dealer_turn
                    command = nil
                    break
                else
                    # h,Verarbeitung, wenn andere als s eingegeben werden
                    message :error
                    redo
                end

                if command == 2
                    dealer_turn
                    break
                end

            end
            #Beurteilung, ob das Spiel vorbei ist
            if @player.gameover?
                puts "Der Geldbetrag, den ich habe, beträgt jetzt 0 Yen."
                puts "Das Spiel ist vorbei."
                break
            elsif @player.win?
                puts "Der Geldbetrag, den ich habe, hat 1 Million Yen überschritten."
                puts "Du gewinnst! !! !! !! !! !! Glückwunsch! !! !! !! !! !! !! !! !! !! !! !!"
                break
            end
            #Wiederholungsverarbeitung
            puts "Möchten Sie noch einmal spielen?"
            message :choice, "abspielen", "Spiel nicht"
            while true
                command = gets.to_i #Wählen Sie die Wiedergabe
                if command == 1
                    command = nil
                    break
                elsif command == 2
                    break
                else
                    message :error
                    redo
                end
            end
            #Wiederholungsverarbeitung

            command == nil ? redo : break
        end
    end

    def gameover

    end

    def wait(words='Drücken Sie Enter')
        puts words
        c = gets
    end
end

Play.new

card.rb (Kartenklasse)

card.rb


class Card 
    attr_reader :mark, :number
    def initialize(mark, number)
        @mark   = mark.freeze
        @number = number.freeze
    end

    def convert
        if @number == 'J' || @number == 'Q' || @number == 'K' || @number == 'A'
            10
        else
            @number.to_i
        end
    end
end

deck.rb (Deckklasse)

deck.rb



class Deck
    attr_accessor :cards
    @@draw_count = 0

    def initialize
        @cards = []
        create
        @cards = @cards.shuffle
    end

    def create
        nums = ['A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K']
        mark = ["❤ Herz\s\s\s\s", "♦ ︎ Diamant\s\s\s\s", "♤ Spaten\s\s", "♧ Klee"]
        mark.each do |m|
            nums.each do |n|
                @cards << Card.new(m, n)
            end
        end
    end

    def draw
        cards[@@draw_count]
    end

    def draw_count
        @@draw_count += 1
    end

    #Kartenreferenzmethode zum Testen
    def show
        52.times do |n|
            puts "[ #{cards[n].mark} #{cards[n].number} ]"
        end
    end

    def reset
        @cards = @cards.shuffle
        @@draw_count = 0
    end
end

player.rb (Spielerklasse)

player.rb



class Player
    include Judge
    attr_accessor :hands, :total_score, :name, :money
    @@deck = Deck.new
    def initialize(name: "Spieler")
        @hands = []
        @total_score = 0
        @name = name
        @money = Money.new
    end

    def draw
        self.hands << @@deck.draw
        self.total_score = self.total_score_calc
        @@deck.draw_count
    end

    
    def show
        hands = []
        self.hands.each do |hand|
            hands << "#{hand.mark} #{hand.number}"
        end
        puts "#{self.name}Ist in deiner Hand"
        puts hands
        puts  <<~TEXT
        #{puts "[gesamt#{@total_score} ]"}
        -----------------------------------------
        TEXT
    end

    def a_count
        a = 0
        self.hands.each do |card|
            if card.number == 'A'
                a += 1
            end
        end
        a
    end
    
    def reset
        self.hands = []
        self.total_score = 0
        @@deck.reset
    end

    def total_score_calc
        @total_score = 0 #Wenn Sie mehrmals rechnen, setzen Sie die Gesamtpunktzahl jedes Mal zurück, damit sie nicht hinzugefügt wird
        self.hands.each do |hand|   # @Wenn die Zahl ein "A" enthält und die Gesamtpunktzahl 22 oder mehr beträgt, wird die Zahl "A" aus der Gesamtpunktzahl berechnet.-9 Erstellen Sie eine Methode, um die Anzahl von "A" zu zählen.
            @total_score += hand.convert
        end
        if self.burst? && self.in_a?
            @total_score -= (self.a_count * 9)                #Aus der Gesamtpunktzahl durch die Zahl "A"-9 Erstellen Sie eine Methode, um die Anzahl von "A" zu zählen.
        end
        @total_score
    end

    def bet_calc(bet)
        self.money.stock  = self.money.stock.to_i - bet 
    end

    #Testmethode

    def test
        puts "Prüfung --------"
    end



    def reset_score
        self.total_score = 0
    end

    def in_blackjack
        self.hands << Card.new("♦︎", "J")
        self.hands << Card.new("♦︎", "A")
    end
end

# player = Player.new
# enemy  = Player.new
# player.draw
# player.draw
# enemy.draw
# enemy.draw
# player.hands
# player.total_score_calc
# enemy.total_score_calc
# p player.blackjack?
# p enemy.blackjack?

Judge.rb (Beurteilungsmodul)

judge.rb


module Judge

    def bet_judge(bet, judge)
        stock = self.money.stock
        case judge
        when :win
            stock += bet * 2
        when :lose
            stock += 0
        when :blackjack
            stock += bet * 3
        when :draw
            stock += bet
        end
    end

    def blackjack?
        if self.hands[1].number == "A" || self.hands[0].number == "A" 
            if  self.hands[0].number == "J" || self.hands[0].number == "Q"|| self.hands[0].number == "K" || \
                self.hands[1].number == "J" || self.hands[1].number == "Q"|| self.hands[1].number == "K"
                self.total_score = "schwarzer Jack"
                true
            else
                false
            end
        else
            false
        end
    end

    def burst?
        self.total_score > 21 ? true : false
    end

    def in_a?
        self.hands.map do |card|
            if card.number == 'A'
                return true
            end
        end
        false
    end

    def gameover?
        self.money.stock <= 0 ? true : false
    end

    def win?
        self.money.stock > 1000000 ? true : false
    end

end

test.rb(minitest)

test.rb


require 'minitest/autorun'
require './card'
require './deck'
require './judge'
require './money'
require './player'
class BlackJackTest < Minitest::Test
    #Die Markierung auf der Testkarte wird mit "♦ ︎" vereinheitlicht.
    @@test_J      = Card.new('♦︎', 'J')
    @@test_Q      = Card.new('♦︎', 'Q')
    @@test_K      = Card.new('♦︎', 'K')
    @@test_A      = Card.new('♦︎', 'A')
    @@test_5      = Card.new('♦︎', 5)
    @@test_10     = Card.new('♦︎', 10)
    @@test_player = Player.new

    def test_blackjack?
        blackjack_player = Player.new
        blackjack_player.hands << @@test_A
        blackjack_player.hands << @@test_J
        assert blackjack_player.blackjack?

        blackjack_player.reset
        blackjack_player.hands << @@test_J
        blackjack_player.hands << @@test_A
        assert blackjack_player.blackjack?

        blackjack_player.reset
        blackjack_player.hands << @@test_Q
        blackjack_player.hands << @@test_A
        assert blackjack_player.blackjack?

        blackjack_player.reset
        blackjack_player.hands << @@test_A
        blackjack_player.hands << @@test_Q
        assert blackjack_player.blackjack?

        blackjack_player.reset
        blackjack_player.hands << @@test_A
        blackjack_player.hands << @@test_K
        assert blackjack_player.blackjack?

        blackjack_player.reset
        blackjack_player.hands << @@test_K
        blackjack_player.hands << @@test_A
        assert blackjack_player.blackjack?

        #falsches Muster
        # blackjack_player.reset
        # blackjack_player.hands << @@test_A
        # blackjack_player.hands << @@test_10
        # assert blackjack_player.blackjack?

        # blackjack_player.reset
        # blackjack_player.hands << @@test_5
        # blackjack_player.hands << @@test_5
        # assert blackjack_player.blackjack?

        # blackjack_player.reset
        # blackjack_player.hands << @@test_J
        # blackjack_player.hands << @@test_Q
        # assert blackjack_player.blackjack?
        

    end

    def test_burst?
        burst_player = Player.new
        burst_player.hands << @@test_J
        burst_player.hands << @@test_J
        burst_player.hands << @@test_5
        burst_player.total_score_calc
        burst_player.total_score
        assert burst_player.burst?
        # false
        # burst_player.reset
        # burst_player.hands << @@test_10
        # burst_player.total_score
        # assert burst_player.burst?
    end

    def test_total_score_calc
        total_score_calc_player = Player.new
        total_score_calc_player.hands << @@test_10
        total_score_calc_player.hands << @@test_5
        total_score_calc_player.total_score_calc
        assert_equal 15, total_score_calc_player.total_score
        total_score_calc_player.reset
        total_score_calc_player.hands << @@test_A
        total_score_calc_player.hands << @@test_10
        total_score_calc_player.hands << @@test_5
        total_score_calc_player.total_score_calc
        assert_equal 16, total_score_calc_player.total_score
        total_score_calc_player.reset
        total_score_calc_player.hands << @@test_A
        total_score_calc_player.hands << @@test_J
        assert_equal 20, total_score_calc_player.total_score_calc
        total_score_calc_player.hands << @@test_5
        assert_equal 16, total_score_calc_player.total_score_calc
        total_score_calc_player.hands << @@test_A
        assert_equal 17, total_score_calc_player.total_score_calc
        # false
        #assert_equal 10, total_score_calc_player.total_score
    end


    def test_convert
        assert_equal 10, @@test_J.convert
        assert_equal 10, @@test_Q.convert
        assert_equal 10, @@test_K.convert
        assert_equal 10, @@test_A.convert
        assert_equal 5, @@test_5.convert
    end

    def test_draw_count
        deck = Deck.new
        assert_equal 1, @@test_player.draw
        assert_equal 2, @@test_player.draw
        assert_equal 3, @@test_player.draw
    end


    def test_a_count
        a_player = Player.new
        a_player.hands << @@test_A
        a_player.hands << @@test_A
        a_player.hands << @@test_A
        assert_equal 3, a_player.a_count
    end

    def test_bet_calc
        #assert_equal 19000, @@test_player.bet_calc(1000)
        
    end

    def test_bet_judge
        p @@test_player.money.stock -= 250 #Bett
        assert_equal 20250, @@test_player.bet_judge(250,  :win)
        assert_equal 19750, @@test_player.bet_judge(250,  :lose)
        assert_equal 20500, @@test_player.bet_judge(250,  :blackjack)
        assert_equal 20000, @@test_player.bet_judge(250,  :draw)
    end

end

Recommended Posts

Ich habe meinen eigenen mit Ruby erstellten Blackjack für mein Portfolio aktualisiert
Ich habe mit Ruby einen Blackjack gemacht (ich habe versucht, Minitest zu verwenden)
Ich habe mit Ruby On Rails ein Portfolio erstellt
Ich habe mein eigenes Instagram-Tool wie Ruby [Ruby] erstellt.
[Paiza] Ich habe mein eigenes Dienstprogramm zum Beantworten von Fragen erstellt. [Java]
Ich habe mit Ruby einen riskanten Würfel gemacht
[Ruby] Ich habe einen Crawler mit Anemone und Nokogiri gemacht.
Ich habe einen Interpreter (Compiler?) Mit ungefähr 80 Zeilen in Ruby erstellt.
Ich habe DI mit Ruby versucht
Ich habe einen Adapter für den Kommunikationsunterricht mit Retrofit2 + Rx2 erstellt
Ich habe mit Gem in Ruby nach einem Webframework gesucht
Ich habe mit Swing eine GUI erstellt
Ich habe mit Thymeleaf meinen eigenen Dialekt erstellt und eingestellt und versucht, ihn zu verwenden
Erste Schritte mit Ruby für Java-Ingenieure
[Ruby] Ich habe einen einfachen Ping-Client erstellt
Ich habe verschiedene Funktionen der Fibonacci-Sequenz (Ruby) erstellt.
Ich habe einen Öko-Server mit Scala gemacht
Ich habe ein Plug-In für IntelliJ IDEA erstellt
Ich habe eine Janken App mit Kotlin gemacht
Ich habe eine Janken App mit Android gemacht