blob: 12f2a0ee52cb0e54aeb0197b78eae944b1fc4cdc (
plain)
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
|
package de.lmu.tcs;
import java.util.ArrayList;
/**
* Controller
*
* Created by jost on 24.11.15.
*/
public class Spieler {
private final Spielfeld spiel;
private final Ansicht ansicht;
public Spieler() {
this.spiel = new Spielfeld(Param.SPIEL_BREITE,Param.SPIEL_HÖHE);
this.ansicht = new Ansicht( Param.SPIEL_BREITE,Param.SPIEL_HÖHE,Param.SKALIERUNG);
ansicht.zeichneSpielfeld(spiel.getFeld());
ansicht.setText("Außerhalb Spielfeld klicken zum Beenden");
// Benutzer setzt Anfangspostionen
boolean nichtzuende = true;
do {
Position p = ansicht.getClick();
Zelle zelle = new Zelle(p, Zelle.LEBENDIG);
nichtzuende = spiel.setZelle(zelle);
if (nichtzuende) {
ansicht.zeichenZelle(zelle);
}
} while (nichtzuende);
}
public void spielDurchführen() {
for (int runde=0; runde < Param.RUNDENZAHL; runde++){
this.rundeDurchführen();
ansicht.setText("Runde "+runde);
ansicht.sleep(Param.RUNDENZEIT);
}
}
public void rundeDurchführen() {
ArrayList<Zelle> änderungen = new ArrayList<Zelle>();
// Änderungen anhand altem Zustand feststellen
for (Zelle zelle : spiel.getZellen()) {
// ArrayList<Zelle> nachbarn = spiel.getNachbarn(zelle);
Zelle[] nachbarn = spiel.getNachbarnAryWrapped(zelle);
int lebendigeNachbarn = 0;
for (Zelle nachbar : nachbarn) {
if (nachbar.istLebendig()) lebendigeNachbarn++;
}
// if (zelle.istLebendig()) {
// if (lebendigeNachbarn <= 1 || lebendigeNachbarn >=4) {
// Zelle neu = new Zelle(zelle.getPosition(),Zelle.TOT);
// änderungen.add(neu);
// }
// } else { // eventuell zu einem if umbauen, welches Zustand ins Gegenteil verkehrt
// if (lebendigeNachbarn == 3) {
// Zelle neu = new Zelle(zelle.getPosition(),Zelle.LEBENDIG);
// änderungen.add(neu);
// }
// }
Zelle neu;
if (zelle.istLebendig() && lebendigeNachbarn % 2 == 0)
neu = new Zelle(zelle.getPosition(),Zelle.TOT);
else if (! zelle.istLebendig() && lebendigeNachbarn % 2 == 1)
neu = new Zelle(zelle.getPosition(),Zelle.LEBENDIG);
else
neu = null;
if (neu != null)
änderungen.add(neu);
}
// Erkannte Änderungen nun einpflegen
for (Zelle zelle : änderungen) {
spiel.setZelle(zelle);
ansicht.zeichenZelle(zelle);
}
}
}
|