トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

iアプリhello

Topjava(DL)iアプリ(DL)掲示板リンク集

2.iアプリhello

ディスプレイに「HELLO」と表示するだけの簡単なiアプリを作成してみます。

(1)「iαppliTool for DoJa-3.5(FOMA)」を起動します。

スタート→すべてのプログラム→iαppli Development Kit for DoJa-3.5→iαppliTool for DoJa-3.5(FOMA)

(2)「プロジェクト新規作成」をクリックします。


(3)プロジェクト名を入力します。

ゲーム名をプロジェクト名として、半角英数字で入力します。
今回はサンプルということでgame01とします。
「作成」ボタンをクリックすると、「C:\iDKDoJa3.5\apps」フォルダ内に
「game01」フォルダが作成されます。


(4)「C:\iDKDoJa3.5\apps\game01」フォルダに移動します。

「game01」フォルダ内は以下のような構成になっています。


(注)
※拡張子の表示が許可されているかを確認してください。
1.上の画面のときに「ツール」→「フォルダオプション」→「表示」タブを開きます。
2.詳細設定欄にある「登録されている拡張子は表示しない」にチェックが
付いていないかを確認します。
チェックが付いている場合はチェックを外し、
「すべてのフォルダに適用」をクリックします。
3.ついでに「縮小版をキャッシュしない」にチェックが付いているかを確認します。
チェックが付いていない場合はチェックを付け、
「すべてのフォルダに適用」をクリックします。

下記のようになっていればOKです。


(5)ソースの作成をします。

ソースとはプログラムが記述されたファイルのことです。
ソースはプロジェクトフォルダの「src」フォルダに保存しますので、
「C:\iDKDoJa3.5\apps\game01\src」フォルダに移動してください。
そのフォルダ内でテキストファイルを2つ作成します。
テキストファイルの名前はKicker.javaとMainCanvas.javaに変更してください。

下記のようになっていればOKです。


下記の内容をコピーし、Kicker.javaとMainCanvas.javaに貼り付け、上書き保存してください。

DoJaの Kicker.java
import com.nttdocomo.ui.*;

/**
 * ゲームの開始処理を行うクラスです。
 *	
 * @author RGB
 * @version 1.0
 */
public class Kicker extends IApplication {

    /**
    * メインのキャンバスです。
    */
    private MainCanvas mc;


    /**
    * アプリケーションが起動したら呼ばれるメソッドです。
    */
    public void start() {
    mc = new MainCanvas(this);
    Display.setCurrent(mc);
    mc.start();
  }


}


DoJaの MainCanvas.java
import com.nttdocomo.ui.*;
import com.nttdocomo.io.*;
import javax.microedition.io.*;
import java.io.*;
import java.util.*;

/**
 * メインのキャンバスです。
 *	
 * @author RGB
 * @version 1.0
 */
public class MainCanvas extends Canvas implements Runnable {

    // ----------------------------------------------------------------
    // 
    // 共通部:特に変更する必要はありません。
    // 
    // ----------------------------------------------------------------

    /**
     * 使用領域の幅です。
     */
    public static final int AREA_WIDTH = 240;

    /**
     * 使用領域の高さです。
     */
    public static final int AREA_HEIGHT = 240;

    /**
     * 画面の幅です。
     */
    public static final int DISPLAY_WIDTH = Display.getWidth();

    /**
     * 画面の高さです。
     */
    public static final int DISPLAY_HEIGHT = Display.getHeight();

    /**
     * キー処理で使用する定数で、「上キー」を表します。
     */
    public static final int KEY_UP = Display.KEY_UP;

    /**
     * キー処理で使用する定数で、「下キー」を表します。
     */
    public static final int KEY_DOWN = Display.KEY_DOWN;

    /**
     * キー処理で使用する定数で、「右キー」を表します。
     */
    public static final int KEY_RIGHT = Display.KEY_RIGHT;

    /**
     * キー処理で使用する定数で、「左キー」を表します。
     */
    public static final int KEY_LEFT = Display.KEY_LEFT;

    /**
     * キー処理で使用する定数で、「決定キー」を表します。
     */
    public static final int KEY_SELECT = Display.KEY_SELECT;


    /**
     * 押されたキーの値です。
     */
    private int keyeventPressed = 0;

    /**
     * このキャンバスのグラフィックスオブジェクトです。
     */
    private Graphics g = null;

    /**
     * 現在のフレームカウントです。
     */
    private int frameCount = 0;

    /**
    * 現在のシーンです。
    */
    private int scene = 0;

    /**
     * シーンの切り替え状態を管理します。
     */
    private boolean sceneSwitch = false;

    /**
     * 設定されたIApplicationオブジェクトです。
     */
    private IApplication kicker;

    /**
     * ゲーム用のスレッドです。
     */
    private Thread th;


    /**
     * コンストラクタです。
     */
    public MainCanvas(IApplication kicker) {
        this.kicker = kicker;
    }


    /**
    * キャンバス処理を開始します。
    */
    public void start() {
        repaint();
    }


    /**
    * 画面の描画要求時に呼ばれます。
    *
    * @param g グラフィックスオブジェクトが渡されます。
    */
    public void paint(Graphics g) {
        if(th == null) {
            this.g = g;
            th = new Thread(this);
            th.start();
            Thread.currentThread().yield();
        }
    }


    /**
    * キーイベント取得メソッドです。
    *
    * @param type イベントのタイプが渡されます。
    * @param param イベントのパラメータが渡されます。
    */
    public void processEvent(int type, int param) {
        if(type == Display.KEY_PRESSED_EVENT) {
            keyeventPressed = param;
        }
        else if(type == Display.KEY_RELEASED_EVENT) {
            keyeventPressed = 0;
        }
    }


    /**
    * 指定されたキーが、押された状態であるかを判定します。
    *
    * @param key 検索するキーを設定します。
    */
    public boolean keyPressing(int key) {
        if(keyeventPressed == key) {
            keyeventPressed = 0;
            return true;
        }
        else {
            return false;
        }
    }


    /**
    * 指定されたキーが、キーリピート状態であるかを判定します。
    *
    * @param key 検索するキーを設定します。
    */
    public boolean keyRepeating(int key) {
        if(keyeventPressed == key) {
            return true;
        }
        else {
            return false;
        }
    }


    /**
    * アプリを終了します。
    */
    public void exit() {
        IApplication.getCurrentApp().terminate();
    }


    /**
    * 画像を読み込みます。
    *
    * @param name 画像名称を設定します。
    * @return 読み込んだ画像を返します。
    */
    public Image loadImage(String name) {
        MediaImage mImg = null;
        Image img = null;
        try {
            mImg = MediaManager.getImage("resource:///" + name + ".gif");
            mImg.use();
            img = mImg.getImage();
        } 
        catch(ConnectionException ce) {
            if(mImg != null) {
                mImg.unuse();
                mImg.dispose();
            }
            throw new RuntimeException(ce.getMessage());
        }
        return img;
    }


    /**
    * 描画開始時・描画終了時の処理を行います。
    *
    * @param state 描画開始はtrue、描画終了はfalseを設定します。
    */
    public void draw(boolean state) {
        if(state) {
            g.lock();
        }
        else {
            g.unlock(false);
        }
    }


    /**
    * 描画に使用する色を設定します。
    *
    * @param red 赤要素の輝度を指定します(0〜255)。
    * @param green 緑要素の輝度を指定します(0〜255)。
    * @param blue 青要素の輝度を指定します(0〜255)。
    */
    public void setColor(int red, int green, int blue) {
        g.setColor(Graphics.getColorOfRGB(red, green, blue));
    }


    /**
    * 矩形領域を塗りつぶします。
    *
    * @param x 矩形の左上のX座標を指定します。
    * @param y 矩形の左上のY座標を指定します。
    * @param width 矩形の幅を指定します。
    * @param height 矩形の高さを指定します。
    */
    public void fillRect(int x, int y, int width, int height) {
        g.fillRect(x, y, width, height);
    }


    /**
    * 文字列を描画します。
    *
    * @param str 描画する文字列を指定します。
    * @param x X座標を指定します。
    * @param y Y座標を指定します。
    */
    public void drawString(String str, int x, int y) {
        g.drawString(str, x, y + Font.getDefaultFont().getBBoxHeight(str));
    }


    /**
    * イメージを描画します。
    *
    * @param image 描画するイメージオブジェクトを指定します。
    * @param x X座標を指定します。
    * @param y Y座標を指定します。
    */
    public void drawImage(Image image, int x, int y) {
        g.drawImage(image, x, y);
    }


    /**
    * ゲーム用スレッドの処理です。
    */
    public void run() {
        g = getGraphics();
        try {
            changeScene(SC_INIT);
            while(true) {
                controlScene();
                Thread.currentThread().sleep(100);
                frameCount ++;
            }
        }
        catch(Throwable t) {
            System.out.println(t.getMessage());
            exit();
        }
    }


    /**
    * シーンを変更します。
    *
    * @param scene 変更するシーンを設定します。
    */
    public void changeScene(int scene) {
        this.scene = scene;
        sceneSwitch = true;
    }


    /**
    * シーンの初期化処理をすべきかを判断します。
    *
    * @return シーンが変更された直後はtrueを返します。
    *     それ以降はfalseを返します。
    */
        public boolean firstScene() {
        boolean res = sceneSwitch;
        sceneSwitch = false;
        return res;
    }





    // ----------------------------------------------------------------
    // 
    // 実装部:ゲームごとに変更します。
    // 
    // ----------------------------------------------------------------

    /** 「初期化」シーンです。*/
    public static final int SC_INIT   = 0;

    /** 「タイトル」シーンです。*/
    public static final int SC_TITLE  = 1;

    /** 「プレイ」シーンです。*/
    public static final int SC_PLAY   = 2;

    /** 「結果」シーンです。*/
    public static final int SC_RESULT = 3;


    /**
    * シーンごとの処理を制御します。
    */
    public void controlScene() {
        switch(scene) {
            case SC_INIT   : sceneInit();
                break;
            case SC_TITLE  : sceneTitle();
                break;
            case SC_PLAY   : scenePlay();
                break;
            case SC_RESULT : sceneResult();
                break;
        }
    }


    /**
    * 「初期化」シーンを制御します。
    */
    public void sceneInit() {
        if(firstScene()) {
        }

        draw(true);

        setColor(0, 0, 255);
        fillRect(0, 0, AREA_WIDTH, AREA_HEIGHT);

        setColor(255, 0, 0);
        drawString("HELLO", 10, 20);

        draw(false);
    }


    /**
    * 「タイトル」シーンを制御します。
    */
    public void sceneTitle() {
    }


    /**
    * 「プレイ」シーンを制御します。
    */
    public void scenePlay() {
    }

    /**
    * 「結果」シーンを制御します。
    */
    public void sceneResult() {
    }





}


(6)アプリ情報を設定します。

iアプリの情報を設定するには「ADF設定」をクリックします。


以下の項目に値を設定します。

項目名 設定値 説明
AppName GAME01 アプリの名称を設定します。好きな名前で構いません。今回はこの名前にします。
AppClass Kicker 最初に起動されるクラスです。先ほど説明した「Kicker」にします。※左欄からコピーして貼り付けする場合は「Kicker」の右側に余分なスペースが入る場合がありますのでご注意ください。


最後に必ず「設定」をクリックします。

(7)「ビルド」をクリックします。


ビルドをすると、「bin」フォルダにプログラム実行ファイル
(jamファイルとjarファイル)が作成されます。
※エラーが出た場合は、もう一度(4)からやり直してください。

(8)「起動」をクリックします。


ディスプレイが青く塗りつぶされ、赤色の文字で「HELLO」と表示されたらOKです。


3.iアプリくうちゃん

Total 602282  
最終更新時間:2007年12月24日 17時07分07秒