📄 rhythm_room.java
字号:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import java.io.*;
import java.util.*;
public class rhythm_room extends MIDlet implements CommandListener {
private Display display;
private TempleteCanvas canvas;
private int state = 0;//系统状态
private Timer timer;
private ClockTimerTask timerTask;
private long time1, time2, time3;
private int flag, enable, start1;
private long t, interval;
private int counter;
private int startNum;
private RecordStore rs = null;
private long recordTime;
private boolean anyRecord = false;
private Image backImage;
private Image centerImage;
private Command exit = new Command("Exit", Command.EXIT, 1);
private Command enter = new Command("Enter", Command.ITEM, 2);
private Command help = new Command("help", Command.HELP, 2);
private Command start = new Command("start", Command.ITEM, 2);
private Command stop = new Command("stop", Command.ITEM, 2);
private Command replay = new Command("replay", Command.ITEM, 2);
private Command record = new Command("record", Command.ITEM, 2);
private Command OK = new Command("OK", Command.OK, 1);
public rhythm_room() {
canvas = new TempleteCanvas();
display = Display.getDisplay(this);
try {
backImage = Image.createImage("/back.png");
} catch (Exception e) {
e.printStackTrace();
}
}
public void startApp() {
display.setCurrent(canvas);
canvas.addCommand(exit);
canvas.addCommand(enter);
canvas.addCommand(help);
//canvas.addCommand(record);
canvas.setCommandListener(this);
counter = 0;
flag = 0;
enable = 0;
start1 = 0;
t = 1000;
startNum = Math.abs((new Random()).nextInt() % 12);
try {
rs = RecordStore.openRecordStore("LOCALRECORD", true);
if (rs.getNumRecords() != 0) {
anyRecord = true;
ByteArrayInputStream bais = new ByteArrayInputStream(rs.getRecord(1));
DataInputStream dis = new DataInputStream(bais);
try {
//recordPlayer=dis.readUTF();
recordTime = dis.readLong();
} catch (Exception e) {
}
rs.closeRecordStore();
}
} catch (RecordStoreException e) {
}
if (anyRecord) {
canvas.addCommand(record);
}
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command c, Displayable s) {
if (c == exit) {
destroyApp(false);
notifyDestroyed();
} else if (c == enter) {
state = 1;
canvas.repaint();
//进入主游戏画面
} else if (c == help) {
state = 2;
canvas.repaint();
//进入帮助画面
} else if (c == record) {
state = 4;
canvas.repaint();
//进入本机记录画面
} else if (c == start) {
state = 1;
start1 = 1;
interval = 0;
time1 = 0;
time2 = 0;
time3 = 0;
while (interval < 500) {
interval = Math.abs((new Random()).nextInt() % 2000);
}
timer = new Timer();
timerTask = new ClockTimerTask();
timer.scheduleAtFixedRate(timerTask, t, interval);
canvas.repaint();
} else if (c == replay) {
state = 3;
canvas.repaint();
} else if (c == stop) {
if (enable == 1) {
flag = 1;
time2 = System.currentTimeMillis();
time3 = time2 - time1 - interval * 6;
time3 = Math.abs(time3);
enable = 0;
canvas.repaint();
}
}
}
class TempleteCanvas extends Canvas {
int width = 0;
int height = 0;
protected void paint(Graphics g) {
g.setColor(0, 0, 0);
g.fillRect(0, 0, width - 1, height - 1);
//游戏开始画面
if (state == 0) {
width = getWidth();
height = getHeight();
Image coverImage = null;
try {
coverImage = Image.createImage("/cover.png");
} catch (Exception e) {
e.printStackTrace();
}
g.drawImage(coverImage, 0, 0, g.TOP | g.LEFT);
}
//游戏帮助画面
if (state == 2) {
Image helpImage = null;
try {
helpImage = Image.createImage("/result.png");
} catch (Exception e) {
e.printStackTrace();
}
g.drawImage(helpImage,0,0,g.TOP|g.LEFT);
g.setColor(120,240,60);
g.drawString("想看看自己的节奏感如何吗?",24,10,g.TOP|g.LEFT);
g.drawString("请接受这毫秒级的检验吧:)",24,30,g.TOP|g.LEFT);
g.drawString("游戏规则:",24,50,g.TOP|g.LEFT);
g.drawString("点『start』按钮,将看到绿色",24,70,g.TOP|g.LEFT);
g.drawString("圆点按一定的频率依次通过六个",4,90,g.TOP|g.LEFT);
g.drawString("星座,请按此节奏估计圆点到达第",4,110,g.TOP|g.LEFT);
g.drawString("十二个星座,也就是圆圈所在的星",4,130,g.TOP|g.LEFT);
g.drawString("座的时刻,并在该时刻按下『stop』",4,150,g.TOP|g.LEFT);
g.drawString("按钮,您将会看到您的判断与准确",4,170,g.TOP|g.LEFT);
g.drawString("时刻的误差",4,190,g.TOP|g.LEFT);
g.drawString("加油哦^_^",24,210,g.TOP|g.LEFT);
}
//本机记录画面
if (state == 4) {
Image helpImage = null;
try {
helpImage = Image.createImage("/result.png");
} catch (Exception e) {
e.printStackTrace();
}
g.drawImage(helpImage, 0, 0, g.TOP | g.LEFT);
g.setColor(120, 240, 60);
g.drawString("本机目前最准确的记录为:",30,100,g.LEFT|g.TOP);
g.drawString(String.valueOf(recordTime), 100, 130, g.LEFT | g.TOP);
g.drawString("(毫秒)", 100, 150, g.LEFT | g.TOP);
}
if (state == 3) {
removeCommand(replay);//去除replay Command;
addCommand(start); //加入start Command;
counter = 0;
flag = 0;
enable = 0;
width = getWidth();
height = getHeight();
g.drawImage(backImage, 0, 0, g.TOP | g.LEFT);
int r = 5;
g.setColor(0, 255, 0);
try {
centerImage = Image.createImage("/00.png");
} catch (Exception e) {
e.printStackTrace();
}
g.drawImage(centerImage, 120, 130, g.VCENTER | g.HCENTER);
startNum = Math.abs((new Random()).nextInt() % 12);
switch (startNum) {
case 0:
g.drawArc(120 - r, 56 - r, 10, 10, 0, 360);
g.fillArc(120 - r, 56 - r, 10, 10, 0, 360);
break;
case 1:
g.drawArc(156 - r, 66 - r, 10, 10, 0, 360);
g.fillArc(156 - r, 66 - r, 10, 10, 0, 360);
break;
case 2:
g.drawArc(182 - r, 93 - r, 10, 10, 0, 360);
g.fillArc(182 - r, 93 - r, 10, 10, 0, 360);
break;
case 3:
g.drawArc(191 - r, 130 - r, 10, 10, 0, 360);
g.fillArc(191 - r, 130 - r, 10, 10, 0, 360);
break;
case 4:
g.drawArc(182 - r, 164 - r, 10, 10, 0, 360);
g.fillArc(182 - r, 164 - r, 10, 10, 0, 360);
break;
case 5:
g.drawArc(155 - r, 191 - r, 10, 10, 0, 360);
g.fillArc(155 - r, 191 - r, 10, 10, 0, 360);
break;
case 6:
g.drawArc(120 - r, 200 - r, 10, 10, 0, 360);
g.fillArc(120 - r, 200 - r, 10, 10, 0, 360);
break;
case 7:
g.drawArc(83 - r, 190 - r, 10, 10, 0, 360);
g.fillArc(83 - r, 190 - r, 10, 10, 0, 360);
break;
case 8:
g.drawArc(56 - r, 162 - r, 10, 10, 0, 360);
g.fillArc(56 - r, 162 - r, 10, 10, 0, 360);
break;
case 9:
g.drawArc(46 - r, 130 - r, 10, 10, 0, 360);
g.fillArc(46 - r, 130 - r, 10, 10, 0, 360);
break;
case 10:
g.drawArc(56 - r, 93 - r, 10, 10, 0, 360);
g.fillArc(56 - r, 93 - r, 10, 10, 0, 360);
break;
case 11:
g.drawArc(83 - r, 66 - r, 10, 10, 0, 360);
g.fillArc(83 - r, 66 - r, 10, 10, 0, 360);
break;
default:
;
}
switch (startNum % 12) {
case 0:
try {
centerImage = Image.createImage("/00.png");
} catch (Exception e) {
e.printStackTrace();
}
g.drawImage(centerImage, 120, 130, g.VCENTER | g.HCENTER);
g.fillArc(120 - r, 56 - r, 10, 10, 0, 360);
break;
case 1:
try {
centerImage = Image.createImage("/01.png");
} catch (Exception e) {
e.printStackTrace();
}
g.drawImage(centerImage, 120, 130, g.VCENTER | g.HCENTER);
g.fillArc(156 - r, 66 - r, 10, 10, 0, 360);
break;
case 2:
try {
centerImage = Image.createImage("/02.png");
} catch (Exception e) {
e.printStackTrace();
}
g.drawImage(centerImage, 120, 130, g.VCENTER | g.HCENTER);
g.fillArc(182 - r, 93 - r, 10, 10, 0, 360);
break;
case 3:
try {
centerImage = Image.createImage("/03.png");
} catch (Exception e) {
e.printStackTrace();
}
g.drawImage(centerImage, 120, 130, g.VCENTER | g.HCENTER);
g.fillArc(191 - r, 130 - r, 10, 10, 0, 360);
break;
case 4:
try {
centerImage = Image.createImage("/04.png");
} catch (Exception e) {
e.printStackTrace();
}
g.drawImage(centerImage, 120, 130, g.VCENTER | g.HCENTER);
g.fillArc(182 - r, 164 - r, 10, 10, 0, 360);
break;
case 5:
try {
centerImage = Image.createImage("/05.png");
} catch (Exception e) {
e.printStackTrace();
}
g.drawImage(centerImage, 120, 130, g.VCENTER | g.HCENTER);
g.fillArc(155 - r, 191 - r, 10, 10, 0, 360);
break;
case 6:
try {
centerImage = Image.createImage("/06.png");
} catch (Exception e) {
e.printStackTrace();
}
g.drawImage(centerImage, 120, 130, g.VCENTER | g.HCENTER);
g.fillArc(120 - r, 200 - r, 10, 10, 0, 360);
break;
case 7:
try {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -