★C++/オブジェクト指向実践企画★ Othelloゲーム作成
本企画の目的 オブジェクト指向プログラミングの実践により、少しでもC++及びオブジェクト指向技術の向上を目指す 参加者全員が同じ課題に取り組むため、問題点を共有でき、また複数の設計の比較が可能となる
要件:オセロゲームの作成 実際にPC上で動作可能なオセロゲームを作成すること クラス図だけ作って終わりではない!
(非機能的)要件 拡張性 実際作成するゲームは低機能でもかまわないが、将来機能追加する可能性を考慮して設計すること
拡張性の例 出力 入力 盤面は、コマンドライン上に文字で出力すればよい ただし、将来Window上に絵で描画することも可能なようにすること
拡張性の例 プレイヤー プレイヤーは人間 vs AIを基本とする ただし、将来的に人間 vs 人間、AI vs AIも可能なようにすること AI AIは、こまをランダムに置くなど、プレイヤーとしての強さを追求する必要はない ただし、将来的に強力なAIを搭載可能にし、また、対戦するAIを選択可能にするなどの機能を搭載可能とするよう考慮すること
その他の拡張例(Advance) 盤面の広さを変更可能にする 盤面の表示の際、石を置ける場所と置けない場所を表示する機能 「待った」で数手前の状態に戻ってやり直す機能 終了後、今までの手順を再生して復習できる機能 初期設定を設定ファイルや、コマンドラインオプション、GUIから設定できるようにするように考慮する 「石を置ける場所がありません]とうのメッセージも、出力方法に応じて変化するため、出力方法とセットで変更されるように配慮 持ち時間を管理する機能を追加できるように配慮
予想される構造(例) 勝負 ルール判定 盤面 データ AI 抽象 Block AI 弱 コマンドライン 入出力 入出力 抽象 Block GUI 入出力 AI 強 Player 抽象Block Player0 Player1
成果物 実動作する実行プログラム ソースコード クラス図 その他必要な図 レビューでの資料 GUIを抜いた部分は、特定のOS依存にならないようにすることが望ましい ソースコード 要所のみ簡単なレビューを行う クラス図 必須! その他必要な図 レビューでの資料 きっちりとした設計書は必要ない
環境 コンパイラ、IDE等は自由 UML図の作成ツールも自由 なるべくレビューで使う環境(=Windowsノートパソコン)で動作可能であることが望ましい UML図の作成ツールも自由 例:フリーのツール「JUDE」
開発手順 一度にシステムすべてを設計して開発するのではなく、部分ごとに分けて、設計⇒実装⇒動作テストを繰り返すことにする 実現性の無い設計を防ぐ C++に慣れていない場合は、早い段階で慣れておく
開発手順 1.盤面データ、及びその出力部分を作成する 実際に盤面を表示できることをテストしておくこと
開発手順 2.コマの座標入力部の作成 実際に入力結果が表示されるかを確認する
開発手順 3.勝負の判定部分の作成 アルゴリズム的に難しい部分なので、汚い構造にしないように注意する この段階で、人間同士で対戦できる状態になるはずなので、テストしておく
開発手順 4.AI部分の作成 全体に正しく動作するか確認する
その他 成果物の作成は、基本的に仕事の時間外(家)で行う レビューは夜の仕事に支障の無い時間で行う 仕事に支障が出ないように注意 途中で抜けたり、途中から参加することは自由、レビューのみ参加することも自由とする ただし、実際に手を動かさないと、C++とオブジェクト指向の習得は難しい レビューで他の人の構造が良いと思ったら、真似するのは全く問題は無い 相手の許しがあれば、作成途中のソースコードをもらうことも自由.ただし、すべてを理解してから使用する必要がある
基礎知識についての注意 この企画では、C++や基本的なUMLの言葉について知っていることが前提となっている 基本について知らない人でも参加は可能だが、なるべく早い段階で理解できるように努力すること 理解できていないと、後半のほうのレビューについていくことは難しい
基礎知識確認 これらの言葉の意味について、分からない人に説明できる位かどうか各自確認 理解が足りない場合は、人に聞く、本を読む等して理解するよう努力すること クラス(class) メンバ変数 メンバ関数 Staticメンバ変数(クラス変数) Staticメンバ関数(クラス関数) new/delete インスタンス 仮想関数、純粋仮想関数 STL 継承 関連 集約、コンポジション集約 依存 基本クラス、抽象クラス 派生クラス、実装クラス インタフェースと純粋仮想関数 デザインパターン