java界面编程学习笔记:打地鼠游戏

1.简单打地鼠:

主要思路:设置好背景,开一个产生地鼠的线程,利用mouseClicked监听鼠标的点击,当鼠标单击地鼠时,地鼠隐藏。

代码:


package Chapter12;

import java.awt.BorderLayout;
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;

public class Demo1 extends JFrame{


	//打地鼠
	JLabel background;
	JLabel target[] = new JLabel[8];
	String location[] = {"235,670","420,750","530,838","530,560","550,630","800,750","720,520","850,630"};
	boolean isOk = false;
	JLabel lable,lable_1;
	JPanel imgPanel;
	//设置打中的次数
	int count = 0,NUM = 10, t = 0;
	public Demo10(){
		setTitle("打地鼠");
		setBounds(100, 100, 500, 500);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ImageIcon icon = new ImageIcon(getClass().getResource("background1.jpg"));
		background = new JLabel();
		background.setIcon(icon);
		background.setSize(icon.getIconWidth(), icon.getIconHeight());

		JPanel panel_1 = new JPanel();
		panel_1.setLayout(null);
		panel_1.setOpaque(false);
		
		getContentPane().add(background);
		
		final ImageIcon img = new ImageIcon(getClass().getResource("mouse.png"));
	    new Thread(new Runnable() {
			//设置游戏时间
             @Override
			public void run() {
            //设置打地鼠的次数
            for(int i=0;i<NUM;i++){
				try {
					int n = new Random().nextInt(8);
					System.out.println(n);
					String[] seat = location[n].split(",");
					int x = Integer.parseInt(seat[0]);
					int y = Integer.parseInt(seat[1]);
					target[n] = new JLabel(img);
					target[n].setSize(x,y);
					imgPanel = new JPanel();

					imgPanel.setLayout(null);
					imgPanel.setOpaque(false);
					
					imgPanel.add(target[n]);
					target[n].addMouseListener(new MouseListener() {
						
						@Override
						public void mouseReleased(MouseEvent e) {
							// TODO Auto-generated method stub
							
						}
						
						@Override
						public void mousePressed(MouseEvent e) {
							// TODO Auto-generated method stub
							
						}
						
						@Override
						public void mouseExited(MouseEvent e) {
							// TODO Auto-generated method stub
							
						}
						
						@Override
						public void mouseEntered(MouseEvent e) {
							// TODO Auto-generated method stub
							
						}
						
						@Override
						public void mouseClicked(MouseEvent e) {
							isOk = true;
							count++;
							getGlassPane().setVisible(false);
						}
					});
					lable_1 = new JLabel("打中地鼠的次数:"+count);
					lable_1.setSize(200, 50);
					imgPanel.add(lable_1);
					setGlassPane(imgPanel);
					getGlassPane().setVisible(true);
					Thread.sleep(1000);
					if(!isOk){//如果没有点击到,则移除该组件
						getGlassPane().setVisible(false);
					}
				} catch (InterruptedException e) {
				}
				isOk = false;
            	 }
            System.out.println("打中老鼠的次数:"+count);
			}//run
		}).start();
		}
	public static void main(String[] args) {
		Demo1 demo = new Demo1();
		demo.setVisible(true);
	}
}



李老师所写:

思路:当点击地鼠时,将标签图片置为null,另开一个产生地鼠的线程,随机产生一个下标得到一个地鼠位置,如果为null,则设置地鼠图片.

代码:


package Chapter12;

import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

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

public class Demo11 extends JFrame implements Runnable{

	//打地鼠
	private ImageIcon imgMouse;
	private JLabel[] mouses;
	public Demo2(){
		setTitle("简易打地鼠游戏");
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//初始化背景图片
		ImageIcon img = new ImageIcon(getClass().getResource("background1.jpg"));
		//初始化地鼠图片
		imgMouse = new ImageIcon(getClass().getResource("mouse.png"));
		mouses = new JLabel[6];
		for(int i=0;i<6;i++){
			mouses[i] = new JLabel();
			//设置大小
			mouses[i].setSize(imgMouse.getIconWidth(), imgMouse.getIconHeight());
			mouses[i].addMouseListener(new MouseAdapter() {
				@Override
				public void mouseClicked(MouseEvent e){
					Object source = e.getSource();//获得单击的事件源
					if(source instanceof JLabel){
						JLabel mouse = (JLabel) source;//将事件源强转为JLabel类型
						mouse.setIcon(null);
					}		
				}
			});
			getContentPane().add(mouses[i]);//添加显示地鼠的标签到窗体中
		}
		//设置每个标签的位置
		mouses[0].setLocation(253, 300);
		mouses[1].setLocation(333, 250);
		mouses[2].setLocation(388,296);
		mouses[3].setLocation(362,364);
		mouses[4].setLocation(189,353);
		mouses[5].setLocation(240,409);
		
		//创建显示背景的标签
		final JLabel backLabel = new JLabel();
		backLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
		setBounds(100, 100, img.getIconWidth(), img.getIconHeight()+30);
		backLabel.setIcon(img);
		getContentPane().add(backLabel);
	}
	//线程
	public void run(){
		while(true){
			try {
				Thread.sleep(1000);
				int index = (int) (Math.random()*6);
				if(mouses[index].getIcon()==null){
					mouses[index].setIcon(imgMouse);
				}
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Demo2 frame = new Demo2();
					frame.setVisible(true);
					new Thread(frame).start();
				}
				catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

}



  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值