Eindrücke von Black Jack-Cli mit Ruby

Ich habe diesen Artikel über Qiita gefunden und BlackJack mit Ruby erstellt. Abschlussprüfungen von Anfängern sollten "Blackjack" | Qiita entwickeln

blackjack_ruby_gif.gif

Mein Eindruck ist, dass ich gerade ein einfaches Spiel gemacht habe, aber es hat viel Spaß gemacht. Nachdem ich versucht hatte, BlackJack zu machen, hatte ich das Gefühl, ich könnte verschiedene andere Dinge als Spiele machen, also denke ich darüber nach, zu spielen, während ich den Code von BlackJack ein wenig mehr ändere und dann darüber nachdenke, was ich als nächstes machen soll.

Der gesamte Code ist auf Github veröffentlicht, sodass Sie ihn hier überprüfen können BlackJack Ruby | Ryutaro - Github

Blackjack Regeln

Die Regeln für Blackjack wurden basierend auf den im Artikel hier beschriebenen Regeln erstellt.

  • Die erste Karte ist 52. Stellen Sie sicher, dass beim Zeichnen keine doppelten Karten vorhanden sind
  • Zwei Spieler und Dealer. Spieler laufen, Händler laufen automatisch
  • Zu Beginn der Ausführung ziehen der Spieler und der Dealer jeweils zwei Karten. Die gezogene Karte wird auf dem Bildschirm angezeigt. Kennen Sie jedoch nicht die zweite Karte des Händlers
  • Danach zieht der Spieler zuerst die Karte. Wenn die Anzahl der Spieler 21 überschreitet, endet das Spiel an diesem Punkt
  • Spieler können jedes Mal, wenn sie eine Karte ziehen, die nächste Karte ziehen
  • Sobald der Spieler das Zeichnen beendet hat, zieht der Dealer weiter, bis seine Hand 17 oder höher ist.
  • Ein Spiel, bei dem der Spieler und der Dealer mit dem Zeichnen fertig sind. Derjenige, der näher an 21 ist, gewinnt
  • J, Q und K werden als 10 behandelt --A wird vorerst nur als "1" behandelt. Nicht auf "11" stellen
  • Keine Verdoppelung, keine Trennung, keine Kapitulation, keine anderen Sonderregeln

Wo ich mir Sorgen machte


#
class Card

#Vorbereitete Klassen Wir haben die folgenden 6 Klassen erstellt. Die Rolle jeder Klasse ist wie folgt. Eine Klasse, die die Kartennummer und Markierungen wie Diamanten und Herzen in einem Array vorbereitet. Sie erbt die Kartenklasse, die aus den vorbereiteten Karten ein Deck erstellt und diese mischt.
class Deck < Card

#Eine Klasse, die eine gemeinsame Verarbeitung in der Superklasse des Spielers und des Dealers durchführt
class PlayerBase

#Es erbt PlayerBase, wodurch eine spielerspezifische Verarbeitung erstellt wird.
class Player < PlayerBase

#Es erbt PlayerBase, wodurch ein Prozess für Händler erstellt wird.
class Dealer < PlayerBase

#Eine Klasse, die die für den Fortschritt des Spiels erforderliche Verarbeitung und Daten wie Hände und Decks enthält
class BlackJack

Da es viele Prozesse gab, die Spielern und Dealern gemeinsam waren, ermöglichte die Erstellung einer Superklasse namens "PlayerBase" die Wiederverwendung der Methoden, und ich denke, dass es einfach war, fortzufahren.


Sollte es eine Instrumentenmethode oder eine Klassenmethode sein?

Ich war auch darüber besorgt und googelte viele Male Dinge wie "Ruby Instance Method Class Class Method Difference".

Infolgedessen habe ich mit einem leicht abstrakten Urteil entschieden, dass "im Grunde genommen mit einer Instanzmethode erstellt wird, und wenn Sie der Meinung sind, dass die Verwendung mit einer Instanzmethode etwas schwierig ist, machen wir sie zu einer Klassenmethode".


** Klassenmethode ** Beispiel

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", "Herz", "Verein", "Spaten"]
    end
  end
end

** Instanzmethode ** Beispiel

class PlayerBase

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

Welche Klasse sollte Daten wie Hand und Deck enthalten?

Der Datenspeicherort ist der problematischste Ort. Zuerst dachte ich: "Weil es die Hand eines Spielers ist, lassen Sie es uns in der Player-Klasse verwalten, und weil es die Hand eines Dealers ist, lassen Sie es uns in der Dealer-Klasse verwalten. Es ist ein gemeinsames Deck, also eine PlayerBase-Klasse." Da zu diesem Zeitpunkt viele problematische Dinge wie das Erstellen von zwei Decks auftraten, wurde beschlossen, alle Daten in der BlackJack-Klasse beizubehalten.


Detaillierte Codebeschreibung

Ich werde einen weiteren Artikel über den detaillierten Code schreiben. Diesmal schrieb ich meine Eindrücke und Nöte auf.


Recommended Posts

Eindrücke von Black Jack-Cli mit Ruby
Extrahieren Sie einen Teil einer Zeichenfolge in Ruby
Grundlagen von Ruby
[Ruby / Rails] Inaktiviere Lint von update_all mit Rubocop
Ich habe die Anzahl der Taxis mit Ruby überprüft
Erstellen Sie eine Ruby-Debug-Umgebung mit VS Code von Windows 10
Erste Schritte mit Ruby
Definition der Rubinmethode
Evolve Eve mit Ruby
Die Geschichte von dto, dao-like mit Java, SQLite
Benachrichtigen Sie Slack of AWS-Rechnungen täglich mit Lambda für Ruby
Die Geschichte der Erstellung einer Task-Management-Anwendung mit Swing, Java
Impressionen und Erinnerungen an die Installation von OpenSL, Curl, Ruby, Homebrew und Rbenv
Installieren Sie Ruby 3.0.0 Preview 1 mit einer Kombination aus Homebrew und rbenv
Umgang mit verschiedenen Versionen von rbenv und Ruby
Wechseln Sie die Ruby-Version mit rbenv
Ich habe DI mit Ruby versucht
GraphQL Client beginnend mit Ruby
Ruby: Mail mit Starttls senden
Formatieren Sie Ruby mit VS-Code
Wie man ganze Zahlen mit Rubin überprüft
[Ruby] Grundlegende Befehlsliste
[Ruby] Problem mit der if-Anweisung
Studieren bei CodeWar (Rubin) ⑤ proc
Verwenden Sie Ruby mit Google Colab
Erste Schritte mit Ruby-Modulen
[ruby] Eine Methode mit einem Argument aufrufen
Ich habe versucht, das Problem der "mehrstufigen Auswahl" mit Ruby zu lösen
Erstellen eines Chinchiro-Spiels mit Ruby Final-Verbesserung nach Erhalt einer Bewertung
[Illustration] Finden der Summe von Münzen mit einer rekursiven Funktion [Ruby]