打地鼠 java


//简单的图片处理技术

所有图片连接:http://yunpan.cn/cQyWXfIhIUDqX (提取码:2db4)

import java.awt.Cursor;
import java.awt.Font;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;

public class moleAttack extends JFrame implements ActionListener, MouseListener {
	private String strDir = "./image/moleAttackImage/"; // 图片所在的路径
	JLabel jlbMole, HitNumber, appearNumber, gradeNumber;// 图片标签
	Timer timer; // 定时器
	Random random; // 随机数
	int delay = 1000;
	int hit = 0, apper = 0, grade = 0; // 分别是打中次数、出现次数、等级

	public moleAttack() {
		this.setTitle("打地鼠");
		setBack(); // 设置背景
		setGrade(); // 设置打中次数、出现次数、等级
		this.getContentPane().setLayout(null); // 因为要把图片放在自己定的位置,所以布局得取消掉

		// 设置光标
		Toolkit tk = Toolkit.getDefaultToolkit();
		Image image = tk.createImage(strDir + "hammer.png");
		Cursor myCursor = tk.createCustomCursor(image, new Point(10, 10), "xh");
		this.setCursor(myCursor);

		// 设置出现的地鼠
		ImageIcon imageMole = new ImageIcon(strDir + "mole.png");
		jlbMole = new JLabel(imageMole);
		jlbMole.setSize(80, 80);
		this.getContentPane().add(jlbMole);
		jlbMole.setVisible(false);
		this.getContentPane().addMouseListener(this);//对面板进行监听
		jlbMole.addMouseListener(this);// 监听地鼠是否被打到

		// 定时器
		timer = new Timer(delay, this);
		timer.start();

		random = new Random();

		this.setLocation(200, 200);
		this.setSize(438, 375);
		this.setResizable(false);
		this.setVisible(true);
	}

	// 设置背景
	private void setBack() {
		((JPanel) (this.getContentPane())).setOpaque(false);// 使getContentPane()透明
		ImageIcon bgImage = new ImageIcon(strDir + "backGround.jpg");
		JLabel bgLabel = new JLabel(bgImage);
		bgLabel.setBounds(0, 0, bgImage.getIconWidth(), bgImage.getIconHeight());
		this.getLayeredPane().add(bgLabel, new Integer(Integer.MIN_VALUE));// 这里需要把背景图片的优先级调到最低,才能使别的图片在其上面显示

	}

	// 设置打中次数、出现次数、等级
	private void setGrade() {
		// 设置出现次数
		ImageIcon imageNumber = new ImageIcon(strDir + "chuxiancishu.png");
		JLabel Number = new JLabel(imageNumber);
		Number.setSize(200, 50);
		Number.setLocation(-30, 10);
		this.getContentPane().add(Number);
		// 显示数据
		appearNumber = new JLabel();
		appearNumber.setText("" + apper);
		appearNumber.setLocation(122, 10);
		appearNumber.setFont(new Font("宋体", Font.BOLD, 19));
		appearNumber.setSize(50, 50);
		this.getContentPane().add(appearNumber);

		// 设置击中次数
		ImageIcon imageHitTime = new ImageIcon(strDir + "dazhongcishu.png");
		JLabel HitTime = new JLabel(imageHitTime);
		HitTime.setSize(200, 50);
		HitTime.setLocation(105, 10);
		this.getContentPane().add(HitTime);

		// 显示数据
		HitNumber = new JLabel();
		HitNumber.setText("" + hit);
		HitNumber.setLocation(260, 10);
		HitNumber.setFont(new Font("宋体", Font.BOLD, 19));
		HitNumber.setSize(50, 50);
		this.getContentPane().add(HitNumber);

		// 实置当前等级
		ImageIcon imageGrade = new ImageIcon(strDir + "dangqiandengji.png");
		JLabel Grade = new JLabel(imageGrade);
		Grade.setSize(200, 50);
		Grade.setLocation(245, 10);
		this.getContentPane().add(Grade);

		// 显示数据
		gradeNumber = new JLabel();
		gradeNumber.setText("" + grade);
		gradeNumber.setLocation(402, 10);
		gradeNumber.setFont(new Font("宋体", Font.BOLD, 19));
		gradeNumber.setSize(50, 50);
		this.getContentPane().add(gradeNumber);
	}

	public static void main(String[] args) {
		new moleAttack();
	}

	@Override
	public void actionPerformed(ActionEvent e) {

		appearNumber.setText("" + (++apper));//每出现一次地鼠,出现次数加一

		//每出现十次地鼠,等级加一(出现频率变快)
		if (apper % 10 == 0) {
			gradeNumber.setText("" + (++grade));
			timer.setDelay((int) (delay * 0.9));
		}
		
		//防止大众后不变会原来的样子
		ImageIcon imagetIconHit = new ImageIcon(strDir + "mole.png");
		jlbMole.setIcon(imagetIconHit);
		jlbMole.setVisible(true);
		
		//随机出现地鼠的位置
		int r = random.nextInt(9);
		switch (r + 1) {
		case 1:
			jlbMole.setLocation(54, 63);
			break;
		case 2:
			jlbMole.setLocation(320, 204);
			break;
		case 3:
			jlbMole.setLocation(180, 204);
			break;
		case 4:
			jlbMole.setLocation(45, 203);
			break;
		case 5:
			jlbMole.setLocation(295, 133);
			break;
		case 6:
			jlbMole.setLocation(160, 133);
			break;
		case 7:
			jlbMole.setLocation(20, 133);
			break;
		case 8:
			jlbMole.setLocation(310, 63);
			break;
		case 9:
			jlbMole.setLocation(183, 63);
			break;
		}
		jlbMole.setVisible(true);

	}

	@Override
	public void mouseClicked(MouseEvent e) {
	}

	@Override
	public void mousePressed(MouseEvent e) {
		//光标点击地鼠后变成打击的样子
		Toolkit tk = Toolkit.getDefaultToolkit();
		Image image = tk.createImage(strDir + "hit.png");
		Cursor myCursor = tk
				.createCustomCursor(image, new Point(10, 10), "yyy");
		this.setCursor(myCursor);
		
		//判断是否击中
		if (e.getSource() == jlbMole) {
			//改变地鼠的样子
			ImageIcon imagetIconHit = new ImageIcon(strDir + "touch.png");
			jlbMole.setIcon(imagetIconHit);
			jlbMole.setVisible(true);

			HitNumber.setText("" + (++hit));//击中后击中次数加一
		}
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		//光标松开后,回复原来的样子
		Toolkit tk = Toolkit.getDefaultToolkit();
		Image image = tk.createImage(strDir + "hammer.png");
		Cursor myCursor = tk
				.createCustomCursor(image, new Point(10, 10), "yyy");
		this.setCursor(myCursor);

	}

	@Override
	public void mouseEntered(MouseEvent e) {
	}

	@Override
	public void mouseExited(MouseEvent e) {
	}

}



  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
很抱歉,我无法提供完整的打地鼠Java代码包含图片。但是,我可以为您提供一个简单的示例代码,演示如何使用Java制作一个基本的打地鼠游戏。 ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class WhackAMoleGame extends JFrame { private JButton[] buttons; private int score; public WhackAMoleGame() { setTitle("Whack-A-Mole Game"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new GridLayout(3, 3)); buttons = new JButton[9]; for (int i = 0; i < 9; i++) { buttons[i] = new JButton(); buttons[i].setBackground(Color.GREEN); buttons[i].addActionListener(new ButtonListener()); add(buttons[i]); } pack(); setVisible(true); } private class ButtonListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { JButton button = (JButton) e.getSource(); if (button.getBackground() == Color.GREEN) { score++; button.setBackground(Color.RED); } else if (button.getBackground() == Color.RED) { score--; button.setBackground(Color.GREEN); } setTitle("Whack-A-Mole Game - Score: " + score); } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new WhackAMoleGame(); } }); } } ``` 这个示例代码创建了一个简单的打地鼠游戏窗口,其中有9个按钮代表地鼠洞。当点击按钮时,如果按钮的背景色为绿色,则得分增并将按钮的背景色改为红色;如果按钮的背景色为红色,则得分减少并将按钮的背景色改为绿色。窗口的标题会显示当前的得分。 请注意,这只是一个简单的示例代码,没有包含图片和其他高级功能。如果您需要更复杂的打地鼠游戏,可能需要使用更多的图形库和资源。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值