📄 caidancan.java
字号:
import java.util.Random;
import java.util.Vector;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.midlet.MIDlet;
public class CaidanCAN extends Canvas implements Runnable {
private Vector v = new Vector();
private Random r = new Random();
private int pStep = 3;
private int defen = 0;
private int sm = getWidth(), l = 0;
// 以下是游戏菜单
private String[] menu = { "开始游戏", "关于游戏", "设置游戏", "退出游戏" };
private int curMenu = 0;// 当前菜单
private MIDlet mid;// 为了用MID类中退出命令
// 以下是关于游戏状态的定义
private int S_MENU = 0; // 菜单状态
private int S_GAME = 1; // 游戏运行状态
private int S_SET = 2; // 设置游戏
private int S_ABOUT = 3;// 关于游戏
private int state; // 当前属于哪个游戏状态
private int step; // 设置游戏中字符下落速度
public CaidanCAN(MIDlet mid) {
this.mid = mid;
new Thread(this).start();
// TODO Auto-generated constructor stub
}
public void dengdai(Graphics g) {
g.setColor(0);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0, 255, 0);
g.drawString("请稍后.....", getWidth() / 2 - 20, getHeight() - 70,
Graphics.LEFT | Graphics.TOP);
g.setColor(0, 255, 0);
g.fillRect(0, getHeight() - 50, l, 20);
}
public void suijishu(Graphics g) {
//
g.setColor(0, 255, 0);
for (int i = 0; i < v.size(); i++) {
ShuZi d = (ShuZi) v.elementAt(i);
g.drawString("" + d.s, d.dx, d.dy, Graphics.HCENTER
| Graphics.BASELINE);
}
}
public void defenshengming(Graphics g) {
g.setColor(255, 0, 0);
g.drawString("得分:" + defen, 0, 0, Graphics.LEFT | Graphics.TOP);
g.setColor(255, 0, 0);
g.fillRect(0, getHeight() - 10, sm, 10);
}
public void jieshu(Graphics g) {
g.setColor(0);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0, 255, 0);
g.drawString("游戏结束", getWidth() / 2, getHeight() / 2, Graphics.HCENTER
| Graphics.BASELINE);
g.setColor(0, 255, 0);
g.drawString("得分:" + defen, getWidth() / 2, getHeight() / 2 + 10,
Graphics.HCENTER | Graphics.BASELINE);
}
public void jindutiao() {
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
l += 10;
repaint();
if (l == getWidth())
break;
}
}
public void shuweizhi() {
int dx = Math.abs(r.nextInt() % getWidth());
int s = Math.abs(r.nextInt() % 10);
int dy = -5;
ShuZi d = new ShuZi(dx, dy, pStep, s);
if (d.dx < 0)
d.dx = 0;
if (d.dx > getWidth() - 3)
d.dx = getWidth() - 5;
v.addElement(d);
}
public void shuxiaoshi() {
for (int i = 0; i < v.size(); i++) {
ShuZi d = (ShuZi) v.elementAt(i);
d.dy = d.dy + d.dStep;
if (d.dy > getHeight()) {
v.removeElementAt(i);
sm -= 30;
}
}
}
protected void paint(Graphics g) {
if (state == S_MENU) { // 当前状况是菜单时
g.setColor(0);
g.fillRect(0, 0, getWidth(), getHeight());
Font f = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
Font.SIZE_LARGE);
g.setFont(f);
int y = 100;
for (int i = 0; i < menu.length; i++) {
if (i == curMenu) {
g.setColor(255, 0, 0);
g.drawString(menu[i], getWidth() / 2, y + 30 * i,
Graphics.HCENTER | Graphics.TOP);
} else {
g.setColor(0, 255, 0);
g.drawString(menu[i], getWidth() / 2, y + 30 * i,
Graphics.HCENTER | Graphics.TOP);
}
}
} else if (state == S_GAME) { // 当前状况是游戏时
dengdai(g);
if (l == getWidth()) {
g.setColor(0);
g.fillRect(0, 0, getWidth(), getHeight());
suijishu(g);
defenshengming(g);
}
if (sm == 0) {
jieshu(g);
}
} else if (state == S_SET) { // 当前状况是关于时
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0, 0, 0);
g.drawString("关于打字游戏", getWidth() / 2, 50, Graphics.HCENTER
| Graphics.TOP);
} else if (state == S_ABOUT) { // //当前状况是设置时
g.setColor(0);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0, 255, 0);
g.drawString("设置下落速度", getWidth() / 2, 50, Graphics.HCENTER
| Graphics.TOP);
g.setColor(0, 255, 0);
g.fillRect(0, getHeight() - 50, pStep * 10, 20);
}
}
public void run() {
long last = System.currentTimeMillis();
jindutiao();
if (l == getWidth()) {
while (true) {
if (state == S_MENU) { // 当前状况是菜单时
} else if (state == S_GAME) {
// 当前状况是游戏时
long now = System.currentTimeMillis();
if (now - last > 400) {
shuweizhi();
last = now;
}
shuxiaoshi();
if (sm == 0) {
v.removeAllElements();
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();
// TODO Auto-generated method stub
} else if (state == S_SET) { // 当前状况是设置时
} else if (state == S_ABOUT) { // //当前状况是关于时
}
}
}
}
protected void keyPressed(int keyCode) {
int press = getGameAction(keyCode);
if (state == S_MENU) { // 当前状况是菜单时
if (press == UP)
curMenu = (curMenu - 1 + menu.length) % menu.length;
if (press == DOWN)
curMenu = (curMenu + 1 + menu.length) % menu.length;
if (press == FIRE) {
if (curMenu == 0)
state = S_GAME;// 进入开始游戏状态
if (curMenu == 1)
state = S_SET;// 进入设置游戏状态
if (curMenu == 2)
state = S_ABOUT;// 进入关于游戏状态
if (curMenu == 3)
mid.notifyDestroyed();// 退出游戏
}
repaint();
} else if (state == S_GAME) { // 当前状况是游戏时
int a = keyCode - KEY_NUM0;
for (int i = 0; i < v.size(); i++) {
ShuZi d = (ShuZi) v.elementAt(i);
if (a == d.s) {
v.removeElementAt(i);
defen += 10;
if (sm < getWidth())
sm += 5;
}
}
if (sm == 0 && press == FIRE) {
sm = getWidth();
defen=0;
state = S_MENU;// 返回到菜单
}
repaint();
} else if (state == S_SET) { // 当前状况是关于时
if (press == FIRE)
state = S_MENU;// 返回到菜单
repaint();
} else if (state == S_ABOUT) { // //当前状况是设置时
if (press == LEFT)
pStep--;
if (press == RIGHT)
pStep++;
if (press == FIRE)
state = S_MENU;// 返回到菜单
repaint();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -