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(); } } }); } }