Die Aufgabe bestand darin, mittels Java eine Gitter-Gas Simulation zu entwickeln. Dabei verwendete ich das von Uriel Frisch, Brosl Hasslacher und Yves Pomeau 1986 entwickelte FHP-Modell.

Die Animation simuliert das Verhalten von flüssigen Gasen als zellulärer Automat.

Die angewendeten Regeln für Kollisionen sind grundsätzlich relativ einfach:

Der interessante Teil des Quelltext; das Collisionhandling habe ich kurzerhand unten angehängt:

public void handleCollision(int i, int j, int heading) {
		if(heading == 2) {
			if(this.arrB[(i-1)][j] == 8 ) {
				this.arrB[(i-1)][j] = heading;
				this.arrB[i][j] = 8;
			} else {
				if((i-2) > 0) {
					this.arrB[(i-2)][j] = heading;
					this.arrB[i][j] = 0;
				} else {
					this.arrB[i][j] = 8;
				}
			}
		} else if(heading == 8 ) {
			if(this.arrB[(i+1)][j] == 2) {
				this.arrB[(i+1)][j] = heading;
				this.arrB[i][j] = 2;
			} else {
				if((i+2) < this.arrH) {
					this.arrB[(i+2)][j] = heading;
					this.arrB[i][j] = 0;
				} else {
					this.arrB[i][j] = 2;
				}
			}
		} else if(heading == 1) {
			if(this.arrB[i][(j+1)] == 4) {
				this.arrB[i][(j+1)] = heading;
				this.arrB[i][j] = 4;
			} else {
				if((j+2) < this.arrW) {
					this.arrB[i][(j+2)] = heading;
					this.arrB[i][j] = 0;
				} else {
					this.arrB[i][j] = 4;
				}
			}
		} else if(heading == 4) {
			if(this.arrB[i][(j-1)] == 1) {
				this.arrB[i][(j-1)] = 4;
				this.arrB[i][j] = 1;
			} else {
				if((j-2) > 0) {
					this.arrB[i][(j-2)] = heading;
					this.arrB[i][j] = 0;
				} else {
					this.arrB[i][j] = 1;
				}
			}
		}
	}

Der komplette Quelltext kann hier runtergeladen werden.