-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTrap.java
151 lines (131 loc) · 3.5 KB
/
Trap.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
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
/* Model : トラップの管理を行う(親クラス) */
class Trap {
protected int rowenemy;
protected int colenemy;
protected boolean isFunda;
protected static int mazesize;
protected int direction;
public int id = 0;
// 初期化
public Trap(Maze maze) {
mazesize = maze.getMazesize();
isFunda = false;
do { // トラップの座標をランダムで選ぶ。キャラの目の前に現われたらまずいので、とりあえずキャラより5マス離して生成。
Random rnd = new Random();
rowenemy = rnd.nextInt(mazesize - 3) + 1;
colenemy = rnd.nextInt(mazesize - 3) + 1;
} while (maze.getWall(rowenemy, colenemy) || (rowenemy >= mazesize - 5 && colenemy <= 5));
}
// トラップのx座標を返す
public int getRowTrap() {
return rowenemy;
}
// トラップのy座標を返す
public int getColTrap() {
return colenemy;
}
// 踏んであればtrueを返す
public boolean getFunda() {
return isFunda;
}
// トラップを踏む
public void Fumu() {
isFunda = true;
}
// トラップにIDを振る
public void setId(int id) {
this.id = id;
}
// トラップのIDを返す
public int getId() {
return id;
}
}
/* Model : トラップ(ミラー) */
class Mirror extends Trap {
// トラップ・ミラー(ランダムに動くようになる)
Mirror(Maze maze) {
super(maze);
}
}
/* Model : トラップを迷路上に設置・管理する */
class AllTrap {
private int maxmirror;
private Map<Integer, Mirror> mirrormap;
// コンストラクタ(トラップを生成)
public AllTrap(Maze maze) {
mirrormap = new HashMap<>();
int mode = maze.getMode();
if (mode == 3) {
maxmirror = 8;
} else if (mode == 2) {
maxmirror = 5;
} else if (mode == 1) {
maxmirror = 3;
} else {
maxmirror = 2;
}
for (int i = 0; i < maxmirror; i++) {
boolean overlap = false;
Mirror tempmirror = new Mirror(maze);
if (!mirrormap.isEmpty()) {
for (Mirror a : mirrormap.values()) {
if (tempmirror.getRowTrap() == a.getRowTrap() && tempmirror.getColTrap() == a.getColTrap()) {
overlap = true;
}
}
}
if (!overlap) {
tempmirror.setId(i);
mirrormap.put(i, tempmirror);
} else {
i--;
}
}
}
// ミラーの最大数を返す
public int getMirror_max() {
return maxmirror;
}
// ミラーの位置
public boolean getMirrorPosition(int x, int y) {
for (Mirror a : mirrormap.values()) {
if (a.getRowTrap() == x && a.getColTrap() == y) {
return true;
}
}
return false;
}
// 任意のミラー1つの値(values)を返す
public Mirror getOneMirror(int id) {
return mirrormap.get(id);
}
// ミラーのキーを返す。そこにいなければ-1
public int getMirrorKey(int x, int y) {
int key = -1;
for (Mirror a : mirrormap.values()) {
if (a.getRowTrap() == x && a.getColTrap() == y) {
key = a.getId();
}
}
return key;
}
// 任意のミラーの値(value)を返す
public Mirror getOneMirrorValue(int id) {
return mirrormap.get(id);
}
// ミラーの位置を返す。ミラーを踏んだかどうかまで踏襲
public boolean getMirrorPosition_step(int x, int y) {
int key = getMirrorKey(x, y);
if (key < 0) {
return false;
} else {
Mirror a = getOneMirrorValue(key);
return a.getFunda();
}
}
}