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

iアプリhelloWorld

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

2.iアプリhelloWorld

ディスプレイに「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 122321  
最終更新時間:2008年01月01日 22時07分03秒