久々のChimpanzeeGame復活。
 前回使ったレベルメータを組み込むわけですが、ソースをどこに置こうかって話です。
 iPhoneアプリ開発、その(53)でやったみたいにChimpanzeeGameフォルダ内にFlipsideフォルダを作って、テスト用のプロジェクトも用意するというのも一つの手ですが、レベルメータは結構汎用性がありそうなのでChimpanzeeGameの中ではなく外に置くことにするザンス。
 LevelMeter.h/mだけpartsってフォルダに入れ、このLevelMeterをテストするプロジェクトとして前回のhelloCTM-9フォルダをtesters/levelemeterとして分離して配置します。で、ChimpanzeeGame-##はchimpanzeeフォルダという名前にしてます。
 こんな感じ。

テン・シー・シー-fig.1

 当然ソースの位置が変わるのでhelloCTM.xcodeprojも再設定する必要があるんですが、ここらへんの変更方法はiPhoneアプリ開発、その(53)で説明したとおり。

 ソースの配置がすっきり決まったところで、いよいよ本題。
 前回作ったレベルメータを組み込むついでに、レベル、ボタンサイズ、2つのスライダは使い勝手悪そうなので廃止し、レベルメータだけで対応するように変更します。

テン・シー・シー-fig.2

 レベル、ボタンサイズを個別に設定できるのは、ユーザーの自由度が高いといえば聞こえはいいけど、実際遊んでみるとレベル変更一発で勝手にボタンの大きさが調整された方が使い勝手がいいわけですわ。

 このための変更対象は

ChimpanzeeGame.xcodeproj
ChimpanzeeLayouter
ChimpanzeeGameAppDelegate
ChimpanzeeGameViewController
FlipsideViewController.xib
FlipsideViewController
FlipsideView

となります。

ChimpanzeeLayouter

-(void)calcButtonSize:(double)inButtonCountSliderValue

inButtonCountSliderValueで受け取る0.0~1.0の値をボタンサイズ決定ではなく、難易度の決定とし

 0.0~1.0

を出題するボタンの数

 1~25

に変換し返り値として返すことにします。1~9まではボタン数を3x3とし、10を越えた時点でボタンの数が4x4に、17を越えた時点で5x5にすることで、ボタンサイズは自動計算します。

ChimpanzeeGameViewController

- (void)setSize:(double)inSizeRatio

 resetGameLevelと名称変更し引数はなくします。実装部の

[layouter calcButtonSize:inSizeRatio width: ... ];
levelLimit = vCount * hCount;
level = levelLimit * levelRatio;



level = [layouter calcButtonSize:levelRatio ...];
levelLimit = vCount * hCount;

とします。

ChimpanzeeGameAppDelegate

double buttonSizeRatio;

変数と、その関連の実装部を廃止。

FlipsideViewController

IBOutlet UISlider* buttonCountSlider; // ボタンの数用スライダ
IBOutlet UISlider* levelRatioSlider; // レベル比率用スライダ

を廃止。

FlipsideViewController.xib
 上記変数の廃止にあわせ、ダブルクリックでInterfaceBuilderを立ち上げ、ビューから2つのスライダを削除。保存して終了。

FlipsideView
 drawRectや、touchesBegan、touchesMovedでiPhoneアプリ開発、その(71)で作ったLevelMeterインスタンスを使うように変更。drawRectはいったんLevelMeterと脳みそだけ表示するようにしてみますた。

 LevelMeter.h/mをChimpanzeeGame.xcodeprojプロジェクトに登録する要領はiPhoneアプリ開発、その(53)を参照。

 最後、Flipside/Images/base.png Flipside/Images/brain.pngをChimpanzeeGame.xcodeproj側にも登録しておしまい。
 でついでに実機にインストールして使ってみようと、アクティブSDKをDeviceに切り替えてビルドしたらChimpanzeeGameViewControllerやFlipsideViewControllerでの記述

[_view addSubview:bt];
[_view setImage:baseimage brain:brainimage];

なんてのがリンクでひっかかりました。
なんか、それぞれ

[self.view addSubview:bt];
[self.view setImage:baseimage brain:brainimage];

としないと駄目みたい。利用するヘッダーファイルやリンクするフレームワークが切り替わるんで、ちゃんとObjective C 2.0の仕様にそったアクセス方法じゃないと保証されないんですな...

 ここまできたんで、iPhoneアプリ開発、その(45)でも書いたアップルの方針に従ってチンパンジーアプリ設定も「設定(Settings)」アプリケーションから取りはぶくことにします。

テン・シー・シー-fig.7

 とくに難しいことはなくChimpanzeeGame.xcodeprojプロジェクトからSettings.bundleを取りはぶけばいいだけです。Settings.bundleが無くなってもChimpanzeeGameAppDelegate.mで使っているNSUserDefaults standardUserDefaultsはなんら影響受けないっす。

テン・シー・シー-fig.3

 選んでからdeleteキー押せば以下の確認ダイアログが出るので、名残惜しいなら「参照を削除」、さくっと忘れるなら「一緒にゴミ箱に入れる」を選びましょう。

テン・シー・シー-fig.4

 どっちを選んでもターゲット/ChimpanzeeGame/バンドルリソースをコピーの項目からは消えてるはずです。

テン・シー・シー-fig.5

 ビルド>クリーニングメニューを選んで

テン・シー・シー-fig.6

クリーニングしてからビルドして実行すれば「設定(Settings)」アプリケーションにチンパンジーゲームは表示されなくなるっす。

 次回は、レベルごとに成功率を記憶させるために、mySQLLiteを使ってみるざんす~。

------------
サンプルプロジェクト:dev-0.zip