Add comments#1
Conversation
|
|
||
| class Deck | ||
|
|
||
| attr_reader :main_deck |
There was a problem hiding this comment.
Я бы назвал это свойство просто cards.
| 'A': 11} | ||
|
|
||
| def initialize | ||
| create |
There was a problem hiding this comment.
В данном случае можно было не определять дополнительный метод для создания колоды.
| def get_card(n = 1) | ||
| raise "You should create a main deck before adding card" if @main_deck.empty? | ||
| a = @main_deck.sample(n) | ||
| @main_deck.delete(a) |
There was a problem hiding this comment.
Можно использовать метод pop, который принимает в качестве аргумента количество объектов которые последовательно нужно извлечь с конца массива.
|
|
||
| def create | ||
| @main_deck = [] | ||
| CARDS.each {|title, count| @main_deck << Card.new(title, count)} |
There was a problem hiding this comment.
Можно было использовать массив с номиналом карт, вместо хэша. Вообще, у нас 3 ситуации:
- Если карта от 2-х до 10-ти, сумма считается по её номиналу, то есть фактически это
title.to_i - Если карта является картинкой - это
10очков - Если туз - это случай, требующий отдельной обработки
Исходя из этого, достаточно определить метод в классе Card который будет возвращать правильное количество очков и случай с тузом потом обрабатывать отдельно. Обязанность знать сколько очков приносит отдельная карта вполне подходит для объектов класса Card.
| @@ -0,0 +1,4 @@ | |||
| require_relative 'gamer' | |||
|
|
|||
| class User < Gamer | |||
There was a problem hiding this comment.
На мой взгляд, класс User является более общим поэтому я бы сделал его базовым и потом наследовал от него классами Gamer и Dealer.
| 2) - no" | ||
| loop do | ||
| user_input = gets.chomp.to_i | ||
| case user_input |
There was a problem hiding this comment.
Либо case, либо весь обработчик исключения лучше вынести в отдельный метод.
| ───▐░▀▄▄█▄▄█▄▄█▄▄█▄▄█▄▄▀░▌─── | ||
| ───▐░░░░░░░░░░░░░░░░░░░░░▌─── | ||
| ───▐░░░░░░░░░░░░░░░░░░░░░▌─── | ||
| ────▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀────" |
| user_get_card | ||
| when 3 | ||
| user_open_cards | ||
| puts "your money: #{@player.money}" |
There was a problem hiding this comment.
Похожая логика была внутри метода restart_game, это ещё одно подтверждение что нужен отдельный метод.
| @dealer.print_cards | ||
|
|
||
| if @dealer.points > 21 && @player.points > 21 || @dealer.points == @player.points | ||
| draw |
There was a problem hiding this comment.
Если у обоих очков больше 21-го, значит оба проиграли.
|
|
||
| if @dealer.points > 21 && @player.points > 21 || @dealer.points == @player.points | ||
| draw | ||
| elsif @player.points <= 21 && @dealer.points > 21 || @player.points <= 21 && @dealer.points <= 21 && @player.points > @dealer.points |
There was a problem hiding this comment.
Чтобы игрок выиграл, достаточно чтобы количество его очков было больше чем у дилера и меньше чем 21.
No description provided.