Canvas Demo 3

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Java</language>
The Game of Life is not your typical computer game. It is a 'cellular automaton', and was invented by Cambridge mathematician John Conway.

For a space that is 'populated':
*    Each cell with one or no neighbors dies, as if by loneliness. 
*    Each cell with four or more neighbors dies, as if by overpopulation. 
*    Each cell with two or three neighbors survives. 
For a space that is 'empty' or 'unpopulated'
*    Each cell with three neighbors becomes populated. 

<eval>
int w = 20; 
int h = 10;
int[][] Spielfeld = new int[w][h];

for(int i=0; i<10; i++) Spielfeld[5+i][4] = 1;

void drawCell(int x, int y, boolean black){
  if(black) canvas.setColor(0,0,0); else 
            canvas.setColor(255,255,255);
  canvas.fillRect(50+x*25,y*25,25,25);           
}

void drawCells(){
  for(int x=0; x<w; x++)
   for(int y=0; y<h; y++)
    drawCell(x,y,Spielfeld[x][y] == 1);
}

int countNeighbors(int x, int y){
  int r = 0;
  if(x>0   && Spielfeld[x-1][y] == 1) r++; 
  if(x<w-1 && Spielfeld[x+1][y] == 1) r++; 
  if(y>0   && Spielfeld[x][y-1] == 1) r++; 
  if(y<h-1 && Spielfeld[x][y+1] == 1) r++; 
  if(x>0   && y>0    && Spielfeld[x-1][y-1] == 1) r++; 
  if(x>0   && y<h-1  && Spielfeld[x-1][y+1] == 1) r++; 
  if(x<w-1 && y>0    && Spielfeld[x+1][y-1] == 1) r++; 
  if(x<w-1 && y<h-1  && Spielfeld[x+1][y+1] == 1) r++; 
  return r;
}
void flipCells(){
  int[][] SpielfeldNeu = new int[w][h];
  for(int x=0; x<w; x++)
   for(int y=0; y<h; y++){
    int neighbors = countNeighbors(x,y); 
    SpielfeldNeu[x][y] = Spielfeld[x][y];
    if(Spielfeld[x][y] == 1){
     if (neighbors  < 2 || neighbors  > 3) SpielfeldNeu[x][y] = 0;
    }else{
     if (neighbors  == 3) SpielfeldNeu[x][y] = 1;
    }
   }
  Spielfeld = SpielfeldNeu;
}


canvas.clear();
for(int i=0; i <30; i++) { drawCells(); flipCells(); }
</eval>

<canvas></canvas>