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