春休みで時間に余裕のあるこうしろうは,古いPCにLinuxをインストールしていた。午前中で部活が終わった日に夜までやっていたのだが,うまくいかないらしい。「難しいよ。楽しんでやられ」と励ますだけにした。自分一人でなんとかしたいのだろうし,正直,私としては一緒に,はまりたくはない。Linuxサーバーの構築では仕事で十分苦労しているからだ。11時近くまで格闘していたが,結局この日はうまくいかなかったようだ。「明日宿題してから,もう一回挑戦しよ。」と言うこうしろうにバランス感覚のあるオタクだなと,笑ってしまった。

 翌日,なんとかインストールできたようだ。「Xは動かなかったけど,コマンドラインで遊んでみるわ」とこうしろう。LinuxのGUI(Graphical User Interface)を動かすにはメモリは少ないし,ディスプレイ・アダプタも合わなかったようだ。「そうそう,CUI(Character User Interface)もいいよ。コンピュータって感じがするよ」と慰めながら,自力でLinuxをインストールした息子を少し頼もしく感じた。

3月29日 Flashによるシューティングゲーム作成も佳境に入ってきた。今日の課題はUFOにミサイルが当たった時の動作とゲームらしさである。

 まずは,ミサイルがUFOに命中したら爆発のムービークリップを表示してUFOを消そうと,こうしろうは爆発の絵を描き始めた。几帳面な彼らしく,グリッドを表示させ,「グリッドに吸着」を選び線を描いていく。やはり,絵心はないらしい。アルタミラの壁画の動物みたいなものを描いていた。「ちょっと,変わろうか」と描いてみたが,こちらは鳥獣戯画のようになってしまった。「かず,描いてくれ」と,いつもならどこにでも首を突っ込んできて「じゃま,じゃま」と追い払われているかずに作画を依頼する。



 ちょこちょことこんな絵を描いた。こうしろうが,この絵をシンボル(ムービークリップ)に変換し,プログラミングを開始する。bombというのがこのムービークリップの名前である。



_y += 2;
newbomb = "newbomb";
for (i=1; i <= 10; i++) {
 shotname = "myshot" + i;
 if (this.hitTest(_root[shotname])) {
  objSound = new Sound(this);
  objSound.attachSound("bom");
  objSound.start(0,1);
  _root.attachMovie("bomb",newbomb,100);
  _root[newbomb]._x = this._x;
  _root[newbomb]._y = this._y;
  this.removeMovieClip();
  }
 }



 if (this.hitTest(_root[shotname])) で衝突を検知し,objSound.start(0,1)で命中音を鳴らした後,attachMovieメソッドで爆発のムービークリップを生成し,衝突したUFOの場所に爆発のムービークリップを表示するために_root[newbomb]._x = this._xと_root[newbomb]._y = this._yでUFOのX,Y座標を爆発のムービークリップに代入している。this.removeMovieClip()はUFOを消す。

 FlashのActionスクリプトはオブジェクト指向なので,例えばUFOオブジェクトにスクリプトを書いている時,UFOはthisで表すことができる。ロケットにスクリプトを書いている時は,ロケットがthisになる。こうしろうはthisが現在何を指しているのか,時々わからなくなることがある。確かにFlashの画面はごちゃごちゃしているので,横から見ていても今どこに書いているのか見失うことがあるのだが,オブジェクト指向の感覚が身についていないのかもしれない。

 緊張した面持ちでテストを行うこうしろう。根が真面目なのである。ミサイルがUFOに命中すると爆発の絵が表示され,UFOは消滅した。成功である。

 次にゲームらしさを出すために,打ち損じたUFOがロケットの位置まで来ると(if (_y > 300)で判断),beamという名の音を鳴らし,GAME OVERを表示するフレームに_root.gotoAndPlay("gameover")で飛ばすようにした。フレームは番号で指定することもできるが,"gameover"のようにラベルを付けて指定することもできる。


if (_y > 300) {
 objSound = new Sound(this);
 objSound.attachSound("beam");
 objSound.start(0,5);
 _root.gotoAndPlay("gameover");
}



shot07.html
(表示にはMacromedia Flash Player6が必要です。ゲームオーバー時の音は結構うるさいので,スピーカーのボリュームを絞ってお試し下さい。)