/* 待受けアプリのサンプル Time-stamp: "2004/11/03 Wed 11:59 hig" Saburo Higuchi 2003 http://www.math.ryukoku.ac.jp/~hig/ プログラム解説等 http://sparrow.math.ryukoku.ac.jp/~hig/course/juniors_2004/06/ */ // #define DOJA // #define MIDP // #define VF // #define MIDP #if DOJA import com.nttdocomo.ui.*; #elif MIDP import javax.microedition.midlet.*; import javax.microedition.lcdui.*; #endif #if DOJA #elif VF import com.j_phone.system.*; #elif EZ import com.kddi.matiuke.EventManager; #endif import java.util.Random; #if DOJA #elif MIDP #else // DoJa/MIDP Builder を使われる方へ: // まず, プログラムの先頭で, #define DOJA // などと定義する必要があります. // 以下の define 文は, #if - #endif の中に書かれていますので, // DoJa/MIDP Builder のプリプロセッサでは処理できません. // そこで, #if - #endif はやめて, // いらない方をJava の意味でコメント文にしてください. #endif #if DOJA #define MYALIGN +0 #define MYAP MApplication #define MYSTART start #define MYBLACK Graphics.getColorOfName(Graphics.BLACK) #define MYWHITE Graphics.getColorOfName(Graphics.WHITE) #define MYBLUE Graphics.getColorOfName(Graphics.BLUE) #define MYRED Graphics.getColorOfName(Graphics.RED) #define MYGREEN Graphics.getColorOfName(Graphics.GREEN) #define MYYELLOW Graphics.getColorOfName(Graphics.YELLOW) #define MYMAGENTA Graphics.getColorOfName(Graphics.MAROON) #define MYCYAN Graphics.getColorOfName(Graphics.AQUA) #define MYDIALOG Dialog #define MYLABEL Label #define MYADD add #define MYTEXT Text #elif MIDP #define MYALIGN ,Graphics.LEFT|Graphics.BOTTOM #define MYAP MIDlet #define MYSTART startApp #define MYBLACK 0 #define MYWHITE ( (255<<16) + (255<<8) + (255)) #define MYBLUE ( (0<<16) + (0<<8) + (255)) #define MYRED ( (255<<16) + (0<<8) + (0)) #define MYGREEN ( (0<<16) + (255<<8) + (0)) #define MYYELLOW ( (255<<16) + (255<<8) + (0)) #define MYMAGENTA ( (255<<16) + (0<<8) + (255)) #define MYCYAN ( (0<<16) + (255<<8) + (255)) #define MYDIALOG Alert #define MYLABEL StringItem #define MYADD append #define MYTEXT String #endif /** 待受アプリのサンプル */ public class ResidentSample extends MYAP { /** 起動するときに呼ばれる メソッド. 必須. */ #if DOJA public void start(){ ResidentCanvas cc=new ResidentCanvas(this); Display.setCurrent(cc); } // 待受中のイベントを拾うメソッド public void processSystemEvent(int type, int param){ if ( type==FOLD_CHANGED_EVENT){ if( param==0){ // 携帯が折り畳まれたら deactivate(); // 非活性状態に sleep(); // 休止状態に } } else if ( type==CLOCK_TICK_EVENT ){ // 毎正時 } else if ( type==MODE_CHANGED_EVENT ){ // 活性状態に } } #elif VF public void startApp(){ ResidentCanvas cc = new ResidentCanvas(this); DeviceControl em=DeviceControl.getDefaultDeviceControl(); em.setScheduledAlarmListener(cc); // em.setTelephonyListener(cc); // この機能の使用は要申請 // em.setMailListener(cc); // この機能の使用は要申請 Display.getDisplay(this).setCurrent(cc); } public void pauseApp(){} public void destroyApp(boolean unconditional){} #elif EZ public void startApp(){ ResidentCanvas cc = new ResidentCanvas(this); EventManager em=EventManager.getEventManager(); em.setAlarmEventListener(cc); em.setCallEventListener(cc); em.setCMailEventListener(cc); em.setEMailEventListener(cc); Display.getDisplay(this).setCurrent(cc); } public void pauseApp(){} public void destroyApp(boolean unconditional){} #endif } /** キャンバスを継承するクラス */ class ResidentCanvas extends Canvas implements Runnable #if DOJA #elif VF , ScheduledAlarmListener , TelephonyListener, MailListener // この機能の使用は要申請 #elif EZ , AlarmEventListener, AlarmEventListener, EMailEventListener #endif { ResidentSample parent; private int width; private int height; Man m0; Square s0, s1; /** コンストラクタ. 最初に1回だけ実行される */ ResidentCanvas(ResidentSample m){ this.parent=m; width=getWidth(); height=getHeight(); /* 人を作る */ m0=new Man(width/2, height/2); Thread thm=new Thread(m0); thm.start(); /* 正方形を作る */ s0=new Square(width/2, height/10,2); s1=new Square(width/2, height/4,8); Thread ths0=new Thread(s0); Thread ths1=new Thread(s1); ths0.start(); ths1.start(); /* このクラスの run に制御を移す */ Thread th=new Thread(this); th.start(); #if DOJA setSoftLabel(Frame.SOFT_KEY_2,"終了"); #elif MIDP #endif } public void run(){ while(true){ // 無限ループ // 決り文句. ループの回る速さを決める try { Thread.sleep(300); } catch ( Exception e ) { // 割り込みがあっても何もしない. } repaint(); } } public void paint(Graphics g){ g.setColor(MYWHITE); g.fillRect(0,0,width,height); // 画面を消す // 各オブジェクトの描画メソッドに任せる m0.paint(g); s0.paint(g); s1.paint(g); } #if DOJA /** キーイベントを拾う */ public void processEvent(int type, int param){ if( type==Display.KEY_PRESSED_EVENT ){ switch( param ){ case Display.KEY_UP: m0.moveUp(); break; case Display.KEY_DOWN: m0.moveDown(); break; case Display.KEY_LEFT: m0.moveLeft(); break; case Display.KEY_RIGHT: m0.moveRight(); break; default: } } else if( type==Display.KEY_RELEASED_EVENT ){ switch( param ){ case Display.KEY_SOFT2: if( parent.getLaunchType()==IApplication.LAUNCHED_AS_CONCIERGE ){ parent.deactivate(); } else { parent.terminate(); } default: } } } #elif MIDP /** ゲームアクション, キー が押されたとき */ protected synchronized void keyPressed(int keyCode){ int action=getGameAction(keyCode); switch ( action ){ case UP: m0.moveUp(); break; case DOWN: m0.moveDown(); break; case LEFT: m0.moveLeft(); break; case RIGHT: m0.moveRight(); break; default: } } /** ゲームアクション, キー が離されたとき */ protected synchronized void keyReleased(int keyCode){ // これは検出しない. } /** ゲームアクション, キー が押されたままのとき */ protected synchronized void keyRepeated(int keyCode){ // これは検出しない. } #endif #if DOJA #elif VF public void ring(String name, String number){ } public void ignored(){ } public void notice(String comment){ } public void received(String name, String address, int detail){ } #elif EZ public void called(){ } public void alarmNotified(){ } public void cmailReceived(){ } public void emailReceived(){ } #endif } class Man implements Runnable { private Image [] im; private int x; private int y; private int t; Man(int x, int y){ // 変数の初期化 this.x=x; this.y=y; this.t=0; // イメージの読み込み im=new Image[2]; #if DOJA MediaImage mi0=MediaManager.getImage("resource:///pose0.gif"); MediaImage mi1=MediaManager.getImage("resource:///pose1.gif"); #elif MIDP #endif try{ #if DOJA mi0.use(); im[0]=mi0.getImage(); mi1.use(); im[1]=mi1.getImage(); #elif MIDP im[0]=Image.createImage("/pose0.png"); im[1]=Image.createImage("/pose1.png"); #endif } catch (Exception e){ //"gif を読み込むことに失敗" } } /** スレッドが start されると このメソッドに制御が移る */ public void run(){ while(true){ // 無限ループ t=(t+1)%2; // 決り文句. ループの回る速さを決める try { Thread.sleep(500); } catch ( Exception e ) { // 割り込みがあっても何もしない. } } } public void paint(Graphics g){ g.drawImage(im[t],x,y MYALIGN); // 絵を貼る } public void moveUp(){ y-=5; } public void moveDown(){ y+=5; } public void moveLeft(){ x-=5; } public void moveRight(){ x+=5; } } class Square implements Runnable { private int size=5; private int x; private int dx; private int y; Random r; Square(int x, int y, int dx){ this.x=x; this.y=y; this.dx=dx; r = new Random( System.currentTimeMillis() +x + y + dx); } /** スレッドが start されると このメソッドに制御が移る */ public void run(){ while(true){ // 無限ループ y=(y+1)%100; if((r.nextInt() & 0x4) == 0x4){ x=(x+dx)%100; } else { x=(x-dx+100)%100; } // 決り文句. ループの回る速さを決める try { Thread.sleep(1000); } catch ( Exception e ) { // 割り込みがあっても何もしない. } } } public void paint(Graphics g){ g.setColor(MYBLACK); g.fillRect(x,y,size,size); // 4角形を描く } } /* Local Variables: mode: java End: */