!!!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)「プロジェクト新規作成」をクリックします。 http://akioneer.sakura.ne.jp/kuu/iapl2-1.jpg !(3)プロジェクト名を入力します。 ゲーム名をプロジェクト名として、半角英数字で入力します。 今回はサンプルということでgame01とします。 「作成」ボタンをクリックすると、「C:\iDKDoJa3.5\apps」フォルダ内に 「game01」フォルダが作成されます。 http://akioneer.sakura.ne.jp/kuu/iapl2-2.jpg !(4)「C:\iDKDoJa3.5\apps\game01」フォルダに移動します。 「game01」フォルダ内は以下のような構成になっています。 http://akioneer.sakura.ne.jp/kuu/iapl2-3.jpg (注) ※拡張子の表示が許可されているかを確認してください。 1.上の画面のときに「ツール」→「フォルダオプション」→「表示」タブを開きます。 2.詳細設定欄にある「登録されている拡張子は表示しない」にチェックが 付いていないかを確認します。 チェックが付いている場合はチェックを外し、 「すべてのフォルダに適用」をクリックします。 3.ついでに「縮小版をキャッシュしない」にチェックが付いているかを確認します。 チェックが付いていない場合はチェックを付け、 「すべてのフォルダに適用」をクリックします。 !下記のようになっていればOKです。 http://akioneer.sakura.ne.jp/kuu/iapl2-4.jpg !(5)ソースの作成をします。 ソースとはプログラムが記述されたファイルのことです。 ソースはプロジェクトフォルダの「src」フォルダに保存しますので、 「C:\iDKDoJa3.5\apps\game01\src」フォルダに移動してください。 そのフォルダ内でテキストファイルを2つ作成します。 テキストファイルの名前はKicker.javaとMainCanvas.javaに変更してください。 !下記のようになっていればOKです。 http://akioneer.sakura.ne.jp/kuu/iapl2-5.jpg !下記の内容をコピーし、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設定」をクリックします。 http://akioneer.sakura.ne.jp/kuu/iapl2-6.jpg !以下の項目に値を設定します。 ,項目名,設定値,説明 ,AppName,GAME01,アプリの名称を設定します。好きな名前で構いません。今回はこの名前にします。 ,AppClass,Kicker,最初に起動されるクラスです。先ほど説明した「Kicker」にします。※左欄からコピーして貼り付けする場合は「Kicker」の右側に余分なスペースが入る場合がありますのでご注意ください。 http://akioneer.sakura.ne.jp/kuu/iapl2-7.jpg 最後に必ず「設定」をクリックします。 !(7)「ビルド」をクリックします。 http://akioneer.sakura.ne.jp/kuu/iapl2-8.jpg ビルドをすると、「bin」フォルダにプログラム実行ファイル (jamファイルとjarファイル)が作成されます。 ※エラーが出た場合は、もう一度(4)からやり直してください。 !(8)「起動」をクリックします。 http://akioneer.sakura.ne.jp/kuu/iapl2-9.jpg !ディスプレイが青く塗りつぶされ、赤色の文字で「HELLO」と表示されたらOKです。 http://akioneer.sakura.ne.jp/kuu/iapl2-10.jpg !!!3.[[iアプリくうちゃん]]