本文实例为大家分享了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