iアプリの作り方
ボールの移動実験

まず閉ざされた四角の中でボールを動かしてみます。壁にぶつかれば反射します。
ボールは単純化するために、30度、45度、60度の3つの角度しか取らないものとし ます。

では実際のソースを見てみましょう。ここではわざとボールの移動前を消さずに動きを 確認しています。
初期30度で開始 初期45度で開始 初期60度で開始

Block.java


import com.nttdocomo.ui.IApplication;
import com.nttdocomo.ui.Display;

public class Block extends IApplication{
	public void start() {
		BlockMain blockMain = new BlockMain();
		Display.setCurrent(blockMain);
	}
}

BlockMain.java


import com.nttdocomo.ui.IApplication;
import com.nttdocomo.ui.Display;
import com.nttdocomo.ui.Graphics;
import com.nttdocomo.ui.Canvas;
import com.nttdocomo.ui.MediaManager;
import com.nttdocomo.ui.MediaImage;
import com.nttdocomo.ui.Image;
import com.nttdocomo.io.ConnectionException;
import com.nttdocomo.ui.UIException;

public class BlockMain extends Canvas implements Runnable{

	private int game;

	private int bx;
	private int by;
	private int bd;

	private Thread thread;

	BlockMain(){
		setSoftLabel(SOFT_KEY_1, "Start");
		setSoftLabel(SOFT_KEY_2, "Exit");

		game = 0;

		thread = new Thread(this);
		thread.start();
	}

	public void run(){
		while(true){
			try{
				thread.sleep(5);
			}catch (InterruptedException e){
				break;
			}
			repaint();
		}
	}

	public void paint(Graphics g){
		if (game == 0){
			bx = 700;
			by = 500;
			bd = 60;

			game = 1;
		}else if (game == 1){

			g.lock();
			g.setColor(Graphics.getColorOfName(Graphics.WHITE));
			g.fillRect(0, 0, 100, 120);
			g.setColor(Graphics.getColorOfName(Graphics.BLACK));
			g.fillRect(2, 2, 96, 116);
			g.unlock(true);

			game = 2;
		}else if (game == 2){
			drawBall(g);
		}
	}

	/* Ballを描く */
	private void drawBall(Graphics g){
		g.lock();
/*
		g.setColor(Graphics.getColorOfName(Graphics.BLACK));
		g.fillRect(bx / 10, by / 10, 4, 4);
*/
		moveBall();

		g.setColor(Graphics.getColorOfName(Graphics.WHITE));
		g.fillRect(bx / 10 + 1, by / 10, 2, 4);
		g.fillRect(bx / 10, by / 10 + 1, 4, 2);
		g.unlock(true);
	}

	/* Ballを動かす */
	private void moveBall(){
		/* (2,2) - (97,117) */
		if (bd == 45){
			bx += 10;
			by -= 10;
			if (bx >= 940){
				bd = 135;
			}

			if (by <= 20){
				bd = 315;
			}
		}else if (bd == 135){
			bx -= 10;
			by -= 10;
			if (bx <= 20){
				bd = 45;
			}

			if (by <= 20){
				bd = 225;
			}
		}else if (bd == 225){
			bx -= 10;
			by += 10;
			if (bx <= 20){
				bd = 315;
			}

			if (by >= 1130){
				bd = 135;
			}
		}else if (bd == 315){
			bx += 10;
			by += 10;
			if (bx >= 940){
				bd = 225;
			}

			if (by >= 1130){
				bd = 45;
			}
		}else if (bd == 30){
			bx += 10;
			by -= 5;
			if (bx >= 940){
				bd = 150;
			}

			if (by <= 20){
				bd = 330;
			}
		}else if (bd == 150){
			bx -= 10;
			by -= 5;
			if (bx <= 20){
				bd = 30;
			}

			if (by <= 20){
				bd = 210;
			}
		}else if (bd == 210){
			bx -= 10;
			by += 5;
			if (bx <= 20){
				bd = 330;
			}

			if (by >= 1130){
				bd = 150;
			}
		}else if (bd == 330){
			bx += 10;
			by += 5;
			if (bx >= 940){
				bd = 210;
			}

			if (by >= 1130){
				bd = 30;
			}
		}else if (bd == 60){
			bx += 5;
			by -= 10;
			if (bx >= 940){
				bd = 120;
			}

			if (by <= 20){
				bd = 300;
			}
		}else if (bd == 120){
			bx -= 5;
			by -= 10;
			if (bx <= 20){
				bd = 60;
			}

			if (by <= 20){
				bd = 240;
			}
		}else if (bd == 240){
			bx -= 5;
			by += 10;
			if (bx <= 20){
				bd = 300;
			}

			if (by >= 1130){
				bd = 120;
			}
		}else if (bd == 300){
			bx += 5;
			by += 10;
			if (bx >= 940){
				bd = 240;
			}

			if (by >= 1130){
				bd = 60;
			}
		}
	}

	public void processEvent(int type, int param){
		if(type == Display.KEY_PRESSED_EVENT){
			if (param == Display.KEY_SOFT1){
				game = 0;
			}else if (param == Display.KEY_SOFT2){
				IApplication.getCurrentApp().terminate();
			}

			if (param == Display.KEY_LEFT){
			}else if(param == Display.KEY_RIGHT){
			}else if(param == Display.KEY_UP){
			}else if(param == Display.KEY_DOWN){
			}
		}
	}
}

Block.jam


AppName = Block
AppClass = Block
AppVer = 1.0
PackageURL = c:\iAppli\block\pre\Block.jar
AppSize = 8913
LastModified = Tsu, 10 Apr 2001 23:08:59

表紙へ