📄 dynenvs.java
字号:
package lifetest;
import java.awt.*;
import lifetest.World;
public class dynEnvs {
int rule[][][][][][][][][];
double rule0[][]=new double[6][4];
double p[]=new double[4];
double pp[]=new double[5];
double interX,interY;
int type;
World localwd;
public dynEnvs (int t,World wd){
localwd=wd;
type=t;
switch(type){
case 0:
rule = new int [2][2][2][2][2][2][2][2][2];
//自动生成规则
for(int i1=0;i1<2;i1++){
for(int i2=0;i2<2;i2++){
for(int i3=0;i3<2;i3++){
for(int i4=0;i4<2;i4++){
for(int i5=0;i5<2;i5++){
for(int i6=0;i6<2;i6++){
for(int i7=0;i7<2;i7++){
for(int i8=0;i8<2;i8++){
/* rule[0][i1][i2][i3][i4][i5][i6][i7][i8]=0;
rule[1][i1][i2][i3][i4][i5][i6][i7][i8]=0;
int addition=i1+i2+i3+i4+i5+i6+i7+i8;
if(addition<=4){
rule[1][i1][i2][i3][i4][i5][i6][i7][i8]=1;
}
if(addition==2){
rule[0][i1][i2][i3][i4][i5][i6][i7][i8]=1;
rule[1][i1][i2][i3][i4][i5][i6][i7][i8]=1;
}*/
rule[0][i1][i2][i3][i4][i5][i6][i7][i8]=0;
rule[1][i1][i2][i3][i4][i5][i6][i7][i8]=0;
int addition=i1+i2+i3+i4+i5+i6+i7+i8;
if(addition==2){
rule[1][i1][i2][i3][i4][i5][i6][i7][i8]=1;
}
else if(addition==3){
rule[0][i1][i2][i3][i4][i5][i6][i7][i8]=1;
rule[1][i1][i2][i3][i4][i5][i6][i7][i8]=1;
}
}
}
}
}
}
}
}
}
break;
case 1:
pp[0]=0;
p[0]=0.01; p[1]=0.85; p[2]=0.07; p[3]=0.07;
for (int i=1;i<5;i++){
pp[i]=pp[i-1]+p[i-1];
}
rule0[4][0]=0.16;
rule0[0][1]=0.85; rule0[1][1]=0.04; rule0[3][1]=-0.04; rule0[4][1]=0.85; rule0[5][1]=1.6;
rule0[0][2]=0.2; rule0[1][2]=-0.26; rule0[3][2]=0.23; rule0[4][2]=0.22; rule0[5][2]=1.6;
rule0[0][3]=-0.15; rule0[1][3]=0.28; rule0[3][3]=0.26; rule0[4][3]=0.24; rule0[5][3]=0.44;
break;
}
}
public int read(int i,int j,int r,int width,int height,int world[][]){
int s=0;
for(int i1=0;i1<r;i1++){
for(int j1=0;j1<r;j1++){
int t1=world[(r*i+i1+width)%width][(r*j+j1+height)%height];
if(t1==1){
s++;
}
}
}
int out=0;
if(s>(float)(r*r)/(float)(5)){
out=1;
}
return out;
}
public void write(int i,int j,int r,int width,int height,int smallwd[][],int world[][]){
for(int i1=0;i1<r;i1++){
for(int j1=0;j1<r;j1++){
world[(r*i+i1+width)%width][(r*j+j1+height)%height]=smallwd[i][j];
}
}
}
public int[][] evolve(int world[][],int width,int height){
int newwd[][];
newwd=new int[width][height];
switch(type){
case 0:
int r=5;
for(int i=0;i<width;i++){
for(int j=0;j<height;j++){
int x1=((i-1)+width)%width,x3=((i+1)+width)%width,y1=((j-1)+width)%height,y3=((j+1)+width)%height;
int v[]=new int[9];
if(world[i][j]==1)v[0]=1;
else v[0]=0;
if(world[x1][y1]==1)v[1]=1;
else v[1]=0;
if(world[i][y1]==1)v[2]=1;
else v[2]=0;
if(world[x3][y1]==1)v[3]=1;
else v[3]=0;
if(world[x1][j]==1)v[4]=1;
else v[4]=0;
if(world[x3][j]==1)v[5]=1;
else v[5]=0;
if(world[x1][y3]==1)v[6]=1;
else v[6]=0;
if(world[i][y3]==1)v[7]=1;
else v[7]=0;
if(world[x3][y3]==1)v[8]=1;
else v[8]=0;
newwd[i][j]=rule[v[0]][v[1]][v[2]][v[3]][v[4]][v[5]][v[6]][v[7]][v[8]];
}
}
/*
int w=(int)(width/5);
int h=(int)(height/5);
int smallwd[][]=new int[w][h];
for(int i=0;i<w;i++){
for(int j=0;j<h;j++){
int x1=((i-1)+width)%width,x3=((i+1)+width)%width,y1=((j-1)+width)%height,y3=((j+1)+width)%height;
int v[]=new int[9];
v[0]=read(i,j,r,width,height,world);
v[1]=read(x1,y1,r,width,height,world);
v[2]=read(i,y1,r,width,height,world);
v[3]=read(x3,y1,r,width,height,world);
v[4]=read(x1,j,r,width,height,world);
v[5]=read(x3,j,r,width,height,world);
v[6]=read(x1,y3,r,width,height,world);
v[7]=read(i,y3,r,width,height,world);
v[8]=read(x3,y3,r,width,height,world);
smallwd[i][j]=rule[v[0]][v[1]][v[2]][v[3]][v[4]][v[5]][v[6]][v[7]][v[8]];
write(i,j,r,width,height,smallwd,newwd);
}
}*/
break;
case 1:
double u=0;
for(int j=0;j<localwd.FoodAddNum;j++){
double E = Math.random();
for(int i=0;i<4;i++){
if(E >= pp[i] && E< pp[i+1]){
u=rule0[0][i]*interX+rule0[1][i]*interY+rule0[2][i];
interY=rule0[3][i]*interX+rule0[4][i]*interY+rule0[5][i];
interX=u;
break;
}
}
int xx=width/2+(int)(width*interX/7);
int yy=height-1-(int)(height*interY/11);
world[xx][yy]=1;
localwd.g.setColor(localwd.controlEnv.COLOR_GRASS);
localwd.g.drawRect(xx,yy,1,1);
}
newwd=world;
break;
}
return newwd;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -