「第2弾」

2001年3月26日  

 iアプリ第2弾ってことで、ザカリテの逆襲を作ってみることにした。別に特におもしろいゲームというわけじゃないけど、こういうチープなBASICソフトを最新(?)のJavaで作ってみるのも、おもしろいよね。
 まず問題になったのは、画面表示。昔のBASICのスクリーンエディタとか、DOSの画面とかみたく、文字を表示しようとすると前回表示の次に表示されて、下まで来るとスクロールする、っていう感じの画面を、どーしよーかって。なんかこういうのって、たいていの環境ではなにも考えなくてもこーなってることが多いから、いざないとなると考えちゃうね。で、初めはTextBoxを編集不可にして使おうかなと思ったんだけど、やっぱりあんまり具合が良くない。というわけでCanvasのサブクラスで自作。バッファにある範囲は上下スクロールできるようにして。このクラスは後々いろいろ使えそうだね。
 本物は、最初に半角カタカナでずらっと説明文が出てくる。これも同じ様に表示したいよね。ma3さんのワンダーウィッチ版は確かソースを公開してたから、そこからテキストをもらっちゃおう。って思って落としてきたら、なんと漢字かなの普通の文章になってた。うーん、やっぱりここは完全移植をねらいたいね。別に長い文じゃないから自分で打ってもいいんだけど、シルフィードのディスクイメージをバイナリエディタで開いて、該当部分を切り出してきた。BASICだからねー。
 このくらいの文章ならソース中に埋め込んじゃっても良いんだろうけど、Unicodeで記述するJavaのソースに半角カタカナっていうのはなんかいやだったし、リソースの読み出しってのも試してみたかったから、テキストファイルにしてその都度読み込むようにしてみた。でもちょっと苦労しちゃったよ。だって、資料でリソースの読み出しっていうと、イメージの読み出しばっかりなんだもの。イメージは専用メソッドがあるから、ラクチンなんだよね。ま、何とかできたし、半角カタカナの表示も特に問題ないみたい。良かった。
 ここまでできちゃえば、ゲーム部分は簡単だよね。実際には、スレッドの止め方がわかんなくて、ちょっとごちゃごちゃしちゃったけど。
 初めは音なしで完成にするつもりだったんだけど、いろいろ見てたら何となく音の出し方がわかってきたから、音を出してみることに。で、まず、iメロディとかっていう、演奏内容が記述されたファイルを用意する。これは着メロと同じMLDファイルだっていうから、簡単かと思ったんだけどね。でも、某サイトから着メロをダウンロードして試したんだけど、なぜかエラーで鳴ってくれない。当然プログラムが悪いんだろうと思ったんだけど、なにが悪いのかちっともわからない。実機に転送してみてもやっぱりならなかったし。
 ふと思って、本に付いてたCD-ROMからサンプルプログラム用のMLDファイルを持ってきたら、…鳴った!きゃー。でもなんで?バージョンとかがあるのかなぁ。本にはMLDCreatorとかってので作ったって書いてあったから、それを落として、サンプルをMLDファイルにしたら、ちゃんとなってくれた。ヨシヨシ。これで作ればいいわけだ。
 MMLで書かれた本物のリストを見ながら、音楽の移植。でも、いざ鳴らしてみたら、なぜか1曲だけエラーが出ちゃう。うーん、なぜだぁ〜。実機でもやっぱり鳴らないし。データを差し替えると鳴るから、データが悪いことは確かなんだけど。。。というわけで、鳴るデータを少しずつ変えていろいろ試したら、なんか、テンポの指定を120にするか、省略すると、iアプリではダメみたい。なぜ?よくわかんないけど、テンポの省略値が120だっていうから、120にするとデータ内にテンポの指定自体がなくなっちゃって、でもテンポ指定のないデータは鳴らないってことなのかなぁ。しょうがないからテンポを110にして、完成。
 いろいろ細かい仕上げをしてたら、なぜか完成直前に開発環境上では音を出すとおかしくなっちゃうようになっちゃった。うーん、音楽関係はいじってないのに。でも、実機に持っていったらちゃんと動いたから、まいっか。さて、遊んでくれる人はいるかな?

第2弾 第3弾
[このおしゃべりにコメントする]
2001年3月23日  

 開発環境も整えたし、なにか簡単なiアプリでも作ってみようかな。なにを作るかって、結構悩んじゃうけど、結局三目並べ(まるバツ)を作ってみることに。いやもお、Javaすっかり忘れちゃってるし。しかも最近ずっとPerlばっかり、オブジェクト指向じゃないプログラムばっかりで。Java1時代の埃かぶった入門書を引っ張り出してきて、リハビリリハビリ。
 JBuilderって、クラス名を打ったあとにピリオドを打つと、メソッドや変数名がずらっとリストでポップアップされるんだよね。メソッド名とかって結構長ったらしいのが多いから、選択するだけで良いのは結構便利便利。あと、リアルタイムに簡単な文法チェックをしているみたいで、入力途中は左のツリーにエラーとか出てる。で、文法的に正しくなるところまで打ち終わると、消えるの。これも、カッコの閉じ忘れとかすぐにわかるし、便利。でも、まぁ自分のマシンの処理速度が遅いのがいけないんだろうけど、ポップアップにしても、エラーにしても、一瞬待たされちゃうっていうか、反応が止まるというか。なんかそれがいや。特にポップアップは、1〜2秒止まってしまったり、選択するためのカーソルキー以外の普通のキーを受け付けない状態になっちゃったり。それ以外にも、メニューバーのメニューが使えなくなったりとかしたし。前回書いたように、IMEとの連携がうまく行ってない感じだし。遅いというより、なんとなくヨタヨタ動いてるんだよね、このソフト。これだけのツールが無料で使えるだけでもすごいことだから、文句を言う筋合いじゃないんだろうけど、有料版ってこれに機能を追加したもので、基本部分はこれなんでしょ?もうちょっとしっかりと動いて欲しいなぁ。それとも、速いマシンで使うと印象も変わるのかな。
 頭をオブジェクト指向に切り換えつつ、本やサンプルプログラムとにらめっこをしながら少しずつ作る。で、まるやバツはdrawLineやdrawOvalで描こうと思ったら、なんとOvalがない!Java2で名称が変わったのか?と思ったんだけど、iモードJavaの本でまるを描いているサンプルを見ると、「円を描くメソッドがないから、自分で作った」みたいなこと書いてある。ほえ〜。ないの?iモードJavaって実数演算もできないんだよ?Ovalくらい、用意しといてよー。…じゃあ、フォントサイズを大きくした「○」を使おうかと思ったら、どーもフォントサイズはラージとかスモールとか、そういう区別しかないみたい。大きさをドットで指定したい…。まぁ、携帯にベクトルフォントを持たすわけにいかないから、しゃーないか。
 結局、円を描くメソッドをパクろうかとも思ったんだけど、習作だし、まるである必然性もないし、四角にしてしまった。これなら簡単に描けるからねっ。
 コンピュータ側は最低限(単純、とも言う)の思考プログラムにして、完成。携帯に転送してみる。…わーい!動いた!!でも、これだけでjarファイルが5KB近くになっちゃうんだね。これじゃあ、ちょっと大きなプログラムを作ったら、イメージとかのデータ類を入れる容量がなくなっちゃうねー。スクラッチパッド利用は、必須か?

整えた 第2弾
[このおしゃべりにコメントする]