Java---打地鼠

2022/1/8 20:04:33

本文主要是介绍Java---打地鼠,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

今天打卡时写了一个打地鼠游戏:

import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
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 javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.Timer;
import javax.swing.border.BevelBorder;

public class HitMouse extends JFrame implements MouseListener, ActionListener{
    private final String DIR="D:\\IDEA\\DitMouseSuCai";//存储该程序所需背景图片和素材
    private JLabel lbMouse;
    private int delay;
    private Timer timer;
    private JLabel timesShowLabel,timesHitLabel,gradeLabel;
    private int timesShow,timesHit,grade;
    private boolean isHit=false;	//点击地鼠只能一次

    public HitMouse() {
        super("打地鼠");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(200,200,438,375);
        setResizable(false);
        setBak();	//设置背景图片
        setMySetCursor(1);	//设置鼠标  1表示初始状态
        //添加地鼠
        ImageIcon imgMouse=new ImageIcon(DIR+"/dishu.png");
        lbMouse=new JLabel(imgMouse);
        lbMouse.setLocation(100, 100);
        lbMouse.setSize(80, 80);
        getContentPane().add(lbMouse);
        lbMouse.setVisible(false);
        lbMouse.addMouseListener(this);

        //添加定时器,改变地鼠位置
        delay=1000;
        timer=new Timer(delay, this);
        timer.start();
        JPanel panel =new JPanel();
        //边框效果
        panel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
        panel.setPreferredSize(new Dimension(438, 375));
        getContentPane().add(panel);
        panel.setOpaque(false);		//在将面板设置为透明
        //出现次数
        timesShowLabel=new JLabel("0", new ImageIcon(DIR+"/chuxiancishu.png"), SwingConstants.CENTER);
        timesShowLabel.setFont(new Font("幼圆", Font.BOLD, 20));
        timesShowLabel.setSize(146, 40);
        panel.add(timesShowLabel);

        //打中次数
        timesHitLabel = new JLabel("0", new ImageIcon(DIR+"/dazhongcishu.png"), SwingConstants.CENTER);
        timesHitLabel.setFont(new Font("幼圆", Font.BOLD, 20));
        timesHitLabel.setSize(146, 40);
        panel.add(timesHitLabel);

        //等级
        gradeLabel = new JLabel("1", new ImageIcon(DIR+"/dangqiandengji.png"), SwingConstants.CENTER);
        gradeLabel.setFont(new Font("幼圆", Font.BOLD, 20));
        gradeLabel.setSize(146, 40);
        panel.add(gradeLabel);
        setVisible(true);
    }

    private void setBak() {
        ((JPanel)getContentPane()).setOpaque(false);		//设置面板为透明

        JLabel bgLabel=new JLabel(new ImageIcon(DIR+"/beijing.jpg"));
        bgLabel.setBounds(0, 0, bgLabel.getIcon().getIconWidth(), bgLabel.getIcon().getIconHeight());
        //分层技术
        getLayeredPane().add(bgLabel, new Integer(Integer.MIN_VALUE));
    }

    private void setMySetCursor(int i) {
        //设置鼠标 1表示初始状态 2表示锤下状态
        Toolkit toolkit=Toolkit.getDefaultToolkit();
        Image image;
        if(i==1){
            image=toolkit.createImage(DIR+"/chui1.png");
        }else{
            image=toolkit.createImage(DIR+"/chui2.png");
        }
        Cursor cursor=toolkit.createCustomCursor(image, new Point(10, 10), "aa");
        setCursor(cursor);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        int pos=(int) (System.currentTimeMillis()%9);
        System.out.println(pos);
        switch(pos){
            case 0:
                lbMouse.setLocation(56,63);break;
            case 1:
                lbMouse.setLocation(322,204);break;
            case 2:
                lbMouse.setLocation(185,204);break;
            case 3:
                lbMouse.setLocation(48,203);break;
            case 4:
                lbMouse.setLocation(298,133);break;
            case 5:
                lbMouse.setLocation(162,133);break;
            case 6:
                lbMouse.setLocation(22,133);break;
            case 7:
                lbMouse.setLocation(311,63);break;
            case 8:
                lbMouse.setLocation(186,63);
        }

        //每次都要刷新地鼠的图片为未打中
        ImageIcon imageMouse=new ImageIcon(DIR+"/dishu.png");
        lbMouse.setIcon(imageMouse);
        isHit=false;
        lbMouse.setVisible(true);

        //改变出现次数
        timesShow++;
        timesShowLabel.setText(""+timesShow);

        //出现的时候判断游戏是否失败
        if(timesShow>15){
            timer.stop();
            int a=JOptionPane.showConfirmDialog(this, "游戏失败,是否再来一局");
            if(a==JOptionPane.YES_OPTION){
                timesShow=0;
                timesHit=0;
                grade=0;
                delay=1000;
                setMySetCursor(1);
                timesShowLabel.setText(""+timesShow);
                timesHitLabel.setText(""+timesHit);
                gradeLabel.setText(""+grade);
                timer.restart();		//定时器重新启动
            }else{
                System.exit(0);
            }
        }

    }

    @Override
    public void mouseClicked(MouseEvent e) {
    }

    @Override
    public void mousePressed(MouseEvent e) {
        setMySetCursor(2);

        if(e.getSource()==lbMouse && !isHit){
            isHit=true;

            timesHit++;
            timesHitLabel.setText(""+timesHit);

            getToolkit().beep();
            ImageIcon imageDaTou=new ImageIcon(DIR+"/datou.png");
            lbMouse.setIcon(imageDaTou);
            lbMouse.setVisible(true);

            //当击中次数大于8次时游戏升级
            if(timesHit>8){
                delay=delay-50;
                if(delay==50){
                    lbMouse.setVisible(false);
                    timer.stop();
                    int a=JOptionPane.showConfirmDialog(this, "你已经通过所有关卡,是否重新开始一局新的游戏");
                    if(a==JOptionPane.YES_OPTION){
                        grade=0;
                        delay=1000;
                    }
                }
                timer.stop();
                grade++;
                timesShow=0;
                timesHit=0;
                setMySetCursor(1);
                JOptionPane.showConfirmDialog(this, "进入"+grade+"关,加油",
                        "游戏升级!!",JOptionPane.CLOSED_OPTION);
                timesShowLabel.setText(""+timesShow);
                timesHitLabel.setText(""+timesHit);
                gradeLabel.setText(""+grade);
                timer.setDelay(delay);
                timer.start();
            }
        }
    }

    @Override
    public void mouseReleased(MouseEvent e) {
    }


    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e) {
    }

    public static void main(String[] args) {
        new HitMouse();
    }
}

  注:其中添加图片的部分自己选择图片下载并命名,放在自己选好的目录下,将目录地址复制下来修改即可,图片名一定要和后面代码中出现的名称一样,否则识别不了。



这篇关于Java---打地鼠的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程