-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRensa.java
More file actions
113 lines (96 loc) · 2.7 KB
/
Rensa.java
File metadata and controls
113 lines (96 loc) · 2.7 KB
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
import java.util.ArrayList;
public class Rensa {
int con[][] = new int[GlobalVal.height][GlobalVal.width];
boolean isDelete = true;
ArrayList<Integer> conList = new ArrayList<>();
public void rensa(boolean print) {
isDelete = true;
GlobalVal.chainNum = 0;
while (isDelete) {
if (print)
print();
drop();
if (print) {
System.out.println("drop");
print();
}
isDelete = false;
int connect = 0;
for (int i1 = 0; i1 < GlobalVal.height; i1++) {
for (int i2 = 0; i2 < GlobalVal.width; i2++) {
if (GlobalVal.p[i1][i2] > 0 && con[i1][i2] == 0) {
connect = checkCon(i1, i2, 1);
for (int i = 0; i < (conList.size() / 2); i++)
con[conList.get(i * 2)][conList.get((i * 2) + 1)] = connect;
conList.clear();
}
}
}
delete();
if (isDelete) {
GlobalVal.chainNum++;
if (print)
System.out.println("連鎖数:" + GlobalVal.chainNum);
}
conReset();
}
}
public int checkCon(int i1, int i2, int connect) {
con[i1][i2] = 1;
conList.add(i1);
conList.add(i2);
// 上方向確認
if (i1 > 1 && GlobalVal.p[i1 - 1][i2] == GlobalVal.p[i1][i2] && con[i1 - 1][i2] == 0)
connect = checkCon(i1 - 1, i2, connect + 1);
// 下方向確認
if (i1 < (GlobalVal.height - 1) && GlobalVal.p[i1 + 1][i2] == GlobalVal.p[i1][i2] && con[i1 + 1][i2] == 0)
connect = checkCon(i1 + 1, i2, connect + 1);
// 左方向確認
if (i2 > 0 && GlobalVal.p[i1][i2 - 1] == GlobalVal.p[i1][i2] && con[i1][i2 - 1] == 0)
connect = checkCon(i1, i2 - 1, connect + 1);
// 右方向確認
if (i2 < (GlobalVal.width - 1) && GlobalVal.p[i1][i2 + 1] == GlobalVal.p[i1][i2] && con[i1][i2 + 1] == 0)
connect = checkCon(i1, i2 + 1, connect + 1);
return connect;
}
public void delete() {
for (int i1 = 0; i1 < GlobalVal.height; i1++) {
for (int i2 = 0; i2 < GlobalVal.width; i2++) {
if (con[i1][i2] > 3) {
GlobalVal.p[i1][i2] = 0;
isDelete = true;
}
}
}
}
public void drop() {
boolean drop = false;
for (int i2 = 0; i2 < GlobalVal.width; i2++) {
for (int i1 = 0; i1 < (GlobalVal.height - 1); i1++) {
if (GlobalVal.p[i1][i2] != 0 && GlobalVal.p[i1 + 1][i2] == 0) {
GlobalVal.p[i1 + 1][i2] = GlobalVal.p[i1][i2];
GlobalVal.p[i1][i2] = 0;
drop = true;
}
if (i1 == (GlobalVal.height - 2) && drop) {
drop = false;
i1 = -1;
}
}
}
}
public void conReset() {
for (int i1 = 0; i1 < 12; i1++) {
for (int i2 = 0; i2 < 6; i2++)
con[i1][i2] = 0;
}
}
public void print() {
for (int i1 = 0; i1 < GlobalVal.height; i1++) {
for (int i2 = 0; i2 < GlobalVal.width; i2++)
System.out.print(GlobalVal.p[i1][i2] + " ");
System.out.println();
}
System.out.println();
}
}