- import java.awt.Cursor;
- 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.JMenu;
- import javax.swing.JMenuBar;
- import javax.swing.JMenuItem;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- import javax.swing.Timer;
-
-
- public class HitMouse extends JFrame implements ActionListener,MouseListener{
- boolean isOver=false;//设置标记,游戏是否结束
- private String dir="./images/";//图片目录,当前工程下
- JLabel jlbMouse;//地鼠
- Timer timer;//时间定时器
- Random random;//随机数对象,即生成地鼠的位置
- int delay=1100;//延迟时间
- Toolkit tk;
- Image image;
- Cursor myCursor;
- JLabel showNum,currentGrade,hitNum;
- int showNumber=0,hitNumber=0,currentGrades=1;
-
- public HitMouse(){
- super("打地鼠");
- this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- this.setSize(449, 395);
- this.setLocationRelativeTo(null);//设置窗口在屏幕中心
- setbackground();//设置背景
- this.getContentPane().setLayout(null);//设置框架布局模式为空,只有这样,才能知道图片的真正位置
- //设置鼠标为锤子图片
- tk = Toolkit.getDefaultToolkit();
- image = tk.createImage(dir+"chui1.png");
- myCursor = tk.createCustomCursor(image, new Point(10,10), "xxx");
- this.setCursor(myCursor);
-
- setMessage();//设置一些提示信息
- //在背景图片的基础上设置地鼠图片
- ImageIcon imageMouse = new ImageIcon(dir+"dishu.png");
- jlbMouse = new JLabel(imageMouse);
- jlbMouse.setSize(80,80);
- this.getContentPane().add(jlbMouse);
- jlbMouse.setVisible(false);
- jlbMouse.addMouseListener(this);//添加鼠标监听
- //定时器
- timer = new Timer(delay,this);
- random = new Random();
- timer.start();
-
- addMenu();//添加菜单
-
- this.setResizable(false);//设置窗口大小不能改变
- this.setVisible(true);
- }
-
- private void addMenu() {
- JMenuBar menubar = new JMenuBar();
- this.setJMenuBar(menubar);
- JMenu game = new JMenu("游戏");
- JMenuItem jitemNew = new JMenuItem("新游戏");
- jitemNew.setActionCommand("new");
- jitemNew.addActionListener(this);
- JMenuItem jitemPause = new JMenuItem("暂停");
- jitemPause.setActionCommand("pause");
- jitemPause.addActionListener(this);
- JMenuItem jitemExit = new JMenuItem("退出");
- jitemExit.setActionCommand("exit");
- jitemExit.addActionListener(this);
- game.add(jitemNew);
- game.add(jitemPause);
- game.addSeparator();//菜单里设置分隔线
- game.add(jitemExit);
- menubar.add(game);
- }
-
- private void setbackground() {
- ((JPanel)(this.getContentPane())).setOpaque(false);//如果为 true,则该组件绘制其边界内的所有像素。否则该组件可能不绘制部分或所有像素,从而允许其底层像素透视出来。
- ImageIcon bgImage = new ImageIcon("images/beijing.jpg");
- JLabel bgLabel = new JLabel(bgImage);
- bgLabel.setBounds(0, 25, bgImage.getIconWidth(), bgImage.getIconHeight());
- this.getLayeredPane().add(bgLabel, new Integer(Integer.MIN_VALUE));//设置背景图片的层次最低
-
- }
-
- private void setMessage() {
- ImageIcon showNumb = new ImageIcon(dir+"chuxiancishu.png");
- JLabel showLabel = new JLabel(showNumb);
- showLabel.setBounds(8, 8, 92, 80);
- this.getContentPane().add(showLabel);
- showNum = new JLabel("0");
- showNum.setBounds(110, 8, 92, 80);
- this.getContentPane().add(showNum);
-
- ImageIcon hitNumb = new ImageIcon(dir+"chuxiancishu.png");
- JLabel hitLabel = new JLabel(hitNumb);
- hitLabel.setBounds(148, 8, 92, 80);
- this.getContentPane().add(hitLabel);
- hitNum = new JLabel("0");
- hitNum.setBounds(251, 8, 92, 80);
- this.getContentPane().add(hitNum);
-
- ImageIcon grade = new ImageIcon(dir+"dangqiandengji.png");
- JLabel gradeLabel = new JLabel(grade);
- gradeLabel.setBounds(288, 8, 92, 80);
- this.getContentPane().add(gradeLabel);
- currentGrade = new JLabel("1");
- currentGrade.setBounds(391, 8, 92, 80);
- this.getContentPane().add(currentGrade);
- }
-
-
- public static void main(String[] args) {
- new HitMouse();
- }
-
- public void actionPerformed(ActionEvent e) {
- //对菜单项注册事件监听
- if(e.getSource() instanceof JMenuItem){
- menuItemFun(e);
- }
-
- int ran=random.nextInt(9);//随机生成一个0~9(不包括9)的随机数
- ImageIcon imageMouse = new ImageIcon(dir+"dishu.png");//保证每次随机生成的地鼠图片都是为没被打时的图片
- jlbMouse.setIcon(imageMouse);
- switch(ran){
- case 0:jlbMouse.setLocation(55, 63);break;
- case 1:jlbMouse.setLocation(321, 204);break;
- case 2:jlbMouse.setLocation(184, 204);break;
- case 3:jlbMouse.setLocation(47, 203);break;
- case 4:jlbMouse.setLocation(297, 133);break;
- case 5:jlbMouse.setLocation(161, 133);break;
- case 6:jlbMouse.setLocation(21, 133);break;
- case 7:jlbMouse.setLocation(310, 63);break;
- case 8:jlbMouse.setLocation(185, 63);break;
- }
-
- jlbMouse.setVisible(true);
-
- showNumber++;
- showNum.setText(""+showNumber);
-
- if( !gamePlan() ){//判断游戏是否结束,并显示游戏进程
- timer.stop();
- }
-
- }
- //监听菜单功能功能
- private void menuItemFun(ActionEvent e) {
- if (e.getActionCommand().equalsIgnoreCase("new")) {//新游戏
- timer.stop();
- showNumber=0;
- hitNumber=0;
- currentGrades=1;
- delay=1000;
- isOver=false;
- showNum.setText(""+showNumber);
- hitNum.setText(""+hitNumber);
- currentGrade.setText(""+currentGrades);
- timer = new Timer(delay,this);
- timer.start();
- }
- if (e.getActionCommand().equalsIgnoreCase("exit")) {//退出
- System.exit(EXIT_ON_CLOSE);
- }
-
- if (e.getActionCommand().equalsIgnoreCase("pause")) {//暂停
- timer.stop();
- JOptionPane.showMessageDialog(this, "继续请按“确定”");
- timer.start();
- }
- }
-
- private boolean gamePlan() {
- if(showNumber-hitNumber > 8){
- JOptionPane.showMessageDialog(this, "Game Over !");
- isOver=true;
- return false;
- }
- if(hitNumber > 5){
- hitNumber=0;
- showNumber=0;
- currentGrades++;
- if(delay>100){
- delay-=50;
- }else if(delay>=500){
- delay=500;
- }
- timer.setDelay(delay);
- hitNum.setText(""+hitNumber);
- showNum.setText(""+showNumber);
- currentGrade.setText(""+currentGrades);
- }
- return true;
- }
-
- public void mouseClicked(MouseEvent e) {
-
- }
-
- public void mousePressed(MouseEvent e) {
- if(isOver){
- return ;
- }
- image = tk.createImage(dir+"chui2.png");
- myCursor = tk.createCustomCursor(image, new Point(10,10), "xxx");
- this.setCursor(myCursor);//鼠标按下时,鼠标显示打下去的图片,模拟打的动作
- //如果打中地鼠,则地鼠换成被打中的图片,模拟地鼠被打
- if(e.getSource()==jlbMouse){
- ImageIcon imageIconHit = new ImageIcon(dir+"datou.png");
- jlbMouse.setIcon(imageIconHit);
- jlbMouse.setVisible(true);
- }
-
- hitNumber++;
- hitNum.setText(""+hitNumber);
- }
-
- public void mouseReleased(MouseEvent e) {
- if(isOver){
- return ;
- }
- //当鼠标放松以后,鼠标变回原来没按下时的图片
- image = tk.createImage(dir+"chui1.png");
- myCursor = tk.createCustomCursor(image, new Point(10,10), "xxx");
- this.setCursor(myCursor);
- }
-
- public void mouseEntered(MouseEvent e) {
-
- }
-
- public void mouseExited(MouseEvent e) {
-
- }
-
-
- }
复制代码
|