Ich schreibe das Programm " spiel des lebens". Es funktioniert! Ich denke, es ist zu viel! Wie kann ich das Programm kürzen. Das möchte ich auch lernen. Könnt ihr mir tipps geben. Danke
Java:
package gdp.stdlib;
public class SDL {
public static void visualize(boolean[][] gol) {
while (true){
StdDraw.clear();
for (int i = 0; i < gol.length; ++i) {
for (int j = 0; j < gol[i].length; ++j) {
if (gol[i][j]) {
StdDraw.setPenColor(StdDraw.BLUE);
StdDraw.filledCircle(i+0.5, j+0.5, 0.5);
}
}
}
StdDraw.show(500);
boolean [][] golX = new boolean[gol.length][gol[0].length];
boolean [][] golB = new boolean[gol.length][gol[0].length];
boolean [][] golnew = new boolean[gol.length][gol[0].length];
for( int x = 0; x < gol.length; ++x) {
for(int y =0; y < gol[x].length; ++y) {
//Zelle bleiben oder tot
if(gol[x][y]){ //1 T Field
int a;
if ( x == 0 && y == 0) { //1
a = 0;
if(gol[x][y+1]) a++;
if (gol[x+1][y]) a++;
if (gol[x+1][y+1]) a++;
if( 1<a && a <4) golX[x][y] = true;
else golX[x][y] = false;
}
if ( y == 0 && x < gol.length-1 && 0 < x) { // 2
a = 0;
if(gol[x-1][y]) a++;
if(gol[x-1][y+1]) a++;
if(gol[x][y+1]) a++;
if(gol[x+1][y+1]) a++;
if(gol[x+1][y]) a++;
if(1 <a && a <4) golX[x][y] = true;
else golX[x][y] = false;
}
if ( y == 0 && x == gol.length -1) { //3
a = 0;
if(gol[x-1][y]) a++;
if(gol[x-1][y+1]) a++;
if(gol[x][y+1]) a++;
if(1 <a && a <4) golX[x][y] = true;
else golX[x][y] = false;
}
if ( y < gol[x].length-1 && 0 <y && x == gol.length-1) { //4
a =0;
if(gol[x][y-1]) a++;
if(gol[x-1][y-1]) a++;
if(gol[x-1][y]) a++;
if(gol[x-1][y+1]) a++;
if(gol[x][y+1]) a++;
if(1 <a && a <4) golX[x][y] = true;
else golX[x][y] = false;
}
if (y == gol[x].length-1 && x == gol.length-1) { //5
a=0;
if(gol[x-1][y])a++;
if(gol[x-1][y-1])a++;
if(gol[x][y-1]) a++;
if(1 <a && a <4) golX[x][y] = true;
else golX[x][y] = false;
}
if (x > 0 && x < gol.length-1 && y == gol[x].length-1 ){ //6
a =0;
if(gol[x-1][y]) a++;
if(gol[x-1][y-1]) a++;
if(gol[x][y-1]) a++;
if(gol[x+1][y-1])a++;
if(gol[x+1][y])a++;
if(1 <a && a <4) golX[x][y] = true;
else golX[x][y] = false;
}
if (x == 0 && y == gol[x].length-1) { //7
a =0;
if(gol[x][y-1]) a++;
if(gol[x+1][y-1]) a++;
if(gol[x+1][y])a++;
if(1 <a && a <4) golX[x][y] = true;
else golX[x][y] = false;
}
if ( x == 0 && y< gol[x].length-1 && 0<y) { //8
a=0;
if(gol[x][y+1])a++;
if(gol[x+1][y+1])a++;
if(gol[x+1][y])a++;
if(gol[x+1][y-1])a++;
if(gol[x][y-1])a++;
if(1 <a && a <4) golX[x][y] = true;
else golX[x][y] = false;
}
if (0<x && x<gol.length-1 && y>0 && y<gol[x].length-1) { //9
a=0;
if(gol[x-1][y-1]) a++;
if(gol[x-1][y])a++;
if(gol[x-1][y+1])a++;
if(gol[x][y-1])a++;
if(gol[x][y+1])a++;
if(gol[x+1][y-1])a++;
if(gol[x+1][y])a++;
if(gol[x+1][y+1])a++;
if(1 <a && a <4) golX[x][y] = true;
else golX[x][y] = false;
}
}
if(!gol[x][y]){ //1 for F Field
int a;
if ( x == 0 && y == 0) { //1
a = 0;
if(gol[x][y+1]) a++;
if (gol[x+1][y]) a++;
if (gol[x+1][y+1]) a++;
if ( a == 3) golB[x][y] = true;
}
if ( y == 0 && x < gol.length-1 && 0 < x) { // 2
a = 0;
if(gol[x-1][y]) a++;
if(gol[x-1][y+1]) a++;
if(gol[x][y+1]) a++;
if(gol[x+1][y+1]) a++;
if(gol[x+1][y]) a++;
if ( a == 3) golB[x][y] = true;
}
if ( y == 0 && x == gol.length -1) { //3
a = 0;
if(gol[x-1][y]) a++;
if(gol[x-1][y+1]) a++;
if(gol[x][y+1]) a++;
if ( a == 3) golB[x][y] = true;
}
if ( y < gol[x].length-1 && 0 <y && x == gol.length-1) { //4
a =0;
if(gol[x][y-1]) a++;
if(gol[x-1][y-1]) a++;
if(gol[x-1][y]) a++;
if(gol[x-1][y+1]) a++;
if(gol[x][y+1]) a++;
if ( a == 3) golB[x][y] = true;
}
if (y == gol[x].length-1 && x == gol.length-1) { //5
a=0;
if(gol[x-1][y])a++;
if(gol[x-1][y-1])a++;
if(gol[x][y-1]) a++;
if ( a == 3) golB[x][y] = true;
}
if (x > 0 && x < gol.length-1 && y == gol[x].length-1 ){ //6
a =0;
if(gol[x-1][y]) a++;
if(gol[x-1][y-1]) a++;
if(gol[x][y-1]) a++;
if(gol[x+1][y-1])a++;
if(gol[x+1][y])a++;
if ( a == 3) golB[x][y] = true;
}
if (x == 0 && y == gol[x].length-1) { //7
a =0;
if(gol[x][y-1]) a++;
if(gol[x+1][y-1]) a++;
if(gol[x+1][y])a++;
if ( a == 3) golB[x][y] = true;
}
if ( x == 0 && y< gol[x].length-1 && 0<y) { //8
a=0;
if(gol[x][y+1])a++;
if(gol[x+1][y+1])a++;
if(gol[x+1][y])a++;
if(gol[x+1][y-1])a++;
if(gol[x][y-1])a++;
if ( a == 3) golB[x][y] = true;
}
if (0<x && x<gol.length-1 && y>0 && y<gol[x].length-1) { //9
a=0;
if(gol[x-1][y-1]) a++;
if(gol[x-1][y])a++;
if(gol[x-1][y+1])a++;
if(gol[x][y-1])a++;
if(gol[x][y+1])a++;
if(gol[x+1][y-1])a++;
if(gol[x+1][y])a++;
if(gol[x+1][y+1])a++;
if ( a == 3) golB[x][y] = true;
}
}
}
}
for (int x =0; x < gol.length; ++x ) {
for(int y = 0 ; y < gol[x].length; ++y){
if (!golX[x][y] && golB[x][y])
golX[x][y] = true;
}
}
gol = golX;
golB = golnew;
golX = golnew;
}
}
public static void main(String[] args) {
int x = 10; //Integer.parseInt(args[0]);
int y = 10; //Integer.parseInt(args[0]);
StdDraw.setXscale(0, x);
StdDraw.setYscale(0, y);
StdDraw.show(50);
boolean[][] gol = new boolean[x][y];
for (int i = 0; i < x; ++i) {
for (int j = 0; j < y; ++j) {
gol[i][j] = (Math.random() >= 0.5)?true:false;
}
}
while (true) {
visualize(gol);
}
}
}