代码如下:
package PalyMouse;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class Mouse extends JFrame implements Runnable{
//积分
private int num = 0;
//背景图片
private JLabel back;
//九个老鼠
private JLabel[] mouses;
//图片
private ImageIcon imageMouse;
//积分本
private JLabel jtf;
public Mouse()
{
//不能手动修改大小
this.setResizable(false);
//this.getContentPane().setLayout(null);
//设置标题
this.setTitle("打地鼠游戏");
this.setVisible(true);
//设置位置和大小
this.setBounds(300, 100, 800, 480);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//初始化背景
back = new JLabel();
ImageIcon icon = new ImageIcon(this.getClass().getResource("1.jpg"));
//把图片添加到back
back.setIcon(icon);
//设置背景图片
back.setBounds(0,0,800,480);
//初始化积分板
jtf = new JLabel();
jtf.setBounds(500,2, 300, 30);
jtf.setFont(new Font("", 20, 20));
jtf.setForeground(Color.BLACK);
jtf.setText("您的得分是: ");
//初始化老鼠
imageMouse = new ImageIcon(this.getClass().getResource("2.png"));
mouses = new JLabel[6];
for (int i = 0; i < 6; i++)
{
mouses[i] = new JLabel();
mouses[i].setSize(imageMouse.getIconWidth(), imageMouse.getIconHeight());
//mouses[i].setIcon(imageMouse);
mouses[i].addMouseListener(new MouseListener()
{
@Override
public void mouseReleased(MouseEvent e)
{
}
@Override
public void mousePressed(MouseEvent e)
{
}
@Override
public void mouseExited(MouseEvent e)
{
}
@Override
public void mouseEntered(MouseEvent e)
{
}
@Override
public void mouseClicked(MouseEvent e)
{
Object object = e.getSource();
if(object instanceof JLabel)
{
JLabel label = (JLabel)object;
if(label.getIcon() != null)
{
num++;
jtf.setText("您的得分是:" + num + "分");
}
label.setIcon(null);
}
}
});
this.add(mouses[i]);
}
//设置鼠标
this.setCursor(Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage("src/PalyMouse/3.png"), new Point(), "myself"));
//设置老鼠坐标
mouses[0].setLocation(80,30);
mouses[1].setLocation(320,30);
mouses[2].setLocation(560,30);
mouses[3].setLocation(80,270);
mouses[4].setLocation(320,270);
mouses[5].setLocation(560,270);
//添加到JFrame
this.add(jtf);
this.add(back);
}
//闪烁
@Override
public void run()
{
while(true)
{
try
{
Thread.sleep(500);
int index = (int)(Math.random()*10);
if(index >= 6)
{
index = 3;
}
//判断是否点击
if(mouses[index].getIcon() == null)
{
mouses[index].setIcon(imageMouse);
Thread.sleep(800);
if(mouses[index].isShowing())
{
mouses[index].setIcon(null);
}
}
}
catch (InterruptedException e)
{
System.out.println("出错啦");
}
}
}
public static void main(String[] args)
{
Mouse m = new Mouse();
Thread t1 = new Thread(m);
t1.start();
}
}
目前只会Java基础,也就只能用swing来写第一个小项目了(感觉安卓的监听机制要比swing强很多)
主要以用到的知识:swing编程,监听机制,多线程编程。
项目难点在于怎么制造出闪烁的特点:
这里我采用多线程中的sleep方法,如果未被击中,则小老鼠一直存在,如果击中,将代表小老鼠的Jlable设置位null
那么,如何判断是否击中的是老鼠呢?
swing监听机制中,点击鼠标会返回一个object对象,只需要判断对象是否属于JLable就行
代码如下:
@Override
public void mouseClicked(MouseEvent e)
{
Object object = e.getSource();
if(object instanceof JLabel)
{
JLabel label = (JLabel)object;
if(label.getIcon() != null)
{
num++;
jtf.setText("您的得分是:" + num + "分");
}
label.setIcon(null);
}
}