Blackjack am Anfang gemacht ↓ ↓ Ich habe mit Ruby einen Blackjack gemacht (ich habe versucht, Minitest zu verwenden)
Es wurde eine Regel hinzugefügt, nach der Sie gewinnen, wenn Sie 1 Million Yen verdienen, und verlieren, wenn Sie 0 Yen haben.
** play.rb (Spielstartklasse) **
Da ich die Dealer Turn an zwei Stellen im selben Satz geschrieben habe, habe ich eine Dealer Turn-Methode entwickelt, um das Lesen des Codes zu erleichtern.
Um das Gefühl der Aufregung beim Ziehen einer Karte zu erhöhen, habe ich eine Wartemethode erstellt, bei der der Dealer vor dem Ziehen die Eingabetaste drücken muss.
Sie können jetzt den angegebenen Betrag setzen.
** card.rb (Kartenklasse) **
Katakana-Notation wie "Spade" und "Heart" hinzugefügt, um das Verständnis der Marke zu erleichtern.
** deck.rb (Deckklasse) **
Seit die Spielklasse erstellt wurde, wird der Player nicht mehr jedes Mal zurückgesetzt, sodass eine Rücksetzmethode erstellt wurde, mit der das Deck zurückgesetzt werden kann.
** player.rb (Spielerklasse) **
Ähnlich wie bei der Deck-Klasse wird der Spieler nicht mehr jedes Mal initialisiert, sodass die zum Testen verwendete Reset-Methode jetzt während des Spiels verwendet wird.
Der Score-Berechnungsmethode wurde eine Funktion hinzugefügt, sodass "A" beim Bersten zu "1" wird.
Die Funktion zur Berechnung des Einsatzbetrags wurde hinzugefügt.
** Judge.rb (Urteilsklasse) **
Es wurde eine Wettberechnungsfunktion hinzugefügt, wenn über Gewinnen oder Verlieren entschieden wird.
Es wurde eine Funktion hinzugefügt, mit der beurteilt werden kann, ob das Spiel klar ist oder ob das Spiel mit Ihrem Geld beendet ist.
** test.rb (Funktionsprüfungstest) **
Test der Wettberechnungsfunktion hinzugefügt.
** main.rb (Es war die Hauptdatei, in der Blackjack ausgeführt wird, aber ich habe sie gelöscht, weil ich eine Spielklasse erstellt habe) **
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
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
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
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
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