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
Ja, auch diesmal werden wir zunächst die Anforderungen organisieren.
Ist es so
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
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.
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
- 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.
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