自行改编Java简易配对游戏...(配有注释)

来源:互联网 发布:北京条约 知乎 编辑:程序博客网 时间:2024/04/19 07:01
import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.EventQueue;import java.awt.FlowLayout;import java.awt.Point;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.SwingConstants;import javax.swing.border.LineBorder;public class Matching extends JFrame implements MouseListener,        MouseMotionListener {    private JLabel img[] = new JLabel[5];    private JLabel targets[] = new JLabel[5];    private Point pressPoint; // 鼠标按住时的坐标        public static void main(String args[]) {        EventQueue.invokeLater(new Runnable() {            public void run() {                try {                    Matching frame = new Matching();                    frame.setVisible(true);                }                catch (Exception e) {                    e.printStackTrace();                }            }        });    }        public Matching() {        super();        getContentPane().setLayout(new BorderLayout());        setBounds(100, 100, 536, 401);        setTitle("简易配对游戏");        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        final JPanel imagePanel = new JPanel();        imagePanel.setLayout(null);        imagePanel.setOpaque(false);        setGlassPane(imagePanel);        getGlassPane().setVisible(true);        ImageIcon icon[] = new ImageIcon[5];        icon[0] = new ImageIcon(getClass().getResource("kafei.png"));        icon[1] = new ImageIcon(getClass().getResource("xianshiqi.png"));        icon[2] = new ImageIcon(getClass().getResource("xiyiji.png"));        icon[3] = new ImageIcon(getClass().getResource("yifu.png"));        icon[4] = new ImageIcon(getClass().getResource("zixingche.png"));        final JPanel bottomPanel = new JPanel();        bottomPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 5));        getContentPane().add(bottomPanel, BorderLayout.SOUTH);        for (int i = 0; i < 5; i++) {            img = new JLabel(icon);                // 创建图像标签            img.setSize(50, 50);                        // 设置标签大小            img.setBorder(new LineBorder(Color.GRAY));    // 设置线性边框            int x = (int) (Math.random() * (getWidth() - 50));        // 生成随机坐标            int y = (int) (Math.random() * (getHeight() - 150));            img.setLocation(x, y);        // 设置随机坐标            img.addMouseListener(this);        // 为每个图像标签添加鼠标事件监听器            img.addMouseMotionListener(this);            imagePanel.add(img);            // 添加图像标签到图像面板                        targets = new JLabel();                // 创建匹配位置标签            targets.setOpaque(true);                // 使标签不透明,以设置背景色            targets.setBackground(Color.ORANGE);    // 设置标签背景色            targets.setHorizontalTextPosition(SwingConstants.CENTER);    // 设置文本与图像水平居中            targets.setVerticalTextPosition(SwingConstants.BOTTOM);        // 设置文本显示在图像下方            targets.setPreferredSize(new Dimension(80, 80));        // 设置标签首先大小            targets.setHorizontalAlignment(SwingConstants.CENTER);    // 文字居中对齐            bottomPanel.add(targets);            // 添加标签到底部面板        }        targets[0].setText("咖啡");                    // 设置匹配位置的文本        targets[1].setText("显示器");        targets[2].setText("洗衣机");        targets[3].setText("衣服");        targets[4].setText("自行车");    }        public void mouseClicked(MouseEvent e) {    }        public void mouseEntered(MouseEvent e) {    }        public void mouseExited(MouseEvent e) {    }        public void mousePressed(MouseEvent e) {        pressPoint = e.getPoint();                // 保存拖放图片标签时的起始坐标    }        public void mouseReleased(MouseEvent e) {        if (check()){                    // 如果配对正确            getGlassPane().setVisible(false);            for(int i=0;i<5;i++){            // 遍历所有匹配位置的标签                targets.setText("配对成功");                // 设置正确提示                targets.setIcon(img.getIcon());        // 设置匹配的图标            }        }    }        private boolean check() {        boolean result = true;        for (int i = 0; i < 5; i++) {            Point location = img.getLocationOnScreen(); // 获取每个图像标签的位置            Point seat = targets.getLocationOnScreen(); // 获取每个对应位置的坐标            targets.setBackground(Color.GREEN);                // 设置匹配后的颜色            // 如果配对错误            if (location.x < seat.x || location.y < seat.y                    || location.x > seat.x+80 || location.y > seat.y+80) {                targets.setBackground(Color.ORANGE);            // 回复对应位置的颜色                result= false;                                    // 检测结果为false            }        }        return result;            // 返回检测结果    }        /**     * 鼠标拖动组件时的事件处理方法     */    public void mouseDragged(MouseEvent e) {        JLabel source = (JLabel) e.getSource(); // 获取事件源组件        Point imgPoint = source.getLocation(); // 获取组件坐标        Point point = e.getPoint(); // 获取鼠标坐标        source.setLocation(imgPoint.x + point.x - pressPoint.x, imgPoint.y                + point.y - pressPoint.y); // 设置组件新坐标    }        public void mouseMoved(MouseEvent e) {    }}