コードの記述 その9 ゲームスタートボタン

ゲームオーバーの後に、もう1度ゲームをするには、iアプリ開発ツール側で「実行」ボタンを押さないといけません。これでは携帯電話にダウンロードした場合に不都合になりますので、エミュレータのボタンを押すだけで、ゲームをスタートできるようにしたいと思います。

まず、ゲームの初期化を行うinit( )関数を用意します。StarJet.javaファイルのhitCheck( )関数の次に、以下のinit( )関数を追加しましょう。

        return false;        //1つもぶつからなかった
    }
    
    //ゲームの初期化を行う
    private void init() {
        appearTerm = 900;        //敵機出現間隔
        score = 0;                //スコア
        enemyList.removeAllElements();    //敵機リストのクリア
        //ファイターの出現位置
        fighter.xpos = (Display.getWidth() + fighter.getWidth()) / 2;
        fighter.ypos = Display.getWidth() / 4 * 3;
        //タイマー停止
        tm1.stop();
        tm2.stop();
        //タイマースタート
        tm1.start();
        tm2.start();
    }
}

このコードで、敵機の出現間隔とスコア、およびファイターの出現位置を設定できるようにしましたので、各々の変数を初期化していた部分が不要となります。従って以下のような変更を加えることになります。

まず、34行目前後の

    Timer tm1, tm2;
    int appearTerm = 900;
    Image bangImage;
    int score = 0;

の部分の、数値を代入している部分を削除します。

    Timer tm1, tm2;
    int appearTerm;
    Image bangImage;
    int score;

さらに、MainCanvas( )関数内部で、tm1, tm2のタイマーをスタートしている部分を

        tm1 = new Timer();        //画面書き換え用のタイマー
        tm1.setTime(20);
        tm1.setRepeat(true);
        tm1.setListener((TimerListener)this);
        tm1.start();
        
        tm2 = new Timer();        //敵機生成用のタイマー
        tm2.setTime(appearTerm);
        tm2.setRepeat(true);
        tm2.setListener((TimerListener)this);
        tm2.start();

以下のように削除します。

        tm1 = new Timer();        //画面書き換え用のタイマー
        tm1.setTime(20);
        tm1.setRepeat(true);
        tm1.setListener((TimerListener)this);
        
        tm2 = new Timer();        //敵機生成用のタイマー
        tm2.setTime(appearTerm);
        tm2.setRepeat(true);
        tm2.setListener((TimerListener)this);

次に、Fighter.javaファイルのFighter( )関数の頭の部分を

    Fighter(Graphics g) {
        this.g = g;
        xpos = Display.getWidth() / 2;
        ypos = Display.getHeight() / 4 * 3;
        
        try {

から、xpos, yposの初期化をしている行を削除します。

    Fighter(Graphics g) {
        this.g = g;
        
        try {

編集対象をStarJet.javaファイルに戻し、MainCanvas( )関数の頭の部分に、以下のように1行追加し、携帯電話エミュレータの「MENU」キーに、ゲームスタートを割り当てます。

    MainCanvas() {
        setSoftLabel(SOFT_KEY_1, "END");
        setSoftLabel(SOFT_KEY_2, "START");
        setBackground(Graphics.getColorOfName(Graphics.BLUE));

最後に、「MENU」キーを押したときの処理を追加するため、以下のような90行近辺のコードを

        if (type == Display.KEY_RELEASED_EVENT) {
            if (param == Display.KEY_SOFT1) {
                (IApplication.getCurrentApp()).terminate();
            }
            // カーソルキーを離したとき
            switch (param) {
            case Display.KEY_LEFT:
            case Display.KEY_RIGHT:

以下のように書き換えます。

        if (type == Display.KEY_RELEASED_EVENT) {
            // カーソルキーを離したとき
            switch (param) {
            case Display.KEY_SOFT1:
                (IApplication.getCurrentApp()).terminate();
                break;
            case Display.KEY_SOFT2:
                init();
                break;
            case Display.KEY_LEFT:
            case Display.KEY_RIGHT:

以上で、図で示された「MENU」ボタンを押すことで、ゲームを何度でも再開出来るようになります。

画面イメージ

お疲れ様でした。ここまでで、この「携帯アプリ作ろう」という本書の目的を達成しました。ちゃんと動きましたでしょうか。動いた方は、思う存分遊んでください。

次のページ以降に、今まで打ち込んだ3つのファイルのソースコードリストをあげておきます。