連載 :
実践!iOSで作るゲームアプリゲームの実装を行う
2011年4月18日(月)
ゲームのためのデータ構造
第1回で「Rabbit Maze」というゲームの企画/仕様の概略を説明した。今回からはその仕様をどのように実装しているかを解説していく。「Rabbit Maze」にはゲームとして色々な画面があるのだが、本連載ではメインのゲーム部分に絞って解説していく。必要な場合はサンプルコードを交えながら解説していくが、「Rabbit Maze」で実装しているそのままのコードを掲載しているわけではないということを最初にお断りしておく。必要な部分のみをピックアップして解説していきたいと思う。
第1回でも述べたように、元々はボードゲーム(将棋盤と駒の動き)を作るためにボードゲームのためのクラスを作成しており、その「タイル上で駒を移動させる」という処理を元に「Rabbit Maze」を作成している。まずはこのクラスでどのように「ゲーム盤」と「駒」の移動を制御しているかを説明する。クラス名の下の()内がそのスーパークラスだ。矢印はそれそれのオブジェクトの保持関係を表している。
図1:ボードゲームクラス構成(クリックで拡大) |
- (1)GameBoardView(UIView)
- GameBoardViewはタップイベントを受け取り、背景画面を表示するためのUIViewのサブクラスだ。ゲームで表示されるビューは全てGameBoardViewの上にサブビューとして配置される。盤面は複数の「タイル」として存在しその「タイル」を配列として保持して管理している。
- (2)GameBoardTile(NSObject)
- GameBoardTileはタイル1つを管理するNSObjectのサブクラスだ。GameBoardViewが配列で持っているタイルはこのクラスだ。タイルにはそのタイルの状態やタイプ、GameBoardView上での座標位置が記録されている。またタイルにはゲームの「駒」が1つ置かれることが想定されている。
- (3)GameObjectView (UIView)
- GameObjectViewは「駒」を表示するためのUIViewのサブクラスだ。GameBoardTileが管理する「駒」はこのクラスになる。
- (4)GameController
- GameControllerはゲームそのものを管理するためのクラスだ。全てのボードゲームクラスを直接的、間接的に保持し参照することができるようになっている。ゲームのルールなどゲームに関わる全てを制御する。スーパークラスは特になんでもよい(通常はNSObjectにしておく)。
(1)から(3)までのクラスが行うことはあくまでも「ゲーム盤」の上の「駒」を管理して動かすことだけだ、駒を動かすルールはゲームによって異なるのでそれをコントローラークラスが制御する事になる。GameBoardViewやGameObjectViewのデリゲートとなり、デリゲートメソッドを実装することでこれらを行う。
「ゲームの実装を行う」サンプルプログラム
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。