設計力のお話 実戦編1「ポーカーゲームを設計してみよう」
設計力を身につけるナレッジ:実践
本ナレッジはプロを目指す方向けにしっかりと理解して頂きたい内容をまとめたナレッジです。
現役で活躍しているプログラマーであって設計力の不足が問題になることがあります。
しっかりとした設計力とプログラミング力を持ち合わせていればとても強力な武器・アピールポイントとなります。
実戦編では具体的な例をピックアップしてより理解しやすく実戦により近い形で記載していきます。
画像の文字が読みにくい場合は画像のリンクを直接開いてみてください。
自動で縮小されてやや読みにくいところがございますが、ご了承ください。
プランにご契約頂いた方へはご要望に応じて元のドキュメントをお渡しさせて頂きます。
カードゲーム(ポーカーゲームの設計)
本ナレッジではポーカーゲームの設計としまして、4工程に分けてオブジェクト指向で設計が進められるような説明をさせて頂きます。
要件定義について
ポーカーは知らない人はほぼいないのではと感じるほどにメジャーなトランプカードを使用したゲームの一つです。
チップを賭けてのカジノゲームもありますが、今回は基本となるポーカーのルールと2ラウンドに分けて任意の枚数を2回破棄して交換できる仕様として要件定義をしました。
要件定義では、どういった要素があり、どのようにゲームが進んで、だれが参加出来て、勝敗はどのように決まるかといった”仕様”となる部分を明記しています。
本来、要件定義は細かな仕様を含まずもっと大雑把に決めるものではありますが仕様として記載します。
ポーカーをベースにしてカジノゲームを作る場合はこちらの要件定義にチップについての要件が追加されていきます。
処理の流れについて
大まかにゲームが開始されてからどのように処理が始まって、プレイヤーに入力を求めたり、処理を進めたり、同じ処理を繰り返したり、勝敗を決めたりなどの流れを定めています。
いわゆる、フローチャートと呼ばれるものの土台ともいえる資料です。
細かい条件分岐をなくしたシンプルなものなので簡易フローともいえます。
本ナレッジでの紹介では概要がメインなので細かい部分には触れていない点、ご了承ください。
そのためプレイヤーはランダムでも入力応答したプレイヤー順でもなくプレイヤー1から順次処理することを想定したフローになっています。
オンラインであればロビーを作ってフレンドを紹介して、入力応答が早いプレイヤーからカードの選定が出来るといった機能を設けてもよさそうです。
こういった仕様・要件は要件定義で決めておきましょう。
データの流れについて
こちらもデータフロー図よりはシンプルにどういったデータ必要でどのように入出力されていくかを考えられる程度の情報としてまとめています。
カード52枚を生成して、プレイヤー1~4へ配るパターンで書いています。
ポーカーの仕様を全く知らない人でも実装できるというのが各種ドキュメントのゴールではあります。
ですが、どこまでドキュメントに時間・人件費を注ぐかはプロジェクトの方針次第でしょう。
どうするか迷う状況が発生しない、概ね全体の方針が定まっている、明確に答えが導き出せるなら完璧な資料を求められることは少ないでしょう。
オブジェクト設計(オブジェクト指向なクラス設計)
どういったデータを持ち、どういった処理を行うかをグループに分けて記載しました。
今回の私の設計では6つのカテゴリーでまとめたオブジェクト構造としました。
各オブジェクト構造の背景に薄い色がついているものは処理でそれ以外はデータ構造です。
- ゲーム管理はプレイヤー人数やラウンド管理を行いつつ、各オブジェクトとの中継役としています
- カード処理は山札カードからプレイヤーが持つカードのマスター情報を管理しています
- プレイヤー処理はポーカーの手札カードの破棄を行うかどうかを管理処理しています
- 役判定処理はポーカーの役を判定して勝敗を決めるための重要な役割を担います
- 画面管理はカード情報やゲームが管理している情報などをユーザーに見せるための表示処理を行います
- ユーザー入力はゲームがユーザーに求める各種入力情報の受付とゲーム管理へ渡す処理を担います
あとがき
無料ナレッジということで大雑把に紹介させて頂きました。
私の公開プランをご契約頂いた方へはご要望に応じて補足させて頂きます。
その他、参考資料としてマインドマップデータの提供も可能です。
ご興味のある方や設計を学びたいという方はご相談から始めて頂けたらと思います。