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

📄 plane2can.java

📁 一款j2me完整飞机游戏演示。。大家一起给点意见。。。。大家一起来研究。。可以学到很多
💻 JAVA
字号:
import java.io.IOException;
import java.util.Random;
import java.util.Vector;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

/*练习Vector类应用,利用Vector类实现子弹,(散发子弹)*/
public class Plane2Can extends Canvas implements Runnable {
	private final int sm1 = 150,nl1 = 100; 
	private int defen = 0, sm = sm1, nl = nl1, 
	              gs = 4; // 得分,生命,能量

	private Image img, img1, dimg, baoimg,
	              timg, bImg, mimg, dbImg; // 飞机,飞机个数
                           // 敌机,爆炸,图表,子弹,滚动地图,敌机图片

	private int x = 100, y = 200, pW = 64, pH = 42,
	            step = 10;// 飞机X,Y坐标, 飞机宽度,高度,移动步长

	private int dx = 0, dy = 0, 
	       dStep = 5, dmax = 20;// 敌机X,Y坐标,敌机速度,敌机最大数

	private boolean up, down, left, right, fire;// 按键状态

	private int bMax = 30, bStep = 15;// 设置子弹最大数和速度

	private Vector bV = new Vector(); // 存放所有我机子弹

	private Vector dbV = new Vector();// 存放所有敌机子弹

	private Vector dV = new Vector(); // 存放所有敌机

	private Vector eV = new Vector(); // 存放爆炸位置

	private Random r = new Random(); // 随机数

	private int mx, my, mStep = 3; // 地图坐标,地图滚动速度

	public Plane2Can() {
		try {
			img = Image.createImage("/plane.png");
			img1 = Image.createImage("/f6.png");
			bImg = Image.createImage("/bullet.png");
			dimg = Image.createImage("/f1.png");
			baoimg = Image.createImage("/baozha.png");
			mimg = Image.createImage("/skymap.png");
			timg = Image.createImage("/f3.png");
			dbImg = Image.createImage("/bullet_1.png");
		} catch (IOException e) {
			e.printStackTrace();
		}
		mx = 0;
		my = -(mimg.getHeight() - getHeight());
		new Thread(this).start();
	}

	protected void paint(Graphics g) {
		// 画地图
		g.drawImage(mimg, mx, my, g.LEFT | g.TOP);
		// 画飞机
		g.drawImage(img, x, y, Graphics.LEFT | Graphics.TOP);
		// 画飞机
		g.drawImage(timg, 0, getHeight() - 21, Graphics.LEFT | Graphics.TOP);
		// 画飞机个数
		for (int i = 0; i < gs; i++) {
			g.drawImage(img1, 16 * i, 0, Graphics.LEFT | Graphics.TOP);
		}
		// //画敌机
		for (int i = 0; i < dV.size(); i++) {
			dddd d = (dddd) dV.elementAt(i);
			for (int j = 0; j < dV.size(); j++) {
				g.drawImage(dimg, d.dx, d.dy, Graphics.LEFT | Graphics.TOP);
				g.setColor(0, 255, 0);
				g.fillRect(d.dx + 9, d.dy - 5, d.ds, 5);
			}
		}
		// 画爆炸
		for (int i = 0; i < eV.size(); i++) {
			Explode e = (Explode) eV.elementAt(i);
			for (int j = 0; j < eV.size(); j++) {
				g.drawImage(baoimg, e.baox, e.baoy, Graphics.LEFT
						| Graphics.TOP);
			}
		}
		// 画我机子弹
		if (nl > 0 && fire == true) {
			for (int i = 0; i < bV.size(); i++) {
				Vector v = (Vector) bV.elementAt(i);
				for (int j = 0; j < v.size(); j++) {
					Bullet b = (Bullet) v.elementAt(j);
					g.drawImage(bImg, b.bx, b.by, Graphics.HCENTER
							| Graphics.TOP);
				}
			}
			nl -= 3;
		} else {
			for (int i = 0; i < bV.size(); i++) {
				Bullet b = (Bullet) bV.elementAt(i);
				g.drawImage(bImg, b.bx, b.by, Graphics.HCENTER | Graphics.TOP);
			}
		}
		// 画敌机子弹
		// if(nl>0 && fire == true){
		// for (int i = 0; i < bV.size(); i++) {
		// Vector v = (Vector) bV.elementAt(i);
		// for (int j = 0; j < v.size(); j++) {
		// Bullet b = (Bullet) v.elementAt(j);
		// g.drawImage(bImg, b.bx, b.by, Graphics.HCENTER | Graphics.TOP);
		// }
		// }
		// nl -= 3;
		// }else{
		for (int i = 0; i < dbV.size(); i++) {
			Bullet2 b = (Bullet2) dbV.elementAt(i);
			g.drawImage(dbImg, b.dbx, b.dby, Graphics.HCENTER | Graphics.TOP);
		}
		// }
		// 画得分
		g.setColor(0, 255, 0);
		g.drawString("得分:" + defen, getWidth() - 50, 0, Graphics.LEFT
				| Graphics.TOP);
		// 画生命
		g.setColor(0, 255, 0);
		// g.drawString("生命值:" + sm, 0, 10, Graphics.LEFT | Graphics.TOP);
		g.drawRoundRect(36, getHeight() - 25, 151, 10, 8, 8);
		g.drawRoundRect(36, getHeight() - 15, 101, 10, 8, 8);
		g.setColor(255, 0, 0);
		g.fillRoundRect(37, getHeight() - 24, sm, 9, 8, 8);
		g.setColor(0, 0, 255);
		g.fillRoundRect(37, getHeight() - 14, nl, 9, 8, 8);
		// 画结束
		if (sm <= 0 && gs <= 0) {
			g.setColor(0, 0, 0);
			g.fillRect(0, 0, getWidth(), getHeight());
			g.setColor(0, 255, 0);

			g.drawString("游戏结束", getWidth() / 2, getHeight() / 2,
					Graphics.HCENTER | Graphics.BASELINE);
			g.drawString("得分" + defen, getWidth() / 2, getHeight() / 2 + 10,
					Graphics.HCENTER | Graphics.BASELINE);
		}
	}

	protected void keyPressed(int keyCode) {
		int a = getGameAction(keyCode);
		if (a == UP)
			up = true;
		if (a == DOWN)
			down = true;
		if (a == LEFT)
			left = true;
		if (a == RIGHT)
			right = true;
		if (a == FIRE)
			fire = true;
	}

	protected void keyReleased(int keyCode) {
		int a = getGameAction(keyCode);
		if (a == UP)
			up = false;
		if (a == DOWN)
			down = false;
		if (a == LEFT)
			left = false;
		if (a == RIGHT)
			right = false;
	}

	public void run() {
		long last = 0, last1 = 0, last2 = 0, last3 = 0;
		while (true) {
			long now = System.currentTimeMillis();
			long now1 = System.currentTimeMillis();
			long now2 = System.currentTimeMillis();
			long now3 = System.currentTimeMillis();
			// 地图
			my += mStep;
			if (my >= 0)
				my = -(mimg.getHeight() - getHeight());
			if (now - last > 1000) {
				// 敌机的随机X坐标
				dx = Math.abs(r.nextInt() % getWidth());
				if (dx + 48 > getWidth())
					dx = dx + 48;
				dy = -48;
				dddd d = new dddd(dx, dy, dStep);
				dV.addElement(d);
				last = now;
			}
			// 敌机运动
			for (int i = 0; i < dV.size(); i++) {
				dddd d = (dddd) dV.elementAt(i);
				d.dy = d.dy + dStep;
				dy = d.dy;
				if (d.dy > getHeight())
					dV.removeElementAt(i);
			}
			// 敌机输出子弹
			if (now3 - last3 > 1000) {
				Bullet2 b = new Bullet2(dx + 24, dy + 20, 10);
				dbV.addElement(b);
				last3 = now3;
			}
			// 敌机子弹运动,循环出每个子弹,并设置坐标变化位置
			for (int i = 0; i < dbV.size(); i++) {
				Bullet2 b = (Bullet2) dbV.elementAt(i);
				b.dby = b.dby + b.dbstep;
				if (b.dby > getHeight())
					dbV.removeElementAt(i);
			}
			// 我机输出子弹
			if (nl > 0 && fire == true) {
				if (now1 - last1 > 200) {
					Vector v = new Vector(); // 每次增加5个子弹
					for (int i = 0; i < 5; i++) {
						Bullet b = new Bullet(x + pW / 2, y, 10);
						v.addElement(b);
					}
					if (bV.size() < bMax)
						bV.addElement(v);
					last1 = now1;
				}
			} else {
				if (now2 - last2 > 180) {
					Bullet b = new Bullet(x + pW / 2, y, 10);
					bV.addElement(b);
					last2 = now2;
				}
			}
			// 我机子弹运动,循环出每个子弹,并设置坐标变化位置
			if (nl > 0 && fire == true) {
				for (int i = 0; i < bV.size(); i++) {
					Vector v = (Vector) bV.elementAt(i);
					for (int j = 0; j < v.size(); j++) {
						Bullet b = (Bullet) v.elementAt(j);
						b.by = b.by - b.bstep;
						b.bx = b.bx + (2 - j) * 3;
						if (b.by < 0)
							v.removeElementAt(j);
					}
					if (v.size() == 0)
						bV.removeElementAt(i);

				}
			} else {
				for (int i = 0; i < bV.size(); i++) {
					Bullet b = (Bullet) bV.elementAt(i);
					b.by = b.by - b.bstep;
					if (b.by < 0)
						bV.removeElementAt(i);
				}
			}
			// 子弹和敌机碰撞
			if (nl > 0 && fire == true) {
				for (int i = 0; i < bV.size(); i++) {
					Vector v = (Vector) bV.elementAt(i);
					for (int j = 0; j < v.size(); j++) {
						Bullet b = (Bullet) v.elementAt(j);
						for (int h = 0; h < dV.size(); h++) {
							dddd d = (dddd) dV.elementAt(h);
							if (b.bx > d.dx - 5 && b.bx < d.dx + 48
									&& b.by < d.dy + 26) {
								bV.removeElementAt(i);
								d.ds -= 10;
							}
							if (d.ds <= 0) {
								dV.removeElementAt(h);
								// 得分
								defen += 10;
								// 爆炸位置
								Explode e = new Explode(d.dx, d.dy);
								eV.addElement(e);
								for (int k = 0; k < eV.size(); k++) {
									Explode a = (Explode) eV.elementAt(k);
									try {
										Thread.sleep(50);
									} catch (InterruptedException c) {
										c.printStackTrace();
									}
									eV.removeElementAt(k);
								}
							}
						}
					}
				}
			} else {
				for (int i = 0; i < bV.size(); i++) {
					Bullet b = (Bullet) bV.elementAt(i);
					for (int j = 0; j < dV.size(); j++) {
						dddd d = (dddd) dV.elementAt(j);
						if (b.bx > d.dx - 5 && b.bx < d.dx + 48
								&& b.by < d.dy + 26) {
							bV.removeElementAt(i);
							d.ds -= 10;
						}
						if (d.ds <= 0) {
							dV.removeElementAt(j);
							// 得分
							defen += 10;
							// 爆炸位置
							Explode e = new Explode(d.dx, d.dy);
							eV.addElement(e);
							for (int k = 0; k < eV.size(); k++) {
								Explode a = (Explode) eV.elementAt(k);
								try {
									Thread.sleep(50);
								} catch (InterruptedException c) {
									c.printStackTrace();
								}
								eV.removeElementAt(k);
							}
						}
					}
				}
			}
			// 飞机和敌机碰撞
			for (int j = 0; j < dV.size(); j++) {
				dddd d = (dddd) dV.elementAt(j);
				if (d.dx + 48 > x && d.dx < x + pW && d.dy > y - 26
						&& d.dy < y + 21) {
					dV.removeElementAt(j);
					Explode e = new Explode(d.dx, d.dy);
					eV.addElement(e);
					for (int i = 0; i < eV.size(); i++) {
						Explode a = (Explode) eV.elementAt(i);
						try {
							Thread.sleep(50);
						} catch (InterruptedException c) {
							c.printStackTrace();
						}
						eV.removeElementAt(i);
					}
					sm -= 10;
					if (sm <= 0 && gs > 0) {
						sm = sm1;
						Explode e1 = new Explode(x, y);
						eV.addElement(e1);
						for (int i = 0; i < eV.size(); i++) {
							Explode a = (Explode) eV.elementAt(i);
							try {
								Thread.sleep(50);
							} catch (InterruptedException c) {
								c.printStackTrace();
							}
							eV.removeElementAt(i);
						}
						gs--;
					}
				}
			}
			// 我机和敌机子弹碰撞
			for (int i = 0; i < dbV.size(); i++) {
				Bullet2 b = (Bullet2) dbV.elementAt(i);
				if (b.dbx > x - 5 && b.dbx < x + pW && b.dby > y - 3
						&& b.dby < y + pH) {
					dbV.removeElementAt(i);
					sm -= 5;
					if (sm <= 0 && gs > 0) {
						sm = sm1;
						Explode e1 = new Explode(x, y);
						eV.addElement(e1);
						for (int j = 0; j < eV.size(); j++) {
							Explode a = (Explode) eV.elementAt(j);
							try {
								Thread.sleep(50);
							} catch (InterruptedException c) {
								c.printStackTrace();
							}
							eV.removeElementAt(j);
						}
						gs--;
					}
				}
			}
			// 飞机运动
			if (up == true) {
				y = y - step;
				if (y < 0)
					y = 0;
			}
			if (down == true) {
				y = y + step;
				if (y + pH > getHeight())
					y = getHeight() - pH;
			}
			if (left == true) {
				x = x - step;
				if (x < 0)
					x = 0;
			}
			if (right == true) {
				x = x + step;
				if (x + pW > getWidth())
					x = getWidth() - pW;
			}
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			repaint();
			if (sm <= 0 && gs <= 0)
				break;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -