そのまま使える iPhoneゲームプログラム

そのまま使える iPhoneゲームプログラム

たとえば、数学や算数の勉強をする時。
まず大事なのは過去の入試問題の分析だとはよくいわれる。
そういうわけで、受験数学や受験算数に関連する産業は
こぞって、長年の入試問題の分析をする。
そして、いろいろな問題を長年分析して、
こんな問題がでるだの、あんな問題がでるだのという
統計をとっているうちに、同じようなパターン問題をぐるぐると
使い回しているだけだったということに気がつく。
私が、「この人はまじめに、算数の先生をやってきたのだろうきっと」
という人は、この統計をとるという作業と、みずから問題を解いていくという
作業を、気が遠くなるほどの時間をかけてやって、どうやら
受験算数を突破しようとすると、
だいたい、小さな問題の単位にブレークダウンして、
600問の算数のパターンをインプットすると、
ほとんどの、入試問題の算数は、その600の問題のパターンの
組み合わせによって、成立しているのではないかという結論に
いたっていた。
もちろん、それだけやっているのではだめなわけですが。
なんで、こんな話になるかというと、
どうも、この本の筆者も、ゲームプログラミングを学ぶ1つの
方法論として、にたようなことを意識したっぽい形跡が
みられるから。
世の中、いろいろなゲームが出回っているけど、
そのゲームに使われているプログラミング技法というものを
分析していると、共通して使われるコードのパターンのような
ものがあるということが見えてくるらしい。
だから、「受験算数600問」に相当する
「ゲームプログラミング基本パターン」のようなものを抽出して、
まず、本書の学習者には、この「パターン」の実習をやらせて、
最後に、その「パターン」の組み合わせになる
「ひな形のゲーム」のコードを体験させてみようと。
そういう流れを本書の中に作っている。
それが果たして、成功しているのかどうかは、この本のプログラグの
ビルドと実行をやってみた人によって、結論は違ってくるのだろうと
思う。
僕は、正直、すこし?です。
この方法論を使用するとき、実は、落とし穴がある。
筆者はおそらく、
iphone でゲームを開発するときの心得」
プログラミング言語で、ゲームコードを作成するときの心得」
を微妙に区別しているような気がする。
これは、ゲーム開発関連の本ではどうやら共通パターンになっているよう
だけど。
プログラミング言語の文法の理解や、グラフィックをするための
プログラミングの理解は、ゲーム開発に取り組む人たちが
事前にある程度、わかっているだろうということを想定しているように
思える。
僕の記憶では、この本では「テクスチャ」という言葉は
あまり説明なく、登場したように思う。
グラフィックの考え方を説明するのに、図はほとんど使用されていなかった。
こういった問題についても、以前、紹介した「iphoneSDK の教科書」は
よく考えられていたように思う。
C C++ の心得のある人は、ある程度、いるだろうという前提のもと、
ではそういう言語と、OBJECTIVE C 言語の文法がどういう違いが
あるのかということに踏み込んだ説明を事前に書いた上で
アプリケーションのプログラミングの章立てに入っていた。
だから、このゲーム開発本も、「教科書」で予習してから、とりかかると
学習効果があがるのかもしれない。

1本目のゲームはノベルゲームのひな形。
こいつも、苦戦した。
ビルドして、画面も出てきて、メッセージが出てくるところも
色の変化とかしているのに、なぜか、画面をタッチしても、
ストーリーが進まない。
どうしようもなくなって、メインになるコードをコピーして
なんとか動く。
どこが、おかしかったのだろうか。
自分で、実装した気分にはなれない。
まあ、動いただけいいけど。
このノベルゲームという形式には、少なからぬ興味をもった。
あまり開発する側としての技術力がなくても、
「アイデア」「ストーリー」で「泣かせる」ものをもっていたら
広くうけいれてくれないかなとか、思ったり。
無理ですかね。
なんか、テレビをみたらAKB48 というグループが大人気みたいですし。
人気投票トップの人に、こういう形で恋愛ゲームに「出演」していただきたい
みたいな。
http://www.sanspo.com/geino/news/100609/gnj1006092102016-n1.htm
そんな話もないわけではないような。きっと権利関係でもめるのでしょうけど。
背景と、キャラの画像を組み合わせたら、ストーリーの展開は
いくらでも広がるのですね。
これも、このひな形のゲームを使って、じゃあ、効果音はどうするのかとか、
ビデオの挿入をどうするのかとか。
応用的なチュートリアルをもっと充実させてほしかったように
思う。
平山さんの本は、こういったひな形にいろいろな要素を盛り込んでいくのが
とてもうまかったように思います。
教科書をかくというのは、その方面の人にとっては、なにが
ポイントでなにがそうでないのかといったことを考えるうえで
有用な体験になるのだろうなとか。
そんなことを思いました。
それにしても、デバグの時間がえらいことになっていた。これを
職業的にやる人の、神経の強さはすごい。
耐えられない人はきっと耐えられないと思う。
自分は、「ごっこ」の状態だったから、まだしもなんとかなったけど。
最後まで、責任をもって、ソフトウェアを客に配るところまで
もっていくのは、とても大変なのだろうなと。
想像しながら、ぱちぱちやってみました。

それでもって、どうにかこうにか、シューティングゲームのひな形に
突入する。

ようやく、携帯電話で遊べるゲームのひな形をインストールする
ところまでいけた。
それだけでもよしとしたい。
すこしは自分をほめたい。
注意不覚コードを書いたつもりだけど、「写経」を正確に実行するのも
やはり骨がおれることを、思い知らされる。
51errors が登場したときは、すこし萎えそうになったけど、
デバッガの表示を手がかりに、少しずつ手直しを加えていったら、
なんとか3error にまで減らせた。
そのあと、にっちもさっちもいかなくなったので、
サンプルのコピーをしたが、
なんとエラーが6個に増えた。
より正確なはずなのにと、焦り倒す。
ああでもない、こうでもないと思い。
無情に、表示されるエラーの問題理由説明のところを眺め、
そこで出てくる文言でグーグル検索にかけたところ、
iphone でコード開発をしているらしい人のブログに
ひっかかる。
どうやら、フレームワークというところの設定をかえたら、うまく
いったと書いてある。
そのブログではcocoa framework をかえろということだったが、
みてみたところ、そんなものはなかった。
本書の別のところでOpenGLES を使うときは、
CoreGraphicsFramework を使えと書いてあったら、この場合にも
当てはまるのかと思い、ために、追加してみたら、
なんと、動く。
やはり、理由がよくわからないデバグとなった。
というか、これデバグというのだろうか。
そんな理不尽なゴールが多い。
この話は、シューティングゲームを、実装して、動かすときの
話。
まあ、筆者に注文をつけたいとすれば、
この本で、
アイコン、表示メッセージのローカライズをどうするかといった
ことも説明されている。
音声ファイルを組み込んで、アプリに効果音を加えるにはどうすれば
いいのかとか、そんなことも書いてある。ところが
「iphoneSDK の教科書」と違い、
アイコンの画像ファイルも用意されていないし、
効果音を組み込んだアプリの準備もしていないので、
このシューティングゲームは、音無、1回死んでも、ゲームは
続いている、点数などなど、
あまりにもひな形なゲームになっています。
どうせなら、このゲームを作り込んでいくという形式で
ローカライズや、効果音の入れ方などを、演習できるようにしてほしかった。
そう、この本には、本書で動かすひな形をもとにして、
「続編」が作成できるような気がしてならない。
むしろ、そっちのほうが、学習効果の高いものが
作れるような気がする。

こういった点では、以前、紹介した「教科書」のほうはとても
よくできていると思う。
UFO をタッチすると、その機体が爆発する効果音ファイルなども
用意されていて、とても助かる。
しかも、この効果音ファイル、筆者の奥さんが作成したらしい。
その道の人の、専門性のよさが、ちゃんと生きていた。
それだけではない。
各プロジェクトに使用される画像ファイルのグラフィックを担当した
人の、グラフィックをする上での、感想というか、説明というか、
そんなものまでのっていたので、
アプリケーションのグラフィックを、きちんと作成したい人の
ための指針にもなっていた。そういえば、iphone 開発関連で、
デザインのことを、あつかった書籍というのはあまりないのかも
しれない。
あまりいろいろ確認していないから、断言はできないけど。
この「ゲームプログラム」の本を通じて、「教科書」の執筆が
とてもよくできているなと思った。
この本は、筆者一人によって、書かれている。これが、執筆の
普通のあり方だろうけど、「教科書」のほうは
効果音の作成、グラフィック、だけでもわかるように、
筆者の開発ネットワーク、頻繁に開かれたらしい勉強会の成果が
つまっているので、
チームワークの良さが全面的に出ている。
本の内容の統一性が犠牲にされているわけではない。
一人が書いたら、発生していたであろう、手落ちというか、そういう
ものが見事にないことがよくわかる。
今回のゲーム関連本を演習していて、それを痛感する。
開発のステップが、きちんと、明示されていなかったので
本の前後をいったりきたりするはめになって、時間のロスを
感じることが多かった。
ただ、ゲームプログラミング関連の本が少ないからしょうがないけど。
平山さんの「覚えておきたい技術」で登場するサンプルコードも
ひょっとしたら、xcode で、ビルドできるのかもしれない。
この本が、そのまま
iphoneゲームプログラマになる前に」
という形の「改訂」を受けたら、もっと販売部数はのびるのでは
ないかと思った。
そのほうが、より「流通」を意識した「学習」ができるのでは
ないだろうか。
ハードルは高いけど。

そのまま使える iPhoneゲームプログラム


01 UIImageViewで2D画像を扱う
01-01 UIImageViewを使って画像を表示する
01-02 UIImageViewを利用して画像を動かす
01-03 UIImageViewを利用して画像を回転させる
01-04 UIImageViewを利用して画像を拡大縮小させる
02 自作のImageViewを作成する
02-01 自作のImageViewで画像を表示してみる
02-02 アフィン変換を自作のImageViewに適用する
02-03 UIImageクラスのさまざまなメソッド
03 画面にテキストを表示する
03-01 UILabelを使ってテキストを表示する
03-02 UILabelをプログラム側から変更する
03-03 プログラム上でUILabelの生成・セットを行う
04 OpenGL ES Applicationテンプレートを利用する
04-01 OpenGL ESのプロジェクトを作成する
04-02 ポリゴン描画用の関数を作成する
04-03 ポリゴンの回転・拡大縮小に対応する
05 OpenGL ESで2D画像を表示する
05-01 2D画像ファイルをテクスチャとして読み込む
05-02 テクスチャを描画する
05-03 より簡単な方法で2Dテクスチャを描画する
05-04 アルファブレンディングを利用する
06 OpenGL ESの高速な描画を検討する
06-01 プリミティブをまとめて描画する
06-02 頂点バッファオブジェクトを利用する
06-03 圧縮テクスチャを利用する
07 ボタンを利用してタッチイベントを検出する
07-01 タッチを検出するボタンを配置する
07-02 ボタンをドラッグ&ドロップする
08 自作のViewを利用してタッチイベントを検出する
08-01 自作のImageViewにタッチイベントをセットする
08-02 画面全体にタッチイベントをセットする
08-03 マルチタッチを検出する
09 OpenGL ESアプリケーションでタッチイベントを検出する
09-01 タッチを検出するボタンを配置する
09-02 画面全体にタッチイベントをセットする
10 加速度センサーを利用する
10-01 加速度センサーから値を取得する
10-02 端末のシェイクを検出する
11 AVAudioPlayerを利用してBGMを再生する
11-01 BGMを再生する
12 System Sound Serviceを利用して効果音を再生する
12-01 効果音を再生する
12-02 バイブレーションを行う
13 アプリケーションの設定を保存する
13-01 ユーザーデフォルトを利用したデータの保存読み込み
13-02 ユーザーデフォルトの初期値をセットする
13-03 強制終了時にデータを保存する
14 アプリケーションを多言語対応する
14-01 Xibファイルをローカライズする
14-02 画像ファイルをローカライズする
14-03 プログラム内の文字列をローカライズする
14-04 アプリケーションをローカライズする
15 アラートウインドウを表示する
15-01 アラートウインドウを作成する
15-02 ボタンがタッチされた際に行われる処理を実装する
16 画面の向きを変更し、ステータスバーを非表示にする
16-01 画面の向きを変更する
16-02 ビューのサイズを横向きに合わせる
16-03 ステータスバーを非表示にする
16-04 OpenGL ESで画面を横向きに変更する
16-05 自動的に画面の向きが変更されないよう指定する
17 アプリケーションのアイコンと起動時のスプラッシュ画面を設定する
17-01 アプリケーションのアイコンを設定する
17-02 言語ごとに異なるアイコンを設定する
17-03 アプリケーション起動時のスプラッシュ画面を設定する
17-04 言語ごとに異なるスプラッシュ画像を設定する
18 コンパイルオプションを最適化する
18-01 コンパイラの最適化レベルを指定する
18-02 浮動小数点演算に最適化されたコンパイラ設定へと変更する
19 実践
19-01 実践1★恋愛シミュレーションゲームを作る
19-02 実践2★シューティングゲームを作る