java小游戏

用java写的拼图小游戏

使用工具-Idea。
一个素材包,一个装主程序的包
主程序就一个本体(GameFrame)和一个测试类(Test)
下面是GameFrame的代码:

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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
package UI;

import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

public class GameFrame extends JFrame implements KeyListener, ActionListener {
int cnt = 0;
int x= 0;
int y = 0;
int[][] arr2 = new int[4][4];
int[][]win = new int[][]{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,0}
};
JMenuItem replayItem = new JMenuItem("重新游戏");
JMenuItem reloginItem = new JMenuItem("重新登陆");
JMenuItem closeItem = new JMenuItem("关闭游戏");

JMenuItem accountItem = new JMenuItem("联系方式");

JMenuItem adapt = new JMenuItem("投喂");

String path = "..\\picture_Game\\src\\image\\images\\";



public GameFrame() {
//初始化界面
initFrame();
//初始化菜单
initJMenubar();

initDate();
//初始化图片
initImage();


this.setVisible(true);

}

private void initImage() {
this.getContentPane().removeAll();
if(victor()){
JLabel winlabel = new JLabel(new ImageIcon("..\\picture_Game\\src\\image\\win.png"));
winlabel.setBounds(203, 283, 197, 73);
this.getContentPane().add(winlabel);
}
JLabel stepcnt = new JLabel("步数:" + cnt);
stepcnt.setBounds(50, 30, 100, 20);
this.getContentPane().add(stepcnt);



for(int i = 0;i < 4;i++){
for(int j = 0;j < 4;j++){
ImageIcon icon = new ImageIcon(path+arr2[i][j] +".jpg");
JLabel label = new JLabel(icon);
label.setBounds(j * 105+83, i * 105+134, icon.getIconWidth(), icon.getIconHeight());
label.setBorder(new BevelBorder(0));
this.getContentPane().add(label);

}
}
ImageIcon background = new ImageIcon("..\\picture_Game\\src\\image\\background.png");
JLabel backgroundLabel = new JLabel(background);
backgroundLabel.setBounds(40, 40, 508, 560);
this.getContentPane().add(backgroundLabel);

this.getContentPane().repaint();
}

private void initDate() {
Random rand = new Random();
int[] arr = new int[16];
for (int i = 0; i < 16; i++) {
arr[i] = rand.nextInt(16);
for(int k = 0;k < i;k++){
if(arr[k] == arr[i]){
i--;
}
}
}

int k = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
arr2[i][j] = arr[k];
k++;
}
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if(arr2[i][j] == 0){
x = j;
y = i;
}
}
}

}

private void initJMenubar() {
JMenuBar menuBar = new JMenuBar();
JMenu function = new JMenu("功能");
JMenu aboutJMenu = new JMenu("关于开发者");
JMenu help = new JMenu("投喂");


function.add(replayItem);
function.add(reloginItem);
function.add(closeItem);

aboutJMenu.add(accountItem);
//绑定事件
replayItem.addActionListener(this);
reloginItem.addActionListener(this);
closeItem.addActionListener(this);
accountItem.addActionListener(this);


help.add(adapt);

menuBar.add(function);
menuBar.add(aboutJMenu);
menuBar.add(help);

this.setJMenuBar(menuBar);
}

private void initFrame() {
this.setSize(603,700);
this.setTitle("拼图游戏");
this.setAlwaysOnTop(true);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setLayout(null);
this.addKeyListener(this);
}

@Override
public void keyTyped(KeyEvent e) {

}

@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if(code == 88){
this.getContentPane().removeAll();
JLabel whole = new JLabel(new ImageIcon(path + "all.png"));


whole.setBounds(83, 134, 420, 420);
this.getContentPane().add(whole);
ImageIcon background = new ImageIcon("..\\picture_Game\\src\\image\\background.png");
JLabel backgroundLabel = new JLabel(background);
backgroundLabel.setBounds(40, 40, 508, 560);
this.getContentPane().add(backgroundLabel);

this.getContentPane().repaint();

}
}

@Override
public void keyReleased(KeyEvent e) {
if(victor()){
return;
}

int code = e.getKeyCode();

if(code == 37||code ==65){
if(x == 3){
return;
}
System.out.println("left");

arr2[y][x] = arr2[y][x+1];
arr2[y][x+1] = 0;
x++;
initImage();
cnt++;
}
else if(code == 38||code == 87){
if(y == 3){
return;
}
System.out.println("up");
arr2[y][x] = arr2[y+1][x];
arr2[y+1][x] = 0;
y++;
initImage();
cnt++;
}
else if(code == 39||code == 68){
if(x == 0){
return;
}
System.out.println("right");

arr2[y][x] = arr2[y][x-1];
arr2[y][x-1] = 0;
x--;
initImage();
cnt++;
}
else if(code == 40||code == 83){

if(y == 0){
return;
}
System.out.println("down");
arr2[y][x] = arr2[y-1][x];
arr2[y-1][x] = 0;
y--;
initImage();
cnt++;
}
else if(code == 88){
initImage();
}
else if(code == 89){
arr2 = new int[][]{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,0}
};
initImage();
}
/*else{
System.out.println(code);
}*/

}
public boolean victor(){
for(int i = 0;i < 4;i++){
for(int j = 0;j < 4;j++){
if(arr2[i][j] != win[i][j]){
return false;
}
}
}
return true;
}

@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source == replayItem){
cnt = 0;
System.out.println("重新游戏");
initDate();
initImage();

}
else if(source == reloginItem){
System.out.println("login");
}
else if(source == closeItem){
System.out.println("close");
System.exit(0);
}
else if(source == accountItem){
System.out.println("accout");
JDialog log = new JDialog();
JLabel label = new JLabel(new ImageIcon("..\\picture_Game\\src\\image\\about.jpg"));
label.setBounds(0, 0, 258, 258);
log.getContentPane().add(label);
log.setSize(344,344);
log.setAlwaysOnTop(true);
log.setLocationRelativeTo(null);
log.setModal(true);
log.setVisible(true);
}
}
}

由于使用Idea写的,所以大部分时间都是一路tab(。

下面是App:

1
2
3
4
5
6
7
8
9
10
11
12
import UI.GameFrame;
import UI.LoginFrame;
import UI.RegisterFrame;

public class App {
public static void main(String[] args) {
//new LoginFrame();
new GameFrame();
//new RegisterFrame();
}
}

因为是在本地运行,所以里面的注册和登录模块我都没写(其实是懒)。

整个项目文件
里面的图片是我在素晴日后日谈里选的。