⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 caidancan.java

📁 一款掉落数字游戏。。通过敲击手机键盘数字销毁屏幕数字。。实现了游戏菜单。。新手可以学习
💻 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 + -