package sample;
import javafx.application.Platform;
import javafx.beans.binding.DoubleBinding;
import javafx.concurrent.ScheduledService;
import javafx.concurrent.Task;
import javafx.util.Duration;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* Created by yu on 2017/8/27.
*/
public class CellsManage
{
public Cell[][] cells;
public Double cellSize;
public int rows;
public int cols;
CellsManage(int rows,int cols,double cellSize){
cells=new Cell[rows][cols];
this.cellSize=cellSize;
this.rows=rows;
this.cols=cols;
//初始化数据
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
cells[i][j]=new Cell(cellSize);
if(Math.random()<0.3){
cells[i][j].setAlive(true);
}
}
}
}
public Cell[][] getCells(){
return this.cells;
}
//处理单个Cell的状态变化
private void handleCell(int row,int col){
if(row>=cells.length){
System.err.println(row+"行越界");
return;
}
if(col>=cells[0].length){
System.err.println(col+"列越界");
return;
}
Cell target=cells[row][col];
//取上下左右8个点作为邻居情况
int sum=0;
if(row-1>=0&&cells[row-1][col].isAlice()) sum++; //up
if(row+1<rows&&cells[row+1][col].isAlice()) sum++; //down
if(col-1>=0&&cells[row][col-1].isAlice()) sum++; //left
if(col+1<cols&&cells[row][col+1].isAlice()) sum++; //right
if(col-1>=0&&row-1>=0&&cells[row-1][col-1].isAlice()) sum++; //up-left
if(col-1>=0&&row+1<rows&&cells[row+1][col-1].isAlice()) sum++; //down-left
if(col+1<cols&&row-1>=0&&cells[row-1][col+1].isAlice()) sum++; //up-right
if(col+1<cols&&row+1<rows&&cells[row+1][col+1].isAlice()) sum++; //down-right
if(sum==2){
return;
}
if(sum==3){
target.setAlive(true);
}
else{
target.setAlive(false);
}
}
//一次更新的步骤
public void develope(){
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
handleCell(i,j);
}
}
}
//
public void run(int step) {
Task task=new Task() {
@Override
protected Object call() throws Exception {
for(int i=0;i<step;i++){
develope();
Thread.sleep(100);
}
return null;
}
};
Thread thread=new Thread(task);
thread.start();
// ScheduledService service=new ScheduledService() {
// @Override
// protected Task createTask() {
// return new Task() {
// @Override
// protected Object call() throws Exception {
// develope();
// return null;
// }
// };
// }
// };
//
// Counter counter=new Counter();
// //计数步数
// service.setOnSucceeded(value->{
// if(counter.count>step) service.cancel();
// counter.count();
// });
// service.setOnCancelled(event -> System.out.println("canceled"));
// service.setPeriod(Duration.millis(100));
// service.start();
}
private class Counter{
int count=0;
public void count(){
count++;
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
元胞自动机 java实现,带可视化界面。需要jdk8环境打开 元胞自动机(Cellular Automaton),复数为Cellular Automata,简称CA,也有人译为细胞自动机、点格自动机、分子自动机或单元自动机)。是一时间和空间都离散的动力系统。散布在规则格网 (Lattice Grid)中的每一元胞(Cell)取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新。大量元胞通过简单的相互作用而构成精态系统的演化。由冯诺依曼在20世纪50年代发明。
资源推荐
资源详情
资源评论
收起资源包目录



































共 24 条
- 1
- 2
- 3
- 4
- 5









资源评论

- #标题与内容不符
- #内容缺失
- #文件乱码
- #引导二次消费
- #需要密码
- #运行出错
- #毫无价值
- #上传者态度恶劣
- #无法联系上传者
- fuqbo2019-02-17下载下来测试相关技术看看
- chenglin5302017-11-14不知道能不能用,下载下来看看
旅者Edison
- 粉丝: 6
- 资源: 1

上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
已下载
下载帮助

内容简介:CA.zip CA CA CA.iml src .idea out
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
