LoginSignup
2
0

More than 3 years have passed since last update.

Rubyでちょっとずつポーカーを実装する その5

Last updated at Posted at 2020-07-22

前回の記事

その1その2その3その4

その5のゴール

その1で@r12tkmtさんから受けたアドバイスを元にリファクタリングする。

カードの情報をクラスを切ってもよいかも

Cardクラスを切って、suitとnumberをinitializeで受け取るようにする

カード一枚一枚を連想配列{suit: suit, num: num}で管理していたのを、以下のようなCardクラスに変更しました。

card.rb
class Card
  SUITS = [:♠︎, :♣︎, :, :♦︎]

  def initialize(suit, num)
    @num = num
    @suit = suit
  end
end

コミット履歴がこちら

suitはSymbolとし、画面表示用に記号を返却するメソッド

suitのSymbolを表す定数の配列と、それを画面表示用に戻すMARKという定数の連想配列を作りました。ついでに、11はJ(ジャック)、12はQ(クイーン)、13はK(キング)と表示されるようにするようにしました。

card.rb
class Card
  SUITS = [:spade, :heart, :diamond, :clover]

  MARK = {
    spade: "♠",
    heart: "♡",
    diamond: "♢",
    clover: "♣",
    1 => "A",
    11 => "J",
    12 => "Q",
    13 => "K"
  }

~省略~

  def show
    corresponding_mark(@suit) + corresponding_mark(@num)
  end

  def corresponding_mark(sym)
    if MARK[sym]
      return MARK[sym]
    else
      return sym.to_s
    end
  end
end

コミット履歴はこちら

playerが役の判定までがっつり持ちすぎでは?

役の判定を別のmoduleなどに切り出す

役の判定をするplayer.judgeメソッドを、JudgeHandというmoduleを作って分けました。手札を引数として渡すと役が文字列で返ってきます。
結局、このmoduleはplayerクラスがincludeするので、playerが役割持ちすぎ問題は解決していないです💦理由はplayerのインスタンス変数のhands配列(手札)の受け渡しが楽なので。どう書いたら良かったのか…

コミット履歴はこちら

symbolで役名を返すようにし勝敗判定を数値の比較する

どう書いていいか思い浮かばなかったので、一旦放置としました💦

その5のコード

次回

その6製作中

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0