# Langtons Ameise - Fragen zur Umsetzung



## AllenWalker (9. Nov 2014)

Hallo Java-Freunde,

Ich bin neu im Forum und möchte meine Kenntnisse in der Sprache Java erweitern resp. verbessern. Um dies zu erreichen habe ich ein kleine Simulation geschrieben.

In der Simulation geht es um das Thema Langton's Ameise. Der Algorithmus ist korrekt implementiert und die stufenweise Visualisierung anhand eines 
GameLoops funktioniert ebenfalls. Für die Implementierung des GameLoops habe ich mich an diesem Artikel orientiert.

Zusätzlich möchte ich die Simulation gerne erweitern in dem ich Informationen ausgebe und die Simulation steuere. Dazu hätte ich die ein oder andere Frage 

Im Anhang befindet sich mein Projekt im aktuellsten Entwicklungsstand.

*OOP*
Woher weiß man in eigenen Projekten wann es sinnvoll ist Variablen oder Methoden als static zu deklarieren? Ist der Programmierstil "sauberer" die Parameter
entweder statisch, mit getter-/setter-Methoden oder als Parameter bei Methoden zu übergeben?

*GUI-Programmierung*
Wie kann ich den Informationsaustausch zwischen einzelnen JPanels erreichen? Zum Beispiel bei meinem Projekt die Anfangsausrichtung der Ameise über die JCombobox zu erreichen.

*GameLoop*
Des weiteren soll die Simulation über JButtons gestartet, pausiert und gestoppt werden. Wie könnte ich dies mit Hilfe des GameLoops umsetzen und könnte ich
den GameLoop auch als eigenständige Klasse implementieren?

Eine Recherche mit Google zu den einzelnen Themen hat bisher noch zu keinem Ergebnis geführt. Ich möchte mich bei euch für eure Hilfe danken 

Mit freundlichen Grüßen,
Allen Walker


----------



## Androbin (9. Nov 2014)

*OOP*
Das kommt ganz drauf an...

*GUI-Programmierung*
Wieso um Himmels Willen sollen die PANELS miteinander kommunizieren können?

*GameLoop*
Ganz einfach:

```
private boolean isRunning = false;

@ Override
public void run() {
	
	long lastFrame = System.currentTimeMillis();
	
	while ( true ) {
		
		try { Thread.sleep( 40 ); }
		catch ( Exception e ) { }
		
		long thisFrame = System.currentTimeMillis();
		float delta = ( thisFrame - lastFrame ) / 1000f;
		
		if ( isRunning ) {
			
			update( delta );
			render();
			
		}
		
	}
	
}
```


----------

