Blackjack fait au début ↓ ↓ J'ai fait un blackjack avec Ruby (j'ai essayé d'utiliser minitest)
Ajout d'une règle selon laquelle vous gagnez si vous gagnez 1 million de yens et perdez si vous avez 0 yens.
** play.rb (classe de lancement de jeu) **
Depuis que j'ai écrit le tour du concessionnaire à deux endroits dans la même phrase, j'ai créé une méthode de tour du concessionnaire pour rendre le code plus facile à lire.
Afin d'augmenter le sentiment d'excitation lors du tirage d'une carte, j'ai créé une méthode d'attente afin que le croupier doit appuyer sur Entrée avant de tirer.
Vous pouvez maintenant miser le montant spécifié.
** card.rb (classe de carte) ** -Ajout de la notation Katakana comme "Spade" et "Heart" pour rendre la marque plus facile à comprendre.
** deck.rb (classe de pont) ** --Depuis la création de la classe de jeu, le lecteur n'est plus réinitialisé à chaque fois, j'ai donc créé une méthode de réinitialisation pour que le deck puisse être réinitialisé.
** player.rb (classe de joueur) **
Similaire à la classe de deck, le joueur n'est plus initialisé à chaque fois, donc la méthode de réinitialisation utilisée pour les tests est désormais utilisée pendant le jeu.
Ajout d'une fonction à la méthode de calcul du score afin que "A" devienne "1" lors de l'éclatement.
Ajout de la fonction pour calculer le montant du pari.
** juge.rb (classe de jugement) **
Ajout d'une fonction de calcul des paris lors de la décision de gagner ou de perdre.
Ajout d'une fonction pour juger si le jeu est clair ou si le jeu est terminé avec votre argent.
** test.rb (test de contrôle de fonctionnement) **
Ajout du test de la fonction de calcul des paris.
** main.rb (C'était le fichier principal qui exécute le Blackjack, mais je l'ai supprimé parce que j'ai créé une classe de jeu) **
play.rb
require './card'
require './deck'
require './judge'
require './money'
require './player'
class Play
def initialize
@player = Player.new
@dealer = Player.new(name: 'Marchand')
play
end
def message(title, choice1="frappé", choice2="supporter") # win or lose or draw or error
case title
when :win
puts 'Vous gagnez'
when :lose
puts 'Tu as perdu'
when :draw
puts 'C'est un tirage au sort'
when :error
puts 'C'est invalide. Tapez à nouveau'
when :choice
puts "Veuillez sélectionner\s\sPush「 1 」→ #{choice1} 、Push「 2 」→ #{choice2}"
end
end
def dealer_turn
#Traitement au stand (au tour du concessionnaire)
puts 'C'est au tour du concessionnaire'
wait
#Manipulation du croupier lorsque le joueur est au blackjack
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
#Le processus que le croupier continue de frapper jusqu'à ce que le joueur gagne
while true
@dealer.draw
@dealer.show
wait
if @dealer.burst?
puts 'éclater!'
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 "Combien voulez-vous parier?"
while true
bet = gets.to_i
if bet < 1
message :error
redo
elsif bet > @player.money.stock.to_i
puts "Votre enjeu est plus élevé que ce que vous avez. Tapez à nouveau."
redo
else
puts <<~TEXT
#{bet}J'ai fait un pari sur le yen.
#{'-' * 41}
TEXT
return bet
end
end
end
def play
while true #Traitement en boucle pour la relecture
#Réinitialisation manuelle
@player.reset
@dealer.reset
#Traitement au premier tour
puts "Bienvenue au Blackjack"
puts "Règle: vous gagnez si vous avez plus d'un million de yens. Vous perdez lorsque vous atteignez 0 yen."
puts "Distribuer des cartes"
@player.draw
@player.draw
@dealer.draw
@dealer.show
@@bet = bet_turn
@player.bet_calc(@@bet)
@player.money.show
#Traitement pour confirmer que le joueur n'est pas un blackjack
if @player.blackjack?
puts "Jack noir!"
@player.show
else
@player.show
message :choice
end
#Hit, traitement de stand (tour du joueur)
while true
#Dans le cas du blackjack, le processus de force
if @player.blackjack?
command = 2
else
command = gets.to_i #Choisissez hit ou stand
end
#Traitement en cas de hit
if command == 1
while true
@player.draw
if @player.burst? #Vérifiez s'il y a une rafale
@player.show
puts "éclater! !!"
message :lose
@player.money.stock = @player.bet_judge(@@bet, :lose)
@player.money.show
break
end
#Confirmation du score total après tirage au sort
@player.show
#Dans le cas de la valeur maximale (21), le support est traité de force.
if @player.total_score == 21
puts 'Le score total a atteint le maximum'
command = 2
break
end
#Si ce n'est pas la valeur maximale, appuyez à nouveau ou procédez
puts "Souhaitez-vous le retirer à nouveau?"
message :choice
while true
command = gets.to_i #Encore une fois, frappez ou tenez la sélection
if command == 1
break
elsif command == 2
break
else
message :error
redo
end
end
#Manipulation de coup ou de stand
if command == 1
redo
elsif command == 2
break
end
end
#Traitement de terminaison forcée au moment de la rafale
if @player.burst?
break
end
elsif command == 2
dealer_turn
command = nil
break
else
# h,Traitement lorsqu'une valeur autre que s est entrée
message :error
redo
end
if command == 2
dealer_turn
break
end
end
#Jugement si le jeu est terminé
if @player.gameover?
puts "Le montant d'argent que j'ai est maintenant de 0 yen."
puts "Le jeu est terminé."
break
elsif @player.win?
puts "Le montant d'argent que j'ai a dépassé 1 million de yens."
puts "Vous gagnez! !! !! !! !! !! Félicitations! !! !! !! !! !! !! !! !! !! !! !!"
break
end
#Traitement de la relecture
puts "Voulez-vous rejouer?"
message :choice, "jouer", "Ne joue pas"
while true
command = gets.to_i #Choisissez de rejouer
if command == 1
command = nil
break
elsif command == 2
break
else
message :error
redo
end
end
#Traitement de la relecture
command == nil ? redo : break
end
end
def gameover
end
def wait(words='appuyez sur Entrée')
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 = ["❤ Coeur\s\s\s\s", "♦ ︎ diamant\s\s\s\s", "♤ Pique\s\s", "♧ Trèfle"]
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
#Méthode de référence de la carte pour les tests
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: "joueur")
@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}Est dans ta main"
puts hands
puts <<~TEXT
#{puts "[total#{@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 #Si vous calculez plusieurs fois, réinitialisez le score total à chaque fois afin qu'il ne soit pas ajouté
self.hands.each do |hand| # @S'il y a un «A» dans le nombre et que le score total est de 22 ou plus, le score total est calculé par le nombre de «A».-9 Créez une méthode pour compter le nombre de «A».
@total_score += hand.convert
end
if self.burst? && self.in_a?
@total_score -= (self.a_count * 9) #À partir du score total par le nombre de "A"-9 Créez une méthode pour compter le nombre de «A».
end
@total_score
end
def bet_calc(bet)
self.money.stock = self.money.stock.to_i - bet
end
#Méthode d'essai
def test
puts "Test --------"
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 = "Jack noir"
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
#La marque sur la carte de test est unifiée avec "♦ ︎"
@@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?
#faux motif
# 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 #Lit
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