`
chandler
  • 浏览: 81633 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

细胞模拟程序

阅读更多
      这是我在论坛上一个朋友出的一道题目,然后我再用java来写的。总共3个类。
      
  1. public class mainapp {
  2.     /**
  3.      * 1. 如果一个细胞只有0或1个邻居,它将因为孤独而死; 
  4.      * 2. 如果一个细胞有4到8个邻居,它将因为拥挤而死; 
  5.      * 3. 如果一个细胞恰有2或者3个邻居,它将继续生存下去; 
  6.      * 4. 如果一个空格子恰有3个邻居,将“生”出一个新细胞; 
  7.      * 5. 其他的空格子继续维持原状。
  8.      */
  9.     public static void main(String[] args) {
  10.         // TODO Auto-generated method stub
  11.         Cellsgroup test = new Cellsgroup();
  12.         test.setVisible(true);
  13.     }
  14. }

  1. /*
  2.  * 此类是一个窗体,用来装cell的容器
  3.  */
  4. import java.awt.Container;
  5. import java.awt.Dimension;
  6. import java.awt.GridLayout;
  7. import java.awt.Toolkit;
  8. import javax.swing.JFrame;
  9. public class Cellsgroup extends JFrame {
  10.     private static final long serialVersionUID = 1L;
  11.     public int rows    = 10;                          //行
  12.     public int coloums = 10;                          //列数
  13.     Cell[]     Cellgroup = new Cell[rows*coloums];    //装载Cellgroup的类
  14.     
  15.     //构造方法
  16.     public Cellsgroup(){
  17.         super("cell");                                 //设置标题
  18.         Toolkit mykit = this.getToolkit();
  19.         Dimension wndsize = mykit.getScreenSize();
  20.         int size = wndsize.width/2;
  21.         this.setBounds((wndsize.width-size)/2,(wndsize.height-size)/2
  22.                        ,size,size);                           //设置大小
  23.         this.allcell();
  24.         this.setDefaultCloseOperation(EXIT_ON_CLOSE);         //设置推出
  25.         this.setVisible(true);
  26.     }
  27.     
  28.     //添加元素
  29.     private void allcell() {
  30.         GridLayout layout = new GridLayout(rows,coloums);     //设置网格布局管理器
  31.         Container  content = this.getContentPane();            
  32.         content.setLayout(layout);            
  33.         for(int i = 0;i<Cellgroup.length;i++){                //初始化,放入cell    
  34.             Cellgroup[i] = new Cell(i,this);
  35.             content.add(Cellgroup[i]);
  36.         }
  37.         for(Cell cell:Cellgroup){
  38.             cell.initialfrinends(cell.getNo());
  39.         }
  40.     }
  41. }
  1. /*细胞,为了处理方便,这里把其做为一个Label表示。*/
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import javax.swing.JLabel;
  5. import javax.swing.Timer;
  6. public class Cell extends JLabel {
  7.     private static final long serialVersionUID = 1L;
  8.     private boolean         status;                     //表示细胞存活的状态。
  9.     private Cell[]          cellfriend;                 //存储附近细胞的类 
  10.     private Cellsgroup      Cellsgroup;                 //载入窗体
  11.     private int             no;                         //窗体编号
  12.     public int getNo() {
  13.         return no;
  14.     }
  15.     Timer                   t ; //计时器
  16.     
  17.     //获取状态
  18.     public boolean isStatus() {                         
  19.         return status;
  20.     }
  21.     
  22.     //设定状态
  23.     public void setStatus(boolean status) {
  24.         if(status){
  25.             this.setText("Cell");                      //表示出现新的细胞
  26.         }else{
  27.             this.setText("");                     //细胞死亡
  28.         }
  29.         this.repaint();
  30.         this.status = status;
  31.     }
  32.     
  33.     //构造函数
  34.     public Cell(int no,Cellsgroup Cellsgroup){
  35.         this.Cellsgroup = Cellsgroup;
  36.         this.initialStatus();                           //初始化状态
  37.         this.no   = no;
  38.         t = new Timer((int) (200*Math.random()+900),new timelistener());
  39.         t.start();                                      //打开计时器
  40.         
  41.     }
  42.     
  43.     //初始化状态
  44.     private void initialStatus(){                       
  45.         if(Math.random()>0.5){                          //当随机数大于0.5时,表示细胞存活 
  46.             this.setStatus(true);                       //为存活
  47.         }else{
  48.             this.setStatus(false);                      //为死亡
  49.         }
  50.     }
  51.     
  52.     //设定朋友群
  53.     public void initialfrinends(int no){
  54.         cellfriend = new Cell[8];                          //表示8个方位
  55.         this.setOneFriend(1, no-Cellsgroup.coloums);       //正上方
  56.         if(((no-1)%Cellsgroup.coloums)!=0){                //左边一排没有左面
  57.             this.setOneFriend(3, no-1);                    //左面
  58.             this.setOneFriend(0, no-Cellsgroup.coloums-1); //左上角
  59.             this.setOneFriend(5, no+Cellsgroup.coloums-1); //左下角
  60.         }
  61.         if((no%Cellsgroup.coloums)!=0){                    //右边一排没有右面
  62.             this.setOneFriend(4, no+1);                    //右面
  63.             this.setOneFriend(2, no-Cellsgroup.coloums+1); //右上角
  64.             this.setOneFriend(7, no+Cellsgroup.coloums+1); //右下角
  65.         }
  66.         this.setOneFriend(6, no+Cellsgroup.coloums);       //正下方
  67.     }
  68.     
  69.     //设定一个朋友
  70.     //friendno是将要放入cellfrind的下标,cellsno是cellgroup对应的下标。
  71.     private void setOneFriend(int friendno,int cellsno){
  72.         //因为考虑到边的情况,所以要cellsno判断一下是否越界。
  73.         if((cellsno<Cellsgroup.Cellgroup.length)&&(cellsno>=0)){
  74.             cellfriend[friendno]= Cellsgroup.Cellgroup[cellsno];
  75.         }
  76.     }
  77.     
  78.     //获得存活的朋友数
  79.     public int getalivefriend(){
  80.         int alivefriend = 0;                             //计数器
  81.         for(Cell cell:cellfriend){                       //迭代整个数组
  82.             if(cell!=null&&cell.isStatus()){             //为存活
  83.                 alivefriend++;                           //计数器加一
  84.             }
  85.         }
  86.         return alivefriend;
  87.     }
  88.     
  89.     //监听器类
  90.     class timelistener implements ActionListener{
  91.         
  92.         public void actionPerformed(ActionEvent e) {
  93.             int alivefriend = getalivefriend();
  94.             if(alivefriend<2||alivefriend>3){         //细胞会死亡
  95.                  setStatus(false);
  96.             }else if(alivefriend==3){                 //生成新细胞
  97.                  setStatus(true);
  98.             }
  99.         }
  100.         
  101.     }
  102.     public String toString(){
  103.         return String.valueOf(this.no);
  104.     }
  105. }


      
分享到:
评论

相关推荐

    [细胞繁殖模拟程序]

    20070424 &lt;br/&gt;运行开始时,程序会提示用户输入: &lt;br/&gt;补给的延时时间(400~X) &lt;br/&gt;细胞个体的总数量(1~499) &lt;br/&gt; 输入你觉得合适的数值开始,程序就会在地图上随机出现一个细胞生命,...

    生命游戏模拟程序

    程序默认模拟20*20个方格内的细胞,可以通过在源代码中修改数组的下标上界得到任意多方格内的细胞模拟程序,开始时只需输入活细胞坐标(程序默认不输入的坐标都是死细胞),在输入一组大于20的坐标,模拟即开始

    Python 细胞分裂模拟程序

    基于Python3 开发的细胞分裂模拟程序。程序可设定细胞死亡周期,细胞分裂需要的资源空间,细胞分裂的最大次数等参数。可以自行优化调整

    细胞繁殖模拟程序

    运行开始时,程序会提示用户输入: &lt;br/&gt;补给的延时时间(400~X) &lt;br/&gt;细胞个体的总数量(1~499) &lt;br/&gt; 输入你觉得合适的数值开始,程序就会在地图上随机出现一个细胞生命,慢慢得看它们繁殖吧,...

    元胞自动机_细胞模拟.zip

    细胞模拟通常涉及到以下几个方面: 1. **初始化**:设置初始细胞状态,可能基于某种特定的模式或随机分布。 2. **规则定义**:设定细胞状态转移规则,比如根据周围细胞的状态决定当前细胞的生死。 3. **时间步推进**...

    JAVA模拟细胞自动机

    - 使用JAVA编写模拟程序,实现上述规则。 - 对模拟结果进行数据分析,以评估交通控制策略的有效性。 #### 四、模型构建与实现 **模型假设:** - 假设道路上的每辆车按照一定的规则移动。 - 设定安全距离阈值,...

    Delphi多线程生命模拟程序

    生命模拟程序通常基于像“康威生命游戏”这样的规则集,其中每个细胞有固定的状态(如存活、死亡),并根据周围细胞的状态遵循特定的更新规则。这些规则可以模拟出各种复杂的动态模式,如自复制结构、周期性模式等...

    nerve.zip_The Program

    《细胞模拟程序——“nerve.zip_The Program”解析》 在信息技术的广阔领域中,模拟生物系统一直是科学家和工程师们关注的热点。标题中的"nerve.zip_The Program"暗示了一个专门用于模拟神经系统的软件程序。这个...

    多线程生命模拟程序

    标题中的“多线程生命模拟程序”指的是一个利用多线程技术实现的计算机程序,它模拟了生物体的生命周期和互动。在计算机科学领域,生命模拟通常基于所谓的细胞自动机,如著名的康威生命游戏。这类模拟允许我们观察...

    基于有限间隔CA元胞自动机模拟干细胞增殖(Matlab完整程序和数据)

    在这个项目中,Matlab被用来编写模拟程序,处理和展示数据。 4. **数据结构**:为了跟踪细胞的属性,如世代、父母、祖先、出生时间和分裂时间,项目可能使用了自定义的数据结构,如数组或者矩阵。在Matlab中,可以...

    matlab 螺旋波模拟程序,基于FHN模型

    1. **设置参数**:根据实验条件或理论分析,确定合适的FHN模型参数,如ε、a和b,以模拟特定的细胞响应。 2. **空间网格**:为了模拟二维或三维空间中的波形,我们需要在空间上建立一个网格,每个网格点对应一个FHN...

    基于matlab的分水岭算法分割黏连细胞程序

    在“基于matlab的分水岭算法分割黏连细胞程序”中,提供的代码可能包括了以上所述的这些步骤,并且可能还包含了自定义的优化策略,如选择最佳阈值、改进种子点检测等。通过分析和理解这段代码,用户可以学习如何在...

    基于p代码的细胞分裂和分化的程序模拟

    ### 基于P代码的细胞分裂和分化的程序模拟 #### 概述 本文讨论了一个结合现代生物学知识与计算机编程技术的新颖方法——通过观察孵化鸡的过程,并将其转化为计算机可处理的形式,来探索细胞分裂与分化的机制。研究...

    细胞算法,一个Delphi类.rar

    开发者可能已经封装了这些复杂的计算过程,使得其他Delphi程序可以方便地调用这个类,实现细胞自动机的各种模拟。 代码文件"codefans.net"可能是从代码分享网站codefans.net下载的源代码,用于实现细胞算法。在查看...

    细胞自动机初探之生命游戏

    如果是代码文件,它可能包括主程序和相关辅助函数,用于展示和模拟生命游戏的各种状态。 **详细知识点:** 1. **细胞自动机原理**:介绍细胞自动机的基本概念,包括一维、二维细胞自动机以及它们在复杂系统理论中...

    网络技术-网络基础-氨基酸饥饿诱导的斜纹夜蛾细胞程序性死亡的研究.pdf

    在本研究中,作者通过模拟氨基酸饥饿状态,使用雷帕霉素处理两种鳞翅目昆虫细胞——家蚕(Bmn-e细胞)和斜纹夜蛾(SL细胞),观察到不同的细胞死亡反应。Bmn-e细胞在12小时后显示出明显的细胞自噬和细胞凋亡,而SL...

    单细胞生物的Python模拟___下载.zip

    3. 增殖与死亡:模拟细胞的增殖机制(如有丝分裂)和死亡过程(如程序性细胞死亡)。 4. 环境互动:模拟细胞与周围环境(如营养物质、有害物质、温度等)的交互。 四、模拟算法 模拟单细胞生物的行为可能需要用到...

    细胞自动机的java实现

    最著名的细胞自动机之一是康威的生命游戏,它通过“生”、“死”规则模拟细胞状态的变化,展现了复杂的行为。在本项目中,细胞自动机可能也采用了类似规则,但具体规则需要查看源代码来了解。 2. **Java实现**:...

    最好的生命life模拟程序_生命游戏_

    这个程序是在windows平台下运行game of life最好的平台。它不仅对细胞空间没有限制、运行速度非常快、界面很友好,而且能够为你提供大量的初始细胞分布图案,你还可以任意组合这些图案达到你象要的构形,然后让这些...

Global site tag (gtag.js) - Google Analytics