①ちいさな範囲で考える

(序)ブラックジャックをオブジェクト指向でとらえる

これまでの勉強会では、車や動物、本や人などのオブジェクト(クラス)について考えました
それでは、ブラックジャックにはどんなオブジェクトが存在するでしょうか

image

例えば…

  • ディーラー

  • プレイヤー

  • トランプ

すべてをオブジェクトの世界で表すなら…

  • ゲームのルール

  • ゲーム盤自体

なんかも、オブジェクトとして扱えそうですね
ただ……

  • どこまでオブジェクトにするの?

  • プレイヤーとディーラーって同じ人間だよね

  • プレイヤーって言っても、僕自身とCPUって違うものだよね?

  • トランプって、山札のこと?カード一枚のこと?

みたいに、ブラックジャック一つをとってもかなり構造は複雑です

ほんとは、ちゃんとこの時点で設計を詰めないと後々危険なんですが(だから上流って難しい…)
今回は練習なので、小さな範囲に絞って作っていきましょう

と、言うことで……

トランプカードだけ、一旦オブジェクトにしてみよう!

ブラックジャックからはいったん離れて、トランプ一枚一枚について考えてみる
それなら、何とかなりそうな気がしませんか

トランプってどんな要素があるでしょうか

image

  • 赤と黒のスート(マーク)が4種類

    • 赤:ハート・ダイヤ

    • 黒:スペード・クローバー

    • 強さは スペード > ハート > ダイヤ > クローバー らしい

  • 全部で54枚

    • スートごとに A, 2~10, J, Q, K のカードがある(1~13)

    • ジョーカーが2枚

  • 一般的なトランプは、実は2種類のサイズがある

    • ポーカーサイズ

      • ポーカーでズルしにくいように、手から絶妙にはみ出すサイズ

    • ブリッジサイズ

      • ポーカーサイズより一回り小さい

  • 材質は…

  • 描かれているイラストは…

トランプだけを見ても、意外と要素は盛りだくさんですが
今回はブラックジャックを見据えて、以下の要素だけにしてみましょう

  • スートはスペード・ハート・ダイヤ・クローバーの4種類

    • 色は気にしない

    • 強さも気にしない

  • スートごとに 1 ~ 13 のカードがあって、全部で52枚

    • AやJQKなどの表記は考えず、すべて数字で扱う

    • ジョーカーは存在しない

課題1 カードのクラス定義とインスタンス化

  • ①以下の条件でクラスを作成する

    • クラス名は「Card」

    • スート(suit)、数値(number)の二種類の属性を持つ

  • ②以下の条件でCardクラスからインスタンスを作成する

    • 「スペードの1」を作る

    • 引数有りコンストラクタを使用する

      • 引数には、すべての属性を渡すこと

  • ③アクセサを使用して、以下のようにコンソール上に表示させる

    • 「スペードの1です」