summaryrefslogtreecommitdiff
path: root/ws2015/eip/blaetter/07/de/lmu/tcs/Spieler.java
blob: 98bca6eac8a3ab694bf8b252b3a0f934948ecbde (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
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 = zelle.nachkommen();
	    änderungen.add(neu);
        }
        // Erkannte Änderungen nun einpflegen
        for (Zelle zelle : änderungen) {
            spiel.setZelle(zelle);
            ansicht.zeichenZelle(zelle);
        }
    }

}