细胞自动机
这两天学习了翁恺老师的细胞自动机章节,下载了他的代码,并且分析和研究了一下,打上了一些注释,如果有需要的同学可以一起看一下翁恺老师的代码,也可以借助我的注释理解一下代码里面的思想和方法。
一、细胞自动机介绍
在一个棋盘上有很多细胞(黑为活着的细胞,白为死亡的细胞),它们在棋盘上根据一定的规则重生或者死亡。
1.死亡:如果一个细胞的邻居活着的数量>3或者<2,则该细胞死亡
2.重生:如果一个细胞的邻居活着的数量=3,则该细胞重生
3.如果有其他情况则保持现状
二、文件结构
三、代码
1.CellMachine
package cellmachine;
import javax.swing.JFrame;
import cell.Cell;
import field.View;
import field.Field;
//因为这三个类都是在其他包里的,我们想要用就必须要import一下
public class CellMachine {
public static void main(String[] args) {
Field field = new Field(30,30);
//new了一个新的30*30的棋盘对象
for( int row = 0; row<field.getHeight(); row++ ) {
for( int col = 0; col<field.getWidth(); col++ ) {
field.place(row, col, new Cell());
}
}
//两层循环,遍历棋盘上的每一个位置,在每一个坐标对应的位置创造一个新的细胞Cell()
for( int row = 0; row<field.getHeight(); row++ ) {
for( int col = 0; col<field.getWidth(); col++ ) {
Cell cell = field.get(row, col);
if( Math.random() < 0.2 ) {
cell.reborn();
//细胞重生
}
//这里用了random随机在0~1之间,也就是棋盘上每一个细胞有1/5的概率重生
}
}
//两层循环,遍历棋盘上的每一个细胞,给细胞自动机初始化,给整个棋盘的细胞随机重生
View view = new View(field);
//new了一个新的view对象,告诉它我们的field
JFrame frame = new JFrame();
//new了一个新的JFrame对象,JFrame类的用处是创造一个JAVA窗口
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//获得一个默认的关闭操作,当我们点击红叉时可以正常地将程序结束掉
frame.setResizable(false);
//窗口大小不可以改变
frame.setTitle("Cells")