JAVA开发:打地鼠游戏

Mouse.java

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class Mouse {
	private int x, y;
	private int tab;
	private int data;
	Random rd = new Random();

	private boolean live = true;
	private int mouseTime = 10;

	private MouseClient mc;

	private static Toolkit tk = Toolkit.getDefaultToolkit();

	private static Image[] imgs = null;
	private static Map<Image, String> imgKV = new HashMap<Image, String>();

	static {
		imgs = new Image[] {
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/A.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/B.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/C.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/D.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/E.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/F.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/G.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/H.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/I.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/J.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/K.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/L.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/M.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/N.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/O.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/P.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/Q.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/R.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/S.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/T.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/U.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/V.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/W.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/X.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/Y.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/Z.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/0.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/1.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/2.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/3.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/4.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/5.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/6.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/7.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/8.png")),
				tk.getImage(Mouse.class.getClassLoader().getResource(
						"images/9.png"))

		};

		imgKV.put(imgs[0], "A");
		imgKV.put(imgs[1], "B");
		imgKV.put(imgs[2], "C");
		imgKV.put(imgs[3], "D");
		imgKV.put(imgs[4], "E");
		imgKV.put(imgs[5], "F");
		imgKV.put(imgs[6], "G");
		imgKV.put(imgs[7], "H");
		imgKV.put(imgs[8], "I");
		imgKV.put(imgs[9], "J");
		imgKV.put(imgs[10], "K");
		imgKV.put(imgs[11], "L");
		imgKV.put(imgs[12], "M");
		imgKV.put(imgs[13], "N");
		imgKV.put(imgs[14], "O");
		imgKV.put(imgs[15], "P");
		imgKV.put(imgs[16], "Q");
		imgKV.put(imgs[17], "R");
		imgKV.put(imgs[18], "S");
		imgKV.put(imgs[19], "T");
		imgKV.put(imgs[20], "U");
		imgKV.put(imgs[21], "V");
		imgKV.put(imgs[22], "W");
		imgKV.put(imgs[23], "X");
		imgKV.put(imgs[24], "Y");
		imgKV.put(imgs[25], "Z");
		imgKV.put(imgs[26], "0");
		imgKV.put(imgs[27], "1");
		imgKV.put(imgs[28], "2");
		imgKV.put(imgs[29], "3");
		imgKV.put(imgs[30], "4");
		imgKV.put(imgs[31], "5");
		imgKV.put(imgs[32], "6");
		imgKV.put(imgs[33], "7");
		imgKV.put(imgs[34], "8");
		imgKV.put(imgs[35], "9");
	}

	public Mouse(int x, int y, int tab, MouseClient mc) {
		this.x = x;
		this.y = y;
		this.tab = tab;
		this.mc = mc;
		data = rd.nextInt(36);
		new Thread(new MouseTime()).start();
	}

	public void draw(Graphics g) {
		if (!live) {
			mc.mouses.remove(this);
			mc.tab[tab] = 0;
			return;
		}
		g.drawImage(imgs[data], x, y, null);

		Color c = g.getColor();
		g.setColor(Color.gray);

		g.setFont(new Font(null, 1, 40));
		g.drawString("" + mouseTime, x + 50, y + 10);
		if (mouseTime <= 0) {
			this.live = false;
			mc.eclipseTime++;
		}

	}

	public boolean keyReleased(KeyEvent e) {
		int key = imgKV.get(imgs[data]).charAt(0);

		if (e.getKeyCode() == key) {
			System.out.println(key);
			mc.mouseCount++;
			this.live = false;
			return true;
		}
		return false;
	}

	private class MouseTime implements Runnable {
		public void run() {
			while (true) {
				mouseTime--;

				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}

}

MouseClient.java

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class MouseClient extends Frame {
	/*
	 * 整个游戏界面的规格
	 */
	public static final int GAME_WIDTH = 1000;
	public static final int GAME_HEIGHT = 700;

	public static int mouseCount;
	public static int count;
	public static int gameTime;
	public static int eclipseTime;

	List<Mouse> mouses = new ArrayList<Mouse>();

	Random rd = new Random();
	public int initMouseCount = 2;// 同时显示的地鼠数

	public int[] tab = new int[10];// 标记坑里是否有地鼠

	Image offScreenImage = null;

	/*
	 * 本方法显示主窗口
	 */
	public void launchFrame() {

		this.setLocation(200, 10);
		this.setSize(GAME_WIDTH, GAME_HEIGHT);
		this.setTitle("MouseClient");
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		this.setVisible(true);
		this.setBackground(Color.GREEN);
		this.setResizable(false);

		this.addKeyListener(new KeyMonitor());

		new Thread(new PaintThread()).start();

		new Thread(new GameTime()).start();
	}

	private class GameTime implements Runnable {
		public void run() {
			while (true) {
				gameTime++;
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}

	private class PaintThread implements Runnable {
		public void run() {
			while (true) {
				repaint();
				try {
					Thread.sleep(10);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}

	public void update(Graphics g) {
		if (offScreenImage == null) {
			offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT);
		}
		Graphics gOffScreen = offScreenImage.getGraphics();
		Color c = gOffScreen.getColor();
		gOffScreen.setColor(Color.GREEN);
		gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);
		gOffScreen.setColor(c);
		paint(gOffScreen);
		g.drawImage(offScreenImage, 0, 0, null);
	}

	public void paint(Graphics g) {
		Color c = g.getColor();
		g.setColor(Color.gray);
		for (int i = 1; i <= 3; i++)
			for (int j = 1; j <= 3; j++)
				g.fillOval(GAME_WIDTH / 4 * i - 60, GAME_HEIGHT / 4 * j - 25,
						120, 50);
		g.setColor(c);

		g.drawString("击打数:" + count, 20, 40);
		g.drawString("击中数:" + mouseCount, 20, 60);
		g.drawString("逃跑数:" + eclipseTime + "", 20, 80);
		g.drawString("时间:" + gameTime + "s", 20, 100);

		if (mouseCount >= 80)
			initMouseCount = 8;
		else if (mouseCount >= 50)
			initMouseCount = 6;
		else if (mouseCount >= 20)
			initMouseCount = 4;

		int temp;
		while (mouses.size() < initMouseCount) {
			temp = rd.nextInt(9);
			while (tab[temp] == 1) {
				temp++;
				if (temp == 9)
					temp = 0;
			}
			tab[temp] = 1;

			mouses.add(new Mouse(GAME_WIDTH / 4 * (temp % 3 + 1) - 70,
					GAME_HEIGHT / 4 * (temp / 3 + 1) - 100, temp, this));
		}
		for (int i = 0; i < mouses.size(); i++) {
			Mouse m = mouses.get(i);
			m.draw(g);
		}
	}

	public static void main(String[] args) {
		MouseClient km = new MouseClient();
		km.launchFrame();
	}

	private class KeyMonitor extends KeyAdapter {

		public void keyReleased(KeyEvent e) {
			System.out.println(e.getKeyCode());

			count++;
			for (int i = 0; i < mouses.size(); i++) {
				if (mouses.get(i).keyReleased(e))
					break;
			}
		}
	}
}

运行结果:

获取图片资源地址:Java打地鼠游戏配套图片-Java文档类资源-CSDN下载。 

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllenSun-1990

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值