★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








継承
関連
集約、コンポジション集約
依存
基本クラス、抽象クラス
派生クラス、実装クラス
インタフェースと純粋仮想関数
デザインパターン
ダウンロード

Othello企画について - K0me-Lab