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 änderungen = new ArrayList(); // Änderungen anhand altem Zustand feststellen for (Zelle zelle : spiel.getZellen()) { // ArrayList 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); } } }