细胞机概念

死亡:如果活着的邻居的数量小于2或者大于3,则死亡
新生:如果正好有三个邻居活着,则新生
其他情况保持原状

代码

CellMachine.java

package callmachine;import javax.swing.JFrame;public class CellMachine {public static void main(String[] args){Field field = new Field(30,30);for(int row = 0; row<field.getHeight();row++){for(int col = 0; col<field.getWidth();col++){field.place(row,col,new 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();}}}View view = new View(field);JFrame frame = new JFrame();frame.setDefaultCloseOperation(JFrame.NXIT_ON_CLOSE);     //  关闭程序窗口frame.setResizable(false);frame.setTitle("Cells");frame.add(view);frame.pack();frame.setVisible(true);for(int i = 0;i<1000;i++){for(int row = 0;row<field.getHeight();raw++){for(int col = 0;col<field.getWidth();col++){Cell cell = field.get(row,col);Cell[] neighbour = field.getNeighbour(row,col);int numOfLive = 0;for(Cell c:neighbour){if(c.isAlive()){numOfLive++;}}System.out.print("["+row+"]["+col+"]:");System.out.print(cell.isAlive()?"live","dead");System.out.print(":"+numOfLive+"-->");if(cell.isAlive()){if(numOfLive < 2 || numOfLive > 3){cell.die();System.out.print("die");}}else if(numOfLive == 3){cell.reborn();System,out,print("reborn");}System.out.print();}}System.out.print("UPDATE");frame.repaint();try{Thread.sleep(200);}catch(InterruptedException e){e.printStackTrace();}           }}
}

View.java

package field;import java.awt.Dimension;public class View extends JPanel{private static final long serialVersionUID = -525899567621660595L;private static final int GRID_SIZE = 16;private Field theField;public View(Field field){theField = field;}@Overridepublic void paint(Graphicd g){super.paint(g);for(int row = 0;row< theField.getHeight();row++){for(int col = 0;col< theField.getWidth();col++){Cell cell = theField.get(row,col);if(cell != null){cell.draw(g,col*GRID_SIZE,row*GRID_SIZE,GRID_SIZE);}}}}@Overridepublic Dimension getPreferredSize(){return new Dimension(theField.getWidth()*GRID_SIZE+1,theField.getHeight()*GRID_SIZE+1);}public Dimension getPreferredSize(){Field field = new Field(10,10);for(int row = 0; row<field.getHeight();row++){for(int col = 0;col<field.getWidth();col++){field.place(row,col,new Cell());//未完待续}}}}

Field.java

package cell;import java.util.ArrayList;public class Field{private int width;private int height;private Cell[] field;public Field(int width,int height){this.width = width;this.height = height;field = new Cell[height][width];}public int getWidth(){return width;}public int getHeight(){return height;}public Cell place(int row,int col,Cell o){Cell ret = field[row][col];field[row][col] = 0;return ret;} public Cell get(int row,int col){return field[row][col];}public Cell[] getNeighbour(int row,int col){ArrayList<Cell> list = new ArrayList<Cell>();for(int i =1;i<2;i++){for(int j=1;j<2;j++){int r = row+i;int c = col+j;if(r>-1 && r<height && c>-1 && c<width && !(r== row && c == col)){list.add(field[r][c]);}}}return list.toArray(new Cell[list.size()]);}public void clear(){}//未完待续
}

Cell.java

package cell;import java.awt.Graphics;public class Cell {private boolean alive = false;public void die(){alive = false;}public void reborn(){alive = true;}public boolean isAlive(){return alive;}public void draw(Graphics g,int x,int y,int size){g.drawRect(x,y,size,size);if(alive){g.fillRect(x,y,size,size);}}
}

一、数据和表现分离

1. 程序的业务逻辑和表现无关;

2. 表现可以是图形的也可以是文本的;

3. 表现可以是本地的也可以是远程的;

二、责任驱动的设计

· 将程序要实现的功能分配到合适的类/对象中去是设计中非常重要的一环

三、网格化

1.图形界面本身有更高的解析度;

2. 将画面网格化以后,数据就更容易处理了;

Java项目——细胞自动机相关推荐

  1. github javaguide_GitHub上收获Star数排名前10的Java项目

    1. CS-Notes star:92.1k 介绍:技术面试必备基础知识.Leetcode.计算机操作系统.计算机网络.系统设计.Java.Python.C++ :地址:https://cyc2018 ...

  2. 新建eclipse的java项目报错处理

    新建eclipse的java项目报错处理:选中报错的项目文件夹→右击选择属性(ALT+Enter)→java构建路径→库→双击"构建路径上的JAR和类文件夹"下面的项→选择备用JR ...

  3. Java开发环境的搭建以及使用eclipse从头一步步创建java项目

    原文:出自本人的Linux博客http://blog.csdn.net/unix21/article/details/18813173 一.Java 开发环境的搭建 这里主要说windows环境下怎么 ...

  4. eclipse中java项目转换为web项目

    2019独角兽企业重金招聘Python工程师标准>>> 经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目,有过很多次经历,今天也有同事遇到 ...

  5. eclipse中如何将java项目转为java Web项目

    有时候我们在eclipse中导入web项目时,系统当做一个java项目导入进来了.这时候在启动tomcat的服务器时无法找到该项目. 那么可以通过如下操作来将java项目转换为web项目. 1. 选择 ...

  6. 将一个普通的java项目转化为maven项目

    在学习Spring事务时,我参考的书的源码不是maven项目,整本书依赖的100多个jar包都在一个文件夹里,我本来对spring每个模块的学习源码都放在一个Github仓库里,每一个项目都是mave ...

  7. java项目_JNPF快速开发平台-简单快速高效开发java项目

    ◆JNPF快速开发平台 JNPF快速开发平台采用前后端分离技术.采用B/S架构开发,形成一站式开发多端(APP+PC)使用. 使用JNPF开发平台可以简单.快速.高效的构建各种类型java项目. ◆J ...

  8. Eclipse 创建 Java 项目概述

    Eclipse 是一个开放源代码的.基于 Java 的可扩展开发平台.Eclipse 是 Java 的集成开发环境(IDE),当然 Eclipse 也可以作为其他开发语言的集成开发环境,如C,C++, ...

  9. 立足GitHub学编程:13个不容错过的Java项目

    今天我们将整理一大波干货满满的优秀Java项目. GitHub可谓一座程序开发的大宝库,有些项目值得fork,有些则能帮助我们改进自有代码或者学习编程技能.无论如何,开发工作当中我们几乎不可能绕得开G ...

  10. Intellij Idea创建一个简单的java项目

    2016年11月12日 我即将要离开象牙塔(校园),踏入社会,想想未来我是某个公司的一个程序员,再对比一下小时的梦想,好像出入挺大的.今天我不得不为即将的工作准备,一个java开发工程师,但是我现在是 ...

最新文章

  1. ORACLE临时表空间
  2. mysql5.6.37驱动_MySql (mysql-5.6.37) 在Windows的安装及使用
  3. java 判断水仙花_Java实现判断水仙花数
  4. python快速入门 pdf-Python快速入门 (第3版) PDF 下载
  5. [云炬创业基础笔记]第四章测试20
  6. ajax burp 乱码,burp suite中国乱码的解决方案
  7. java中的多线程——进度1
  8. Redis 持久化之RDB和AOF
  9. AuthFailed at /social-auth/complete/facebook/
  10. 盘点PHP编程常见失误
  11. Spring Security使用Hibernate实现自定义UserDetails
  12. 2021年石家庄七中高考成绩查询入口,石家庄市教育考试院官网2020中考查分:成绩查询入口...
  13. 一维搜索斐波那契C语言,斐波那契数列在一维搜索中的应用
  14. selenium中的window handle
  15. 重新认识java-break和continue的标签你用过么
  16. DiskFileUpload 中文乱码 解决方法
  17. 发票上的计算机字体,发票代码和发票号码是什么字体
  18. 案例4——52周存钱挑战
  19. 4565: [Haoi2016]字符合并 区间DP
  20. 分裂基 c语言算法,分裂基快速傅里叶变换 - osc_v8jmwk6w的个人空间 - OSCHINA - 中文开源技术交流社区...

热门文章

  1. PCWorld:火狐浏览器已宣告死亡
  2. mysql %3cforeach_RCTF 2020 Writeup
  3. csgo准星设置代码_csgo准星代码怎么输入
  4. html 表单 元素 美化,分享10款jQuery的表单元素样式美化插件
  5. 最新emoji表情代码大全_2020最新版早上好问候图片大全 表情
  6. 最常用的五种数据分析方法,建议收藏!
  7. 16种常用的数据分析方法汇总
  8. 韩顺平 php大牛班课程,2016泰牛程序员韩顺平PHP大牛班HTML课程完整笔记资料.doc...
  9. xshell5和xftp5安装教程
  10. HDU4282 A very hard mathematic problem 快速幂