アスペクト指向勉強会 - 実践編 (第9回)

何度か目は覚めたものの、どうしても起きられず4時間遅れで参加。(^^;;)

ブラックジャックのゲームの要件のまとめが終了。
次回は Theme の抽出を行います。ようやく AOAD らしくなりそう。


ちなみに要件のリストは以下のとおり。(書いちゃって大丈夫かな?)

  • 概要
    • R1: プレイヤーはプレイヤー同士ではなくディーラーとの間で1対1の勝負を行う
    • R2: プレイヤーが何人かいる場合には、ディーラーは複数のプレイヤーと同時に勝負をする
    • R3: プレイヤーは、手持ちのカードのポイントの合計が、ディーラーよりも大きく21以下になるようにすることを目標とする
    • R4: ゲームでは、ジョーカーを除く、52枚のトランプを使用する
    • R5: カードのポイントは、カード2〜10ではその数字通りの値である
    • R6: 絵札であるK (キング)、Q (クイーン)、J (ジャック) は10と数える
    • R7: A (エース) のみは、1あるいは11のどちらかとして数えることができる
  • テーブル
    • R8: システムが用意するテーブルの数は n 個とし、テーブルの数は増減しないものとする
    • R9: ユーザーはテーブルを指定してゲームに参加、もしくは見学することができる
    • R10: 1つのテーブルに参加できるユーザーの数は1〜4人とする
    • R11: ユーザーは参加者が4人未満のテーブルに対し参加を表明し、着席できる
    • R12: プレイヤーはゲームの途中で、退席、退出をすることはできない
    • R13: プレイヤー以外のユーザーはいつでも退席、退出ができる
    • R14: 1つのテーブルを見学できるユーザーの数には制限がない
    • R15: 見学者は、ゲームを観賞するだけで、参加することはできない
  • ログイン
    • R16: ゲームに参加するユーザーはログインをしていなければならない
    • R17: ログインはユーザー名と、パスワードで認証を行う
    • R18: 未登録ユーザーはユーザー名と、パスワードを入力してユーザー登録をおこなう
    • R19: ユーザーはユーザー登録時に所持金として50ポイント与えられる
    • R20: ゲストユーザー (ログインしていないユーザー) はゲームに参加はできないが見学はできる
  • ログアウト
    • R21: 着席者はログアウトをすることはできない
    • R22: 着席者以外のユーザーはいつでもログアウトができる
  • ゲームの開始
    • R23: 最初のユーザーが着席してから5秒後、もしくは前回のゲームが終了してから5秒後に、着席しているユーザーでゲームを開始する
    • R24: 前回のゲーム終了時に着席しているユーザーは、ゲームの開始時にゲームの参加、見学、退出を表明する
    • R25: 前回のゲーム終了時に着席しているユーザーで、参加表明がなかったユーザーはゲーム開始時に自動退席となる
  • ベット
    • R26: ゲームを開始後、最初に各プレイヤーは賭け金 (ベット) を決める
    • R27: プレイヤーはゲーム開始時に強制的に1ポイントのベットを行う
    • R28: プレイヤーは所持金の範囲内で追加のベットを行うことが出来る
    • R29: プレイヤーが追加のベットをできる時間は7秒間とする
  • カード配布
    • R30: プレイヤーのカードは、ディーラーに向かって一番右のプレイヤーから順番に配布する
    • R31: ディーラーはプレイヤー全員にカードを、表向きで2枚ずつ配る
    • R32: ディーラーはプレイヤーごとにカードを、1度に2枚ずつ配る
    • R33: ディーラーのカードはプレイヤーへの配布が終わった後に配布する
    • R34: ディーラーは自分自身にカードを、表向きで1枚、裏向きで1枚 (ホールカード) 配る
  • ナチュラル21
    • R35: 最初のカード配布時点で、カードのポイントの合計が21であることを「ナチュラル21」(又は「ナチュラブラックジャック」) と呼ぶ
    • R36: プレイヤーがナチュラル21で、ディーラーがナチュラル21でなかった場合には、プレイヤーはベットの1.5倍の払い出しを受ける
    • R37: プレイヤーもディーラーもナチュラル21の場合には引き分け (プッシュ) となる
    • R38: プレイヤーがナチュラル21ではなくディーラーがナチュラル21の場合にはプレイヤーの負けとなる
    • R39: プレイヤーは、ディーラーに向かって一番右のプレイヤーから順番にプレイを行う
    • R40: プレイヤーはヒット (hit; カードをもう1枚引く) またはスタンド (stand; カードを引かずにその時点のポイントで勝負する) の選択を行う
  • プレイヤーのプレイ
    • R41: プレイヤーの思考中の持ち時間は7秒とし、持ち時間を越えると自動的にスタンドが選択される
    • R42: プレイヤーは21を超えなければ何回でもヒットすることができる
    • R43: プレイヤーが21を超えてしまうことをバスト (bust) と呼び、直ちにプレイヤーの負けとなる
    • R44: プレイヤーが全員スタンドするとディーラーは自分のホールカードを開く
    • R45: ディーラーは、自分のカードのポイントの合計が17以上になるまでカードを引き続ける
  • ディーラーのプレイ
    • R46: ディーラーが21を超えた場合には21を超えていないプレイヤーは全員勝利する
    • R47: プレイヤーとディーラーが同じポイントの場合にはプッシュとなる
    • R48: ディーラーのポイントは、手持ちのカードのポイントの合計が21を超えなければ、Aは11と考えて計算する
  • 配当のルール
    • R49: プレイヤーが勝った場合は、賭け金と同額の払い出しを受ける
    • R50: 引き分けの場合は、賭け金がプレイヤーに返還される
    • R51: プレイヤーが負けた場合は、賭け金が没収される
  • 機能外要求
    • R52: ユーザインターフェースはGUIとする
    • R53: 特別なアプリケーションのインストールを必要とせず、利用できる
    • R54: 遠隔地からネットワークを介してアプリケーションを利用できる
    • R55: ネットワークに障害があった場合も、ゲームを途中から再開できる
    • R56: ユーザー情報 (ユーザー名、パスワード、所持金) は、データベースに保存される
    • R57: ゲーム開始時にテーブル名、各参加者のユーザー名、所持金をログに取る
    • R58: ゲーム終了時にテーブル名、各参加者のユーザー名、掛け金、ゲーム結果、所持金をログに取る