PalmLander 編 3月某日:ゲームを作りたい! Simple Tester は初めて作ったアプリということもあって、完成した ときはとても嬉しかったが、単体では動かない=他の人に使って もらえない、という悲しさがあった。やはり、せっかく作るんだから、 Palm/Pilot な人達みんなに使ってもらえるようなアプリを作りたい。 普通はそこで、発展途上にあるPalm/Pilotのために有用なツールの 一つも作ってやろうって考えるだろうけど、何を作っていいか思い つかなかったのと、他の人のように細かいアップデートなんて絶対 やらないので(爆)、そんな責任あるものは作れない。というわけで、 とりあえずゲームを作ることにした。 何のゲームにするかだけど、まだ作られてないもので、比較的簡単 そうなものというのは最低条件である。昔ベーシックマガジンで打ち 込んだくらいのレベルのものが理想かな。suuと話をしたら、月着陸 ゲームがやりたいという。どうも探してみたけどそれっぽいゲームは まだ無いようなので、それに決定! #後でわかったことではあるが、実は存在していた(^^;。 #ただし、PocketC 上で動くものだけど。 3月某日:さて、どこから手を付ける? さて、作るものが決まったのだが、1から作るのは能が無い。 やはり、基本はパクル!(笑)。 ということで、早速サンプルソースを探すことに。 今回のゲームを考えると、 1 物理ボタンによる操作。 2 アニメーション。 あたりが前作とは違う要素かな。 DOS/V Power Report に連載している、"神様"こと山田さんのアプリ 開発に関する記事”実践モバイルプログラミング Pilotを極める” 98年1月号と2月号に、ちょうどその辺りのことが書いてあった。 サンプルソースが付属のCD-ROMにあるのだが、このときは全く 気づかず、のちのち pilot-tech-ml で大恥をかくことになる(^^;。 でも、神様はそんなおいらにも丁寧に解説してくださいました。 で、サンプルはどうしたかというと、似ても似つかない PilotMine (マインスイーパ)のソースを使うことに。なんで、これかというと、 Offscreen Windowを使っていた(アニメーションに必要)のと、 物理ボタンの処理があった、からである。 ソースは Simple Tester 編に書いたどこかから探した。 月着陸ゲームは確かUNIXで遊んだ気がしたので、アルゴリズムや 重力計算などのルーチンをパクルため、フリーのものを探してみる。 なぜかUNIX版のは見つからなくて、DOS版のものしか見つからない。 ところがなんと PASCAL(^^;。でも、なんとか解読することができた。 3月某日:ソース作成、make、そして挫折。。。 まず、ただ着陸船が落ちて来るというプログラムを作ることにする (つまりアニメーションのテスト)。インタフェースもへったくれもなし。 リソース作って、適当にID割り振って、、、これが面倒なんだよなあ。 背景と、着陸船の絵を書いて、、、こういうの苦手。かなり適当。 プログラムはSimple Tester の物を使って、Offscreen Window の あたりを付け加え、適当に直す。 make をして、prcファイルができるまでデバッグする。 Copilot で動かしてみるが、、、動かない(;_;)。 色々やってみると、どうもOffscreen Window の初期化がつまずいて いるらしいことがわかった。ここのルーチンはただコピーしている だけなのになぜか動かない。どうやっても動かない。簡単に書いて いるが、この辺りのデバッグだけで丸2日以上はかかっている。 こうなると泥沼、どうしようもない。手を尽くせるところはすべて やった。も〜う、嫌になった&挫折した。ということで PalmLander は 日の目をみることはなかったとさ。おわり。 ‥‥って、ちゃんと完成しているので、終わりじゃないッス(^^;。 3月某日: 再起動 せっかく色々いじったソースだったけど、このままだと埓があかない ので、すべて捨てることにする。動いているソース(PilotMine)が あるのだから、それを少しずつ変更していくことに作戦変更。 少し変更しては、Make して、Copilot で試すことを繰り返す。 前のようなことだけは避けたかったので、かなり慎重になる。 特に、Offscreen Window 関係を変更したときはドキドキしたけど、 なんなく変更は出来た。変更といっても、表示するグラフィックを 変えただけなんだけど。 なんとか、当初目指していた、背景上を着陸船が上から下へ動く というアニメーションは出来上がった。 ここも簡単そうに書いてはいるが、ちまちま変更をしていたせいか、 結構時間がかかっている。順調ではあったけど。 3月某日:思い通りに動かしたい! とりあえず、グラフィック関係が何とかなりそうなので、 つぎに、インタフェース関係をいじることにする。 左右に動かすのと、スロットルをフカすための、3種類のボタン 操作が必要となる。普通は物理ボタンを押すとそのボタンに対応 したアプリケーションが立ち上がる。それをさせないために、 ちょっとしたおまじないをすればいい、っていうのは例の神様の 記事に書いてあった。ボタンが押されているかを判定する方法も 書かれていたので、こりゃ楽勝かなと思っていた。 しかし、、、その判定するルーチンはどういうイベントが発生した とき入るルーチンなのか考えていたら頭がこんがらがってしまった。。。 イベントを発生させないと、そのルーチンに入って行かないし、 発生させると他のアプリケーションが立ち上がってしまうし。。。 実は、そんなこと悩む必要無くて、ある一定周期でメインフォームの ルーチンに入るのだから、そこで判定すればいいだけだったのだ。 でも、このときはそんなことに気づかず、ひたすら同じようなことを しているサンプルを探した。その結果、求めていたものとは違ったが、 その解決方法を記述しているドキュメントに出会った。 その解決方法とは、物理ボタンを押されたイベントを無視する だけでなく、更にオリジナルのイベントを発生させるというものだ。 この手法は他にも応用できそうだ。 とまあ、色々回り道をしたけども、なんとか物理ボタンの入力が 判定できるようになった。実は、オリジナルイベントの発生は まだソースの中に入っている。実はこれが横方向の異常な速度の 原因になっているのはわかっているのだが、パラメータ調整が 面倒なので入れたまま(^^; 3月某日:重力に惹かれて ここに重力ルーチンを付け加えると、ほとんど骨組みは完成となる。 さらに、着陸判定などを加えると、一応ゲームとして遊べることになる。 重力ルーチンだけど、これ自体はそんなに大した問題もなくインプ リメントできたけど、Floatの扱いで少々つまづいた。それでも、 前回色々思考錯誤していた経験上、なんとかすることができた。 着陸判定は大したことはない。座標を判断しているだけだから。 ただ、グラフィックの変更などで、何回も判定するための座標値を 変更してはいるけど。 大体以上で一応遊べるものは完成。 あとは、細かい仕事が多くなるので、実はこれを考えるとちょっと げんなりしてくる(^^;。一番楽しかったところは終わってしまった。 3月某日:完成に向けて じつは、この時点でのグラフィックは非常に"しょぼい"ものだった。 そこで、suu に背景や、着陸船、着陸ポイントなどの絵を書いてもらう。 ついでに、着陸船の影、スロットルを吹かしたときの絵、等も描いて もらい、ゲーム上に取り込む。 あとは、燃料計の処理をいれたり、終了時ポップアップウィンドウの 処理をいれたりと、ゲームっぽく仕上げて行く。ハイスコアの処理も かっこ良くやりたかったけど、直接ゲームと関係ないところの処理は もう飽きていたので、PilotMine のものをそのまま使うことにした。 同時に、テストをしながらパラメータの調整を行ない。それっぽく 着陸船が動くようにした。 とまあ、こまごまとしたあまり楽しくないことをしながら、いよいよ Ver.1.0を完成させた。 3月某日:発表!? せっかく作ったんだから、色々な人に遊んでもらいたいのだけど、 まだ不満が残っていたので、躊躇する。一応 suu氏のページには 載せてもらうことにした。 実はまだ、Ver.1.0 ではちゃんとしたアニメーション処理がしてない。 背景の上に直接着陸船のビットマップを書き込んでいて、マスクの 処理とか何にもしていないのだ。”実践モバイルプログラミング Pilotを極める”で、そのことが書いてあったのだが、その具体的な 方法(どういう命令をどう使うか)がわからなかったので、pilot-tech-ml で聞いたら、神様直々に丁寧なお答えを頂戴してしまった。 サンプルソースを見れば一目瞭然だったのに、CD-ROMにサンプルが 入っているとは全く気づかなかったのでした(^^;。本当に、山田さん ありがとうございました。 とまあ、これが大恥を書いた顛末だった。このときにさりげなく このゲームの宣伝をしたので、何人かの方は遊んでくれたようで、 メールも頂いた。本当に嬉しかったなあ。 5月某日:それからそれから 月が5月になっているが、間違いではない。実は教えて頂いたアニ メーション部分を直そうと思っていたのだが、結構大がかりな改装に なることと、以前 Offscreen 関係でハマったことからちょっと気が 重くなって、まだ何も直していない。 実は4月に直し始めたんだけど、、、面倒になってやめてしまって(^^;、 さらに、どこをどう直したかよくわからないという最悪の状況に、、、 一体どうなることやら、、、 今は新しいゲームの作成途中(^^;。グラフィックやインタフェース 関係は完成してるんだけど、思考ルーチンでハマっていて1月近く 進んでいない。でも、廣瀬さん(palmfan)のソフトウェアコンテスト には、ノミネートしたいと思っているので、頑張りたいなあ。 さらに、最近 ASAPP 関係で盛り上がっているうちに、パイルダーオンな ロボットを作るとか suuが言い始めて、実機を作ってしまったので、 これに載せるためのPalm/Pilot用のアプリまで書かなくてはいけない。 うーん、時間無い、、、困った(^^;。 #やる気がイマイチ起きないのが一番問題なんだけど。。。 最後は言い訳ばっかりになってしまったけど、、、 以上、Palm Lander 編でした。