summaryrefslogtreecommitdiff
path: root/ws2015/eip/blaetter/07/de/lmu/tcs/Spielfeld.java
diff options
context:
space:
mode:
Diffstat (limited to 'ws2015/eip/blaetter/07/de/lmu/tcs/Spielfeld.java')
-rw-r--r--ws2015/eip/blaetter/07/de/lmu/tcs/Spielfeld.java198
1 files changed, 0 insertions, 198 deletions
diff --git a/ws2015/eip/blaetter/07/de/lmu/tcs/Spielfeld.java b/ws2015/eip/blaetter/07/de/lmu/tcs/Spielfeld.java
deleted file mode 100644
index 7b9ec60..0000000
--- a/ws2015/eip/blaetter/07/de/lmu/tcs/Spielfeld.java
+++ /dev/null
@@ -1,198 +0,0 @@
1package de.lmu.tcs;
2
3import java.util.ArrayList;
4import java.util.Collections;
5
6/**
7 * Model
8 *
9 * Created by jost on 24.11.15.
10 */
11public class Spielfeld {
12
13 private final Zelle[][] feld;
14 private final int max_x; //Breite
15 private final int max_y; //Höhe
16
17 public Spielfeld(int breite, int höhe) {
18 this.max_x = breite;
19 this.max_y = höhe;
20 feld = new Zelle[this.max_x][this.max_y];
21 for (int x=0;x<max_x;x++) {
22 for (int y = 0; y < max_y; y++) {
23 final Position p = new Position(x, y);
24 feld[x][y] = new Zelle(p, Zelle.TOT);
25 }
26 }
27 }
28
29 /**
30 * Liefert Zelle des Spielfelds an einer Position.
31 * @param p Position, der Zelle ausgelesen werden soll
32 * @return Zelle des Spielfelds an dieser Position, falls vorhanden; sonst null.
33 */
34 public Zelle getZelle(Position p) {
35 if (p.getX() >= 0 && p.getX() < max_x && p.getY() >= 0 && p.getY() < max_y) {
36 return feld[p.getX()][p.getY()];
37 } else {
38 return null;
39 }
40 }
41
42 /**
43 * Setzt eine gegebene Zelle ins Spielfeld ein.
44 * Überschreibt vorherige Zelle.
45 *
46 * @param zelle Einzusetzende Zelle
47 * @return Ob die Position der Zelle im Spielfeld enthalten ist (false bedeutuet ungültig).
48 */
49 public boolean setZelle(Zelle zelle) {
50 final Position p = zelle.getPosition();
51 if (p.getX() >= 0 && p.getX() < max_x && p.getY() >= 0 && p.getY() < max_y) {
52 feld[p.getX()][p.getY()] = zelle;
53 return true;
54 } else {
55 return false;
56 }
57 }
58
59 /**
60 * Liefert das gesamte Spielfeld direkt aus;
61 * nicht so schöne, da interne Repräsentierung offenbart wird
62 * und das Array von aussen verändert werden kann! Autsch!
63 *
64 * @return Alle Zellen des Felds im 2D array
65 */
66 public Zelle[][] getFeld() {
67 return feld;
68 }
69
70 /**
71 * BESSERE ALTERNATIVE zu getter-Methode getFeld():
72 * Liefert alle Zellen des Spielfeldes aus. Vorteile:
73 * 1) Interne Repräsentation bleibt versteckt.
74 * 2) Da die Zellen immutable sind, kann hier das
75 * Spielfeld auch nicht woanders manipuliert werden.
76 *
77 * @return Alle Zellen des Spielfeldes als ArrayList
78 */
79 public ArrayList<Zelle> getZellen() {
80 ArrayList<Zelle> result = new ArrayList<>(max_x*max_y);
81 for (int x=0;x<max_x;x++) {
82 for (int y = 0; y < max_y; y++) {
83 result.add(feld[x][y]);
84 }
85 }
86
87 return result;
88 }
89
90 /**
91 * Genau wie getZellen, nur mit echtem Array anstatt ArrayList.
92 * Vorteile bleiben erhalten!
93 *
94 * @return Alle Zellen des Spielfeldes als Array
95 */
96 public Zelle[] getZellenAry() {
97 Zelle[] result = new Zelle[max_x*max_y];
98 int i = 0;
99 for (int x=0;x<max_x;x++) {
100 for (int y = 0; y < max_y; y++) {
101 result[i] = feld[x][y];
102 i++;
103 }
104 }
105 return result;
106 }
107
108 /**
109 * Berechnet alle Nachbarn einer Zelle.
110 *
111 * @param zelle deren Nachbarn berechnet werden sollen
112 * @return alle Nachbarn von {@code zelle}, Anzahl Nachbarn variabel
113 */
114 public ArrayList<Zelle> getNachbarn(Zelle zelle) {
115 ArrayList<Zelle> result = new ArrayList<>();
116 Position pos = zelle.getPosition();
117 for (int x=-1; x<=1; x++) {
118 for (int y = -1; y <= 1; y++) {
119 if (x!=0 || y!=0) {
120 Zelle nachbar = this.getZelle(new Position(pos.getX() + x, pos.getY() + y));
121 if (nachbar != null) {
122 result.add(nachbar);
123 }
124 }
125 }
126 }
127 return result;
128 }
129
130 /**
131 * Berechnet alle Nachbarn einer Zelle.
132 * Variante von getNachbar mit Array anstatt ArrayList
133 *
134 * @param zelle deren Nachbarn berechnet werden sollen
135 * @return alle Nachbarn von {@code zelle}, Anzahl Nachbarn variabel
136 */
137 public Zelle[] getNachbarnAry(Zelle zelle) {
138 Position pos = zelle.getPosition();
139 int minx = Math.max(pos.getX() - 1, 0);
140 int maxx = Math.min(pos.getX() + 1, this.max_x);
141 int miny = Math.max(pos.getY() - 1, 0);
142 int maxy = Math.min(pos.getY() + 1, this.max_y);
143 Zelle[] result = new Zelle[maxx - minx * maxy - miny];
144 int i = 0;
145 for (int x = minx; x <= maxx; x++) {
146 for (int y = miny; y <= maxy; y++) {
147 if (x!=0 || y!=0) {
148 result[i] = feld[x][y];
149 i++;
150 }
151 }
152 }
153 return result;
154 }
155
156 /**
157 * Berechnet alle Nachbarn einer Zelle auf Wrap-Around Spielfeld..
158 *
159 * @param zelle deren Nachbarn berechnet werden sollen
160 * @return alle Nachbarn von {@code zelle}, Anzahl Nachbarn variabel
161 */
162 public ArrayList<Zelle> getNachbarnWrapped(Zelle zelle) {
163 ArrayList<Zelle> result = new ArrayList<Zelle>(8);
164 Position pos = zelle.getPosition();
165 for (int x = -1; x <= 1; x++) {
166 for (int y = -1; y <= 1; y++) {
167 if (x!=0 || y!=0) {
168 Zelle z = getZelle(new Position((pos.getX() + x + max_x )% max_x, (pos.getY() + y + max_y) % max_y));
169 result.add(z);
170 }
171 }
172 }
173 return result;
174 }
175
176 /**
177 * Berechnet alle Nachbarn einer Zelle auf Warap-Around Spielfeld.
178 * Variante von getNachbarWrapped mit Array anstatt ArrayList
179 *
180 * @param zelle deren Nachbarn berechnet werden sollen
181 * @return alle Nachbarn von {@code zelle}, Anzahl Nachbarn variabel
182 */
183 public Zelle[] getNachbarnAryWrapped(Zelle zelle) {
184 Zelle[] result = new Zelle[8];
185 Position pos = zelle.getPosition();
186 int i = 0;
187 for (int x = -1; x <= 1; x++) {
188 for (int y = -1; y <= 1; y++) {
189 if (x!=0 || y!=0) {
190 Zelle z = getZelle(new Position((pos.getX() + x + max_x )% max_x, (pos.getY() + y + max_y) % max_y));
191 result[i] = z;
192 i++;
193 }
194 }
195 }
196 return result;
197 }
198}