Game of life käsurealt
Allikas: Lambda
public class Life { public static void main(String[] args) { int steps; int[][] cells; int[][] newcells; int[][] tmpcells; // temporary array pointer, not allocated int count; cells=new int[20][20]; newcells=new int[20][20]; initCells(cells); System.out.println("Life starts!"); for(steps=0; steps<100; steps++) { System.out.println("Step nr: "+steps); printCells(cells); count=countCells(cells); if (count==0) { System.out.println("Everybody dead at step nr: "+steps); break; } compNextGen(cells,newcells); // swap two arrays: cells will become newcells, and vice versa tmpcells=cells; cells=newcells; newcells=tmpcells; } } // compute next generation of cells: // old: cells as they were before, will not be changed // next: next generation of cells, written anew static void compNextGen(int[][] old,int[][] next) { int row,col; int n; for(row=0;row<old.length;row++) { for(col=0;col<old[row].length;col++) { // compute nr of neighbours of one cell n=cval(old,row-1,col-1)+cval(old,row-1,col)+ cval(old,row-1,col+1); n=n+cval(old,row,col-1)+cval(old,row,col+1); n=n+cval(old,row+1,col-1)+cval(old,row+1,col)+ cval(old,row+1,col+1); // compute next gen cell: dead or alive if (old[row][col]==1 && n<2) next[row][col]=0; else if (old[row][col]==1 && n>3) next[row][col]=0; else if (old[row][col]==1 && (n==2 || n==3)) next[row][col]=1; else if (old[row][col]==0 && n==3) next[row][col]=1; else next[row][col]=0; } } } // allows to calc neigbour values for cells on borders static int cval(int[][] cells,int r, int c) { if (r<0 || r>=cells.length) return 0; if (c<0 || c>=cells[0].length) return 0; return cells[r][c]; } // give initial position static void initCells(int[][] cells) { initCells2(cells); } static void initCells1(int[][] cells) { cells[1][1]=1; cells[3][1]=1; cells[3][2]=1; cells[4][1]=1; cells[4][2]=1; cells[5][1]=1; } static void initCells2(int[][] cells) { cells[1][1]=1; cells[1][2]=1; cells[1][3]=1; } // just print current cells static void printCells(int[][] cells) { int row,col; for(row=0;row<cells.length;row++) { for(col=0;col<cells[row].length;col++) { if (cells[row][col]==1) { System.out.print("*"); } else { System.out.print(" "); } } System.out.println(); } } // just count current cells static int countCells(int[][] cells) { int row,col,count=0; for(row=0;row<cells.length;row++) { for(col=0;col<cells[row].length;col++) { count=count+cells[row][col]; } } return count; } }