-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOrganism.java
129 lines (115 loc) · 3.79 KB
/
Organism.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
import javafx.scene.paint.Color;
import java.util.List;
import java.util.Random;
public abstract class Organism {
public final Color color;
public final String name;
protected String announcements;
protected int age;
protected int strength;
protected int initiation;
protected int posX, posY;
protected boolean toDelete;
protected MyField fields[][];
protected Random generator;
protected List organisms;
protected int cooldown;
Organism(MyField fields[][], int str, int init, Color color, String name, List<Organism> organisms) {
this.fields = fields;
announcements = "";
strength = str;
initiation = init;
age = 0;
toDelete = false;
this.color = color;
this.name = name;
generator = new Random();
this.organisms = organisms;
if (setOrganismOnEmptyField()) {
fields[posX][posY].setOrganism(this);
fields[posX][posY].setName(name);
fields[posX][posY].setColor(color);
}
}
Organism(MyField fields[][], int str, int init, Color color, String name, List<Organism> organisms, int posX, int posY) {
this.fields = fields;
strength = str;
initiation = init;
announcements = "";
age = 0;
toDelete = false;
this.color = color;
this.name = name;
generator = new Random();
this.organisms = organisms;
this.posX = posX;
this.posY = posY;
setOnField(posX, posY);
}
Organism(MyField fields[][], List<Organism> organisms, int str, int init, Color color, String name, int posX, int posY, boolean toDelete, int age, int cooldown) {
this.fields = fields;
strength = str;
initiation = init;
announcements = "";
this.age = age;
this.toDelete = toDelete;
this.color = color;
this.name = name;
generator = new Random();
this.organisms = organisms;
this.posX = posX;
this.posY = posY;
this.cooldown = cooldown;
setOnField(posX, posY);
}
abstract void action();
void doTurn() {
if (toDelete)
organisms.remove(this);
else {
announcements = "";
action();
age++;
}
}
abstract int reflectedAttack(Organism opponent);
public void emptyField() {
fields[posX][posY].setEmpty(true);
fields[posX][posY].setName(" ");
fields[posX][posY].setColor(Color.LIGHTGREEN);
fields[posX][posY].setOrganism(null);
}
public void setOnField(int destX, int destY) {
try {
posX = destX;
posY = destY;
fields[destX][destY].setName(name);
fields[destX][destY].setEmpty(false);
fields[destX][destY].setOrganism(this);
fields[destX][destY].setColor(color);
} catch (IndexOutOfBoundsException exc) {
exc.printStackTrace();
}
}
public boolean isFieldEmpty(int x, int y) {
return fields[x][y].isEmpty();
}
public boolean setOrganismOnEmptyField() {
Random generator = new Random();
int x = generator.nextInt(fields.length);
int y = generator.nextInt(fields[0].length);
for (int i = 0; i < fields.length; i++) {
for (int j = 0; j < fields[0].length; j++) {
if (isFieldEmpty((x + i) % fields.length, (y + j) % fields[0].length)) {
posY = (y + j) % fields[0].length;
posX = (x + i) % fields.length;
return true;
}
}
}
return false;
}
public boolean isInsideBoard(int x, int y) {
return x >= 0 && x < fields.length && y >= 0 && y < fields[0].length;
}
}