Faisons dessiner au poker avec ruby-Preparation- ↓ Faisons dessiner du poker avec la préparation de ruby-test-unit- ↓ Faisons tirer le poker avec ruby-Implementation 1 (carte) - ↓ Faisons tirer le poker avec ruby-Implementation 2 (rôle) - ↓ Faisons tirer le poker avec ruby-Implementation 3 (joueur) - Suivi par.
Source: https://github.com/rytkmt/ruby_poker
Oui, cette fois aussi, nous commencerons par organiser les exigences.
C'est comme ça?
J'ai remarqué ici, mais dans l'implémentation précédente du joueur, il était implémenté en supprimant simplement de la carte de la main en échangeant la main. Modifiez pour récupérer les cartes à défausser ...
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
Au début, je l'ai implémenté en utilisant + =
dans each_with_object, mais si vous y réfléchissez bien, il s'agit d'une affectation de variable de ce qui a été combiné avec +
avec =
, donc un autre objet combiné avec la même variable Cela n'a pas fonctionné parce que je l'ai simplement stocké et que je n'ai fait aucun changement destructeur.
Utilisez concat
pour changer de carte de manière destructive.
C'est facile car tout ce que vous avez à faire est de collecter et de conserver les cartes inutiles renvoyées par le «# change» du joueur.
ruby_poker/deck.rb
def trush(cards:)
@trushed += cards
end
--Tirez n'importe quel nombre du jeu
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
J'ai l'impression que le nombre de joueurs n'est pas réglé correctement car ce n'est pas suffisant, j'ai donc essayé de lancer une erreur en supposant que cela ne se produira pas.
Le pont était également simple. Est-ce la prochaine fois que vous implémentez la progression du jeu? Je pense.
Il est presque terminé. Je veux le terminer en 4 jours fériés consécutifs et je le ferai jusqu'au bout.
Recommended Posts