package pub.bomb.test;
import java.io.IOException;
import java.util.Random;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.media.MediaException;
import javax.microedition.midlet.MIDlet;
import pub.bomb.constant.Constants;
import pub.bomb.input.CMotionMonitor;
public class CEngine extends Canvas implements Runnable{
private CMotionMonitor sys_da_monitor;
private byte sys_state = Constants.SYS_STATE_STARTUP;
private byte app_state = Constants.APP_STATE_READY;
private MIDlet sys_midlet;
private Display sys_display;
private Image arrow[], failed, success;
private int exp = Constants.MATCH_EXPECT_DEFAULE , result = 0 , times = 0;
private String message = "move your hand";
private Graphics g;
private Random seed;
public CEngine(MIDlet midlet) {
/*super(false);*/
sys_da_monitor = new CMotionMonitor();
sys_midlet = midlet;
setFullScreenMode(true);
}
public void init() {
try {
sys_da_monitor.bind(this);
sys_display = Display.getDisplay(sys_midlet);
arrow = new Image[4];
arrow[0] = Image.createImage("/up.png");
arrow[1] = Image.createImage("/down.png");
arrow[2] = Image.createImage("/right.png");
arrow[3] = Image.createImage("/left.png");
success = Image.createImage("/success.png");
failed= Image.createImage("/failed.png");
seed = new Random();
sys_display.setCurrent(this);
} catch (IOException ex) {
ex.printStackTrace();
} catch (MediaException ex) {
ex.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
protected void paint(Graphics g) {
g.setColor(0xFFFFFF);
g.fillRect(0, 0, Constants.SCREEN_WIDTH, Constants.SCREEN_HEIGHT);
if(sys_da_monitor.gdib!=null){
g.drawRGB(sys_da_monitor.gdib, 0, Constants.SW_WIDTH, 0, 0, Constants.SW_WIDTH, Constants.SW_HEIGHT, false);
}
/*switch(exp){
case Constants.MATCH_EXPECT_UP:
g.drawImage(arrow[0], (Constants.SCREEN_WIDTH - 50)>>1, Constants.SW_HEIGHT, Graphics.TOP|Graphics.LEFT);
break;
case Constants.MATCH_EXPECT_DOWN:
g.drawImage(arrow[1], (Constants.SCREEN_WIDTH - 50)>>1, Constants.SCREEN_HEIGHT - 50, Graphics.TOP|Graphics.LEFT);
break;
case Constants.MATCH_EXPECT_LEFT:
g.drawImage(arrow[3], 0, (Constants.SCREEN_HEIGHT-50)>>1, Graphics.TOP|Graphics.LEFT);
break;
case Constants.MATCH_EXPECT_RIGHT:
g.drawImage(arrow[2], Constants.SCREEN_WIDTH-50, (Constants.SCREEN_HEIGHT-50)>>1, Graphics.TOP|Graphics.LEFT);
break;
}*/
/*if(app_state == Constants.APP_STATE_MATCH_COMPLETED){
if(result < 0){
g.drawImage(failed, Constants.SCREEN_WIDTH>>1, Constants.SCREEN_HEIGHT>>1, Graphics.VCENTER|Graphics.HCENTER);
}else{
g.drawImage(success, Constants.SCREEN_WIDTH>>1, Constants.SCREEN_HEIGHT>>1, Graphics.VCENTER|Graphics.HCENTER);
}
exp = Math.abs(seed.nextInt())%4;
app_state = Constants.APP_STATE_READY;
result = 0;
}*/
g.setColor(0x000000);
g.drawString("退出测试", 0, Constants.SCREEN_HEIGHT-15, 20);
}
protected void keyPressed(int key) {
if(key == -6){
destroy();
sys_midlet.notifyDestroyed();
}
}
protected void keyReleased(int key) {
}
protected void moved(int direct){
}
public void run() {
exp = Math.abs(seed.nextInt())%4;
app_state = Constants.APP_STATE_READY;
while (sys_state == Constants.SYS_STATE_STARTUP) {
/*switch(app_state){
case Constants.APP_STATE_READY:
app_state = Constants.APP_STATE_MATCHING;
break;
case Constants.APP_STATE_MATCHING:
try {
while(times < Constants.MATCH_TIMES){
if (sys_da_monitor.match(exp) == Constants.MATCH_RESULT_SUCCESS) {
result ++;
} else {
result --;
}
times++;
}
times=0;
if (sys_da_monitor.match(exp) == Constants.MATCH_RESULT_SUCCESS) {
result ++;
} else {
result --;
}
} catch (IOException ex) {
message = ex.getMessage();
} catch (MediaException ex) {
message = ex.getMessage();
} catch (Exception ex) {
message = ex.getMessage();
}
app_state = Constants.APP_STATE_MATCH_COMPLETED;
break;
case Constants.APP_STATE_MATCH_COMPLETED:
break;
}*/
repaint();
serviceRepaints();
System.gc();
Thread.yield();
}
}
public void destroy() {
sys_state = Constants.SYS_STATE_SHUTDOWN;
sys_da_monitor.close();
}
}