求用java写的人生象棋源代码
手动输入状态。根据以下规则计算:
1每个网格中是否存在下一代活细胞,取决于当前与该网格相邻的八个网格中的细胞存活情况。
当一个活细胞周围有2或3个活细胞时,该细胞仍会存活到下一代;或者死亡。
当一个网格周围有三个活细胞时,在下一代,活细胞将出现在网格中。
*/
公共类CellLife {
/**
* @param args
*/
公共静态void main(String[] args) {
// TODO自动生成的方法存根
//int[][]arr = new int[5][5];//5*5棋盘
int[][] arr = {{0,1,0,1,0},{1,1,0,0},{0,0,1,1,1},{1,1,0,0,0},{0,0,1
int[][] brr = {{0,0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0,0},{0,0,0,0 } };;//状态待机
int x,y;//记录行和列
int CNT = 0;//记录迭代次数
布尔标志=真;
System.out.println("初始状态:");
for(int I = 0;我& lt5;i++) {
for(int j = 0;j & lt5;j++)
system . out . print(arr[I][j]+" ");
system . out . println();
}
int[]nb = new int[8];//8个邻居
while(flag) {
cnt++;
for(int I = 0;我& lt5;i++) {
for(int j = 0;j & lt5;j++) {
x = I-1;
y = j-1;
如果((x & gt= 0)& amp;& amp(y & gt=0))
nb[0]= arr[x][y];
其他
nb[0]= 0;
x = I-1;
y = j;
if(x & gt;=0)
nb[1]= arr[x][y];
其他
nb[1]= 0;
x = I-1;
y = j+1;
如果((x & gt= 0)& amp;& amp(y & lt5))
nb[2]= arr[x][y];
其他
nb[2]= 0;
x = I;
y = j-1;
如果(y & gt=0)
nb[3]= arr[x][y];
其他
nb[3]= 0;
x = I;
y = j+1;
if(y & lt;5)
nb[4]= arr[x][y];
其他
nb[4]= 0;
x = I+1;
y = j-1;
如果((x & lt5)& amp;& amp(y & gt=0))
nb[5]= arr[x][y];
其他
nb[5]= 0;
x = I+1;
y = j;
if(x & lt;5)
nb[6]= arr[x][y];
其他
nb[6]= 0;
x = I+1;
y = j+1;
如果((x & lt5)& amp;& amp(y & lt5))
nb[7]= arr[x][y];
其他
nb[7]= 0;
//判断下一代的状态
int sum = 0;
for(int n = 0;n & lt8;n++)
sum = sum+nb[n];
If(arr[i][j]==1)//活细胞
if(sum==2||sum==3)
brr[I][j]= 1;
其他
brr[I][j]= 0;
Else //死细胞
if(sum==3)
brr[I][j]= 1;
其他
brr[I][j]= 0;
}
}
flag =!CellLife.same(arr,brr);
// System.out.println("下一代状态:");
for(int I = 0;我& lt5;i++) {
for(int j = 0;j & lt5;j++) {
arr[I][j]= brr[I][j];
//system . out . print(arr[I][j]+" ");
}
//system . out . println();
}
}
System.out.println("最终状态:");
for(int I = 0;我& lt5;i++) {
for(int j = 0;j & lt5;j++)
system . out . print(arr[I][j]+" ");
system . out . println();
}
System.out.println("迭代次数:"+CNT);
}
public static boolean same(int[][]a,int[][] b) {
for(int I = 0;我& lt5;i++)
for(int j = 0;j & lt5;j++)
if(a[i][j]!=b[i][j])
返回false
返回true
}
}