服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - java实现简易连连看小游戏

java实现简易连连看小游戏

2022-12-07 14:47Aromatic tree Java教程

这篇文章主要为大家详细介绍了java实现简易连连看小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java实现简易连连看小游戏的具体代码,供大家参考,具体内容如下

java实现简易连连看小游戏

新手上路,分享一下

直接上代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
package linkgame;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
 
public class LinkGame extends JFrame implements Runnable{
    private JPanel panel_01,panel_02;
    private String first,finnal;
    private JLabel time;
    private boolean isClick=true;
    private int x1,y1,x2,y2;
    Icon temp;
    JButton firstbutton=new JButton();
    JButton secondbutton=new JButton();
 
 
    public LinkGame(){
        setTitle("连连看");
        setBounds(300,100,600,450);
        panel_01=new JPanel(new GridLayout(6,6));
        panel_02=new JPanel(new BorderLayout());
 
 
        close();
        rightPanel();
        leftPanel();
        add(panel_01,BorderLayout.CENTER);
        add(panel_02,BorderLayout.WEST);
        setVisible(true);
        setResizable(false);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        //run();
    }
 
//关闭应用询问
    private void close(){
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                int result = JOptionPane.showConfirmDialog(panel_01, "是否确认退出?", "确认",
                        JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);
                if(result == JOptionPane.OK_OPTION){
                    System.exit(0);
                }
            }
        });
    }
 
    //左侧面板
    private void rightPanel(){
        File img=new File("src/images");//打开图片文件夹
        String[] list=img.list();//获取文件中的图片名称并存入集合
        Set<String> s=new HashSet<>();//构建无序集合
        Set<String> s2=new TreeSet<>();
        boolean bol=false;
        //把18个图片存入set集合中以备生成界面
        for(int l=0;l<18;l++){
            s.add(list[l]);
            s2.add(list[l]);
        }
        for(int i=0,count=0;i<6;i++){
            for(int j=0;j<6;j++){
                String[] strs01=s.toArray(new String[0]);
                String[] strs02=s2.toArray(new String[0]);
                if(count>17){
                    count=0;
                    bol=true;
                }
                JButton button=new JButton();//新建按钮
                if(bol){
                    ImageIcon imgs=new ImageIcon("src/images/"+strs02[count]);
                    button.setIcon(imgs);
                }else{
                    ImageIcon imgs=new ImageIcon("src/images/"+strs01[count]);
                    button.setIcon(imgs);
                }
                button.addActionListener(new click());//添加按钮的监听事件
                panel_01.add(button);//把按钮添加到左面板
                count++;
            }
        }
    }
    //有面板
    private void leftPanel(){
        ImageIcon icon=new ImageIcon("src/images/leftback.png");//连连看字
        JLabel label=new JLabel(icon);
        time=new JLabel("剩余时间30秒");//倒计时计时初始化
        time.setFont(new Font("楷体",Font.PLAIN,20));//设置字体样式
        panel_02.add(label,BorderLayout.NORTH);
        panel_02.add(time,BorderLayout.SOUTH);
    }
    //倒计时方法
    public void run() {
        int  count=30;
        while (count>=0) {
            try {
                time.setText("剩余时间"+count + "秒");
                Thread.sleep(1000);   //暂停1秒
                count--;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if(count==0){
                JOptionPane.showMessageDialog(panel_01,"时间用完,已结束");
                System.exit(0);
            }
        }
 
 
    }
    //按钮点击内部类
    class click implements ActionListener{
 
        ImageIcon img=new ImageIcon("src/images/Img319981730_null.jpg");//空白图片
        @Override
        public void actionPerformed(ActionEvent e) {
            //获取点击按钮的行和列
            if(isClick){
                firstbutton=((JButton)e.getSource());
                first=firstbutton.getIcon().toString();//获取点击图片名称
                temp=firstbutton.getIcon();
                x1=firstbutton.getLocation().x;//获取点击图片横纵坐标
                y1=firstbutton.getLocation().y;
                firstbutton.setIcon(img);//点击后图片设置为空白图片
                isClick=false;
            }else {
                secondbutton=((JButton)e.getSource());
                finnal=secondbutton.getIcon().toString();//获取第二次点击图片名称
                x2=secondbutton.getLocation().x;//获取点击图片横纵坐标
                y2=secondbutton.getLocation().y;
                isClick=true;
                win();//判断是否消除或者胜利方法
            }
        }
 
        private void win(){
            boolean bol=first.equals(finnal);//判断两次点击的图片名字是否相同
            boolean bol2=!((x1==x2)&&(y1==y2));//判断位置是否不一样,防止点击两张相同的图片
            if(bol&&bol2){
                firstbutton.setIcon(img);
                secondbutton.setIcon(img);
                String str02="src/images/Img319981730_null.jpg";//把第二张图片改成空白图片
                Component[] bts=panel_01.getComponents();//获取全部组件
                int count=0;
                for(int i=0;i<bts.length;i++){
                    JButton btn=(JButton)bts[i];
                    String str01=btn.getIcon().toString();
                    if(str01.equals(str02)){//判断组件名称等于空白图片名称的个数
                        count++;
                        if(count==35){
                            //如果到达全部图片则游戏胜利
                            JOptionPane.showMessageDialog(panel_01,"你赢了");
                            System.exit(0);
                        }
                    }
                }
            }else{
                firstbutton.setIcon(temp);//设置第一张图片还原
            }
        }
 
    }
}

然后创建主类运行即可

?
1
2
3
4
5
6
7
package linkgame;
 
public class Play {
    public static void main(String[] args) {
        LinkGame linkGame=new LinkGame();
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/zeor_jokerman/article/details/106617038

延伸 · 阅读

精彩推荐