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