?? 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 + -