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.