Lassen Sie uns mit Ruby Draw Poker machen ~ Implementierung 4 (Deck) ~

Überblick

Machen wir Draw Poker mit Ruby-Preparation-Machen wir Draw Poker mit Ruby-Test-Unit-Vorbereitung-Machen wir Draw Poker mit Ruby-Implementierung 1 (Karte) -Machen wir Draw Poker mit Ruby-Implementierung 2 (Rolle) -Machen wir Draw Poker mit Ruby-Implementierung 3 (Spieler) - Gefolgt von.

Quelle: https://github.com/rytkmt/ruby_poker

Implementierung von Deck

Ja, auch diesmal werden wir zunächst die Anforderungen organisieren.

Ist es so

Spielerhandaustausch behoben

Ich habe es hier bemerkt, aber in der vorherigen Implementierung des Players wurde es implementiert, indem einfach durch Austauschen der Hand von der Karte in der Hand gelöscht wurde. Ändern Sie, um die zu verwerfenden Karten zu sammeln ...

ruby_poker/player.rb


    def change(indexes:, new_cards:)
       raise(ArgumentError) unless indexes.size == new_cards.size
       raise(ArgumentError) unless indexes.all? { |i| (0..4).include?(i) }
-      indexes.sort.reverse_each { |i| @cards.delete_at(i) }
+      trushed = indexes.sort.reverse.each_with_object([]) { |i, trushed| trushed << @cards.delete_at(i) }
       @cards += new_cards
       @hand = Hand.new(cards: @cards)
+      trushed
     end

Ein Deck erstellen

ruby_poker/deck.rb


module RubyPoker
  class Deck
    def initialize
      @cards = init_cards
      @trushed = []
    end
  private

    def init_cards
      RubyPoker::SUITS.each_with_object([]) do |suit, cards|
        cards.concat(
          RubyPoker::NUMBERS.map { |number| Card.new(suit: suit, number: number) }
        )
      end.shuffle
    end
  end
end

Zuerst habe ich es mit + = in jedem_mit_Objekt implementiert, aber wenn Sie sorgfältig darüber nachdenken, ist dies eine Variablenzuweisung dessen, was mit + mit = kombiniert wurde, also ein anderes Objekt, das mit derselben Variablen kombiniert wurde Es hat nicht funktioniert, weil ich es nur gespeichert und keine destruktiven Änderungen vorgenommen habe.

Verwenden Sie "concat", um Karten destruktiv zu wechseln.

Kartensammlung per Handaustausch

Es ist einfach, weil Sie nur die unnötigen Karten sammeln und aufbewahren müssen, die vom "# change" des Spielers zurückgegeben wurden.

ruby_poker/deck.rb


    def trush(cards:)
      @trushed += cards
    end

Karten ziehen

  • Ziehe eine beliebige Zahl aus dem Deck

ruby/ruby_poker/deck.rb


    def draw(count:)
      merge_trushed if @cards.size < count
      raise(ArgumentError, "No cards.") if @cards.size < count
      @cards.shift(count)
    end

  private

    def merge_trushed
      @cards += @trushed
      @cards.shuffle!
      @trushed = []
    end

Ich habe das Gefühl, dass die Anzahl der Spieler nicht richtig eingestellt ist, weil es nicht ausreicht. Deshalb habe ich versucht, einen Fehler unter der Annahme zu werfen, dass dies nicht passieren wird.

Am Ende

Das Deck war auch einfach. Ist dies das nächste Mal, um den Spielfortschritt umzusetzen? Ich denke.

Es steht kurz vor dem Abschluss. Ich möchte es in 4 aufeinander folgenden Feiertagen beenden und ich werde es bis zum Ende tun.

Recommended Posts

Lassen Sie uns mit Ruby Draw Poker machen ~ Implementierung 4 (Deck) ~
Lassen Sie uns mit Ruby Draw Poker machen ~ Implementierung 1 (Karte) ~
Lassen Sie uns mit Ruby Draw Poker machen ~ Implementierung 3 (Spieler) ~
Lassen Sie uns mit Ruby Draw Poker machen ~ Implementierung 2 (Rolle) ~
Lassen Sie uns mit Ruby ~ Vorbereitung ~ Poker ziehen
Lassen Sie uns mit Ruby ~ Test-Unit-Vorbereitung ~ Draw Poker machen
Machen wir eine Weihnachtskarte mit Verarbeitung!
Lassen Sie uns mit Rails einen Fehlerbildschirm erstellen
Lassen Sie uns eine Suchfunktion mit Rails (Ransack) machen
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 2
[Java-Grundlagen] Lassen Sie uns ein Dreieck mit einer for-Anweisung erstellen
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 1
Lassen Sie uns mit Ruby ~ Vorbereitung ~ Poker ziehen
Lassen Sie uns Rails-like machen (View)
Lass uns mit Java kratzen! !!
Lassen Sie uns schreiben, wie API mit SpringBoot + Docker von 0 erstellt wird
Erstellen wir eine einfache API mit EC2 + RDS + Spring Boot ①