import java.io.*; import java.util.Enumeration; import java.util.Random; import java.util.Vector; import javax.microedition.io.Connector; import javax.microedition.io.StreamConnection; import com.nttdocomo.io.ConnectionException; import com.nttdocomo.io.HttpConnection; import com.nttdocomo.ui.*; class FrogClimberCanvas extends Canvas { public final static int ID_TIMER=0; public final static int BALL_LENGTH=16; private static Random random=new Random(); private Image[] frog; private int frogX,frogY,frogVx,frogVy,pose; private Image ball; private int[] ballX,ballY; private ShortTimer timer; private int scroll,hiscore,rank; private boolean checkRank; private Vector media; // 初期化 public FrogClimberCanvas() { setSoftLabel(Panel.SOFT_KEY_1,"終了"); init(); } private void init() { media=new Vector(); frog=new Image[3]; for (int i=0;i<=frog.length-1;i++) { frog[i]=loadImage("/frog"+(1+i)+".gif"); } ball=loadImage("/ball.gif"); ballX=new int[BALL_LENGTH]; ballY=new int[BALL_LENGTH]; load(); PhoneSystem.setAttribute( PhoneSystem.DEV_BACKLIGHT,PhoneSystem.ATTR_BACKLIGHT_ON); } private Image loadImage(String file) { MediaImage mediaImage; mediaImage=MediaManager.getImage("resource://"+file); media.addElement(mediaImage); try { mediaImage.use(); } catch (ConnectionException e) { e.printStackTrace(); } return mediaImage.getImage(); } private void reset() { frogX=getWidth()/2-frog[0].getWidth()/2; frogY=0; frogVx=0; frogVy=0; for (int i=0;i<=BALL_LENGTH-1;i++) { ballX[i]=(getWidth()/2)*(i%2)+ Math.abs(random.nextInt())%(getWidth()/2-frog[0].getWidth()); ballY[i]=Math.abs(i*32+random.nextInt()%12); } scroll=0; rank=0; checkRank=false; } // 開始 public void start() { reset(); timer=ShortTimer.getShortTimer(this,ID_TIMER,1000/7,true); timer.start(); } // メイン public void mainLoop() { if ((getKeypadState() & (1<0) { frogVy=frogVy*2+Math.abs(random.nextInt())%2; } if (Math.abs(ballX[i]-(frogX+frogVx))getWidth()-frog[0].getWidth()) { frogVx=(getWidth()-frog[0].getWidth()-frogX); } frogVy=frogVy-1; frogVy=Math.max(frogVy,-frog[0].getHeight()); frogVy=Math.min(frogVy, frog[0].getHeight()); if (frogY+frogVy<0) { frogVy=(0-frogY); } if (frogVy>0) { pose=2; } frogX+=frogVx; frogY+=frogVy; scroll=scroll+(frogY-(getHeight()/2-frog[0].getHeight()/2)-scroll)/4; scroll=Math.max(scroll,0); if (checkRank) { checkRank(); checkRank=false; } if (rank==0) { hiscore=Math.max(hiscore,scroll); setSoftLabel(Panel.SOFT_KEY_2,""+hiscore); } else { setSoftLabel(Panel.SOFT_KEY_2,rank+"位"); } } // 描画処理 public void paint(Graphics g) { int y; g.lock(); g.setColor(Graphics.getColorOfRGB(0,0,64)); g.fillRect(0,0,getWidth(),getHeight()); for (int i=0;i<=BALL_LENGTH-1;i++) { y=getHeight()-frog[0].getHeight()-ballY[i]+scroll; y=(y+32*BALL_LENGTH/2)%(32*BALL_LENGTH)-32*BALL_LENGTH/2; if (-frog[0].getHeight()<=y && y