Impressions de faire Black Jack-cli avec Ruby

J'ai trouvé cet article sur Qiita, j'ai donc créé BlackJack avec Ruby. Les examens de fin d'études des débutants devraient développer le "Blackjack" | Qiita

blackjack_ruby_gif.gif

J'ai l'impression que je viens de faire un jeu simple, mais c'était très amusant. Après avoir essayé de faire BlackJack, j'avais l'impression que je pouvais faire diverses choses autres que des jeux, alors je pense à jouer tout en changeant un peu plus le code de BlackJack et en réfléchissant à ce que je devrais faire ensuite.

Tout le code est affiché sur Github afin que vous puissiez le vérifier ici BlackJack Ruby | Ryutaro - Github

Règles du Blackjack

Les règles du blackjack ont été créées sur la base des règles décrites dans l'article ici.

--La carte initiale est 52. Assurez-vous qu'il n'y a pas de cartes en double lors du dessin --Deux joueurs et revendeurs. Les joueurs courent, les croupiers courent automatiquement

  • Au début de l'exécution, le joueur et le croupier tirent chacun deux cartes. La carte dessinée s'affiche à l'écran. Cependant, je ne connais pas la deuxième carte du croupier
  • Après cela, le joueur pioche la carte en premier. Rafale si le nombre de joueurs dépasse 21, le jeu se termine à ce point
  • Les joueurs peuvent choisir de piocher la carte suivante à chaque fois qu'ils tirent une carte
  • Une fois que le joueur a fini de dessiner, le croupier continuera à dessiner jusqu'à ce que sa main atteigne 17 ou plus.
  • Un jeu où le joueur et le croupier finissent de dessiner. Le plus proche de 21 victoires --J, Q et K sont traités comme 10 --A est traité uniquement comme "1" pour le moment. Ne pas régler sur "11"
  • Pas de double, pas de scission, pas de reddition, pas d'autres règles spéciales

Où j'étais inquiet

--A propos de la classe à préparer


Classe préparée

J'ai créé les 6 classes suivantes. Le rôle de chaque classe est le suivant.

#Une classe qui prépare les numéros de cartes et les marques telles que les diamants et les cœurs dans un tableau
class Card

#Il hérite de la classe Card, une classe qui crée un deck à partir des cartes préparées et le mélange.
class Deck < Card

#Une classe qui effectue un traitement commun dans la super classe du joueur et du croupier
class PlayerBase

#Il hérite de PlayerBase, qui crée un traitement spécifique au joueur.
class Player < PlayerBase

#Il hérite de PlayerBase, qui crée un processus dédié aux concessionnaires.
class Dealer < PlayerBase

#Une classe qui contient le traitement nécessaire à la progression du jeu et des données telles que les mains et les decks
class BlackJack

Comme il y avait de nombreux processus communs entre les joueurs et les concessionnaires, la création d'une super classe appelée PlayerBase a permis de réutiliser les méthodes, et je pense que c'était facile de procéder.


Doit-il être une méthode instrument ou une méthode de classe?

J'étais inquiet à ce sujet aussi et j'ai recherché plusieurs fois des choses comme "la différence de méthode de classe de méthode d'instance ruby".

En conséquence, j'ai décidé avec un jugement légèrement abstrait que "créer essentiellement avec une méthode d'instance, et si vous sentez que c'est un peu difficile à utiliser avec une méthode d'instance, faisons-en une méthode de classe".


** Méthode de classe ** Exemple

class Card
  class << self
    def numbers
      no = [1, 2, 3, 4, 5, 6, 7 ,8 ,9 ,10, 11, 12, 13]
    end

    def suit
      suit = ["diamant", "cœur", "club", "bêche"]
    end
  end
end

** Méthode d'instance ** Exemple

class PlayerBase

  def create_hand(deck)
    deck.pop(2)
  end
# .
# .
# .

Quelle classe devrait contenir des données telles que la main et le pont

L'emplacement de stockage des données est l'endroit le plus gênant. Au début, j'ai pensé: "Parce que c'est une main de joueur, c'est une classe de joueur, et parce que c'est une main de croupier, c'est une classe de croupier. C'est une classe de PlayerBase parce que c'est un deck commun." Comme il y avait beaucoup de choses gênantes telles que la création de deux decks à ce moment-là, il a été décidé de conserver toutes les données dans la classe BlackJack.


Description détaillée du code

J'écrirai un autre article sur le code détaillé. Cette fois, j'ai noté mes impressions et mes difficultés.


Recommended Posts

Impressions de faire Black Jack-cli avec Ruby
Extraire une partie d'une chaîne en Ruby
Bases de Ruby
[Ruby / Rails] Désactiver Lint de update_all avec Rubocop
J'ai vérifié le nombre de taxis avec Ruby
Créer un environnement de débogage Ruby avec VS Code de Windows 10
Premiers pas avec Ruby
définition de la méthode ruby
Evolve Eve avec Ruby
L'histoire de la création de DTO, semblable à Dao avec Java, SQLite
Notifier quotidiennement Slack des factures AWS avec Lambda pour Ruby
Histoire de créer une application de gestion de tâches avec Swing, Java
Impressions et souvenirs de l'installation d'openssl, curl, ruby, homebrew, rbenv
Installez Ruby 3.0.0 Preview 1 avec une combinaison de Homebrew et de rbenv
Comment gérer différentes versions de rbenv et Ruby
Changer de version Ruby avec rbenv
J'ai essayé DI avec Ruby
Client GraphQL commençant par Ruby
Ruby: envoyer des e-mails avec Starttls
Formater Ruby avec VS Code
Comment vérifier les nombres entiers avec ruby
[Ruby] Liste des commandes de base
[Ruby] problème avec l'instruction if
Étudier à CodeWar (ruby) ⑤ Proc
Utilisez Ruby avec Google Colab
Premiers pas avec les modules Ruby
[ruby] Appel d'une méthode avec un argument
J'ai essayé de résoudre le problème de la "sélection multi-étapes" avec Ruby
Créer un jeu Chinchiro avec une amélioration de Ruby Final après avoir reçu un avis
[Illustration] Recherche de la somme des pièces avec une fonction récursive [Ruby]