⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 celluar.java~2~

📁 一个JAVA编的生命游戏.是模仿生物生死发展过程的.
💻 JAVA~2~
字号:
package celluar;import java.awt.*;import java.awt.event.*;import java.applet.*;/** * Title:        Game of Life * Description: * Copyright:    Copyright (c) 2003 * Company:      Http://agents.yeah.net * @author Keats * @version 1.0 */public class celluar extends Applet implements Runnable {//加implements Runnable是使这个类能作为线程独立运行  Thread    runner;//为类定义一个线程,在start中启用  int size=50;//世界的大小  double per=0.1;//起始时生存者占整个世界的比率  int refreshSteps=1;//每演化几步刷新屏幕一次  //参考系数:size=100,per=0.08;网页中:size=50,per=0.1;  boolean running;//运行停启标志  boolean started;//开始标志  int stepLeft=0;//单步运行时使用  int steps=0;//演化的步数  int cyclemax=2000;//cyclemax为记载历史数据的最大限度  int HistoryData[];//历史数据,主要记载每次生存格子的比例  int cCount=0;//每一步生存格子的比例  int delay=50;//cpu每delay10计算一次  int width=300,heightall=350;//定义长宽  int height=300;//作图区域的高  Button pausebutton;  int grid[][][];//计算时确定格子的坐标  int rule[][][][][][][][][];//判断规则,每次预先生成  int cd=0;//用于grid[cd][][],值为0,1交换,实现实际数组和暂存数组的交换  int square,fringe;//作图时方格及空隙大小  boolean isStandalone = false;//系统参数,是否独立运行  /**Get a parameter value*/  public String getParameter(String key, String def) {    return isStandalone ? System.getProperty(key, def) :      (getParameter(key) != null ? getParameter(key) : def);  }  /**Construct the applet*/  public celluar() {      HistoryData=new int[cyclemax];  }  /**Initialize the applet*/  public void init() {    try {      jbInit();    }    catch(Exception e) {      e.printStackTrace();    }  }  /**Component initialization*/  private void jbInit() throws Exception {    resize(width,heightall);//重置窗口大小    pausebutton = new Button("Start");    Button btn=new Button("set");    Button btn1=new Button("+");    Button btn2=new Button("-");    setLayout(new BorderLayout());//定义对齐方式    Panel p = new Panel();//定义一个面板    this.setBackground(Color.black);    p.setBackground(Color.lightGray);    btn1.setLabel("faster");    btn2.setLabel("slower");    p.add(pausebutton);//加控件之后要添加进去    p.add(new Button("Step"));    p.add(btn);    p.add(new Button("show"));    p.add(btn1);    p.add(btn2);    add("South",p);    reinit();//initial一次  }  public void reinit(){    steps=0;//演化步数置零    started=true;//置一下开始,而后129清空,并置为false等待运行    square = width/size-1;    fringe = 1;    grid   = new int[2][size][size];    rule   = new int [2][2][2][2][2][2][2][2][2];    //随机赋值    for(int i=0;i<size;i++){      for(int j=0;j<size;j++){        double ran=Math.random();        if (ran<per){          grid[cd][i][j]=1;        }        else{          grid[cd][i][j]=0;        }      }    }    //自动生成规则  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==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;                  }                }              }            }          }        }      }    }  }    for(int i=0;i<cyclemax;i++){      HistoryData[i]=-1;//给历史纪录赋值    }    repaint();//画出图    update(this.getGraphics());//用于网页中  }   /**Start the applet*/   //必须用到的函数,如果用到implements Runnablepublic void run()   {  repaint();  while (true) {    if (running || stepLeft > 0) {//stepleft为单步运行做的判断;而running为连续运行服务      decision();//确定值      if( (steps % refreshSteps == 0)|| (stepLeft > 0)) repaint();//每个几步画一次      if (stepLeft > 0) stepLeft--;//单步时运行完一步就使stepleft小于0,然后就不再做decision      showStatus("Steps:"+(steps++));//状态条      try{Thread.sleep(delay);}catch(InterruptedException e){};//每隔delay秒cpu运算一次,也就是做一次decision    }    else{try{Thread.sleep(500);}catch(InterruptedException e){};}  }}  public void decision(){    int cCount=0;//每一步的生存者赋初值零    for(int i=0;i<size;i++){      for(int j=0;j<size;j++){        //边界可循环        int x1=((i-1)+size)%size,x3=((i+1)+size)%size,y1=((j-1)+size)%size,y3=((j+1)+size)%size;        //先把值给暂存数组        grid[1-cd][i][j]=rule[grid[cd][i][j]][grid[cd][x1][y1]][grid[cd][i][y1]][grid[cd][x3][y1]][grid[cd][x1][j]][grid[cd][x3][j]][grid[cd][x1][y3]][grid[cd][i][y3]][grid[cd][x3][y3]];        if (grid[1-cd][i][j]==1) cCount++;//记录生存者      }    }  cd=1-cd;//转换成现实数组  int index=steps%cyclemax;//最大记录为cyclemax个  HistoryData[index]=cCount;//记录每次生存者数目  }  public void start() {    if(runner==null){runner=new Thread(this);runner.start();}//启用线程  }  /**Stop the applet*/  public void stop() {    if(runner!=null){    runner.stop();    runner = null;    }  }  /**Destroy the applet*/  public void destroy() {  if(runner!=null){    runner.stop();    runner = null;  }  }  /**Get Applet information*/  public String getAppletInfo() {    return "Applet Information";  }  /**Get parameter info*/  public String[][] getParameterInfo() {    return null;  }  /**Main method*/  public static void main(String[] args) {    celluar applet = new celluar();    applet.isStandalone = true;    Frame frame;    frame = new Frame() {      protected void processWindowEvent(WindowEvent e) {        super.processWindowEvent(e);        if (e.getID() == WindowEvent.WINDOW_CLOSING) {          System.exit(0);        }      }      public synchronized void setTitle(String title) {        super.setTitle(title);        enableEvents(AWTEvent.WINDOW_EVENT_MASK);      }    };    frame.setTitle("Applet Frame");    frame.add(applet, BorderLayout.CENTER);    applet.init();    applet.start();    frame.setSize(300,320);    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();    frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);    frame.setVisible(true);  }public void update(Graphics g) {  paint(g);}//网页中画图public void paint (Graphics g) {  if(started) {g.clearRect(0,0,width,height);started=false;}//初始时清空面板  for(int i=0;i<size;i++){    for(int j=0;j<size;j++){      Color cl;      if(grid[cd][i][j]==1){        cl=Color.orange;      }else{        cl=Color.black;      }      g.setColor(cl);      g.fillRect(i*(square+fringe),j*(square+fringe),square,square);    }  }}//按钮事件public boolean action(Event ev, Object arg){ if ( ev.target instanceof Button) {//instanceof实例        String button = (String) arg;        if (button.equals("Stop")) {            pausebutton.setLabel("Start");            running = false;        }        else if (button.equals("Start")) {            pausebutton.setLabel("Stop");            running = true;        }        else if (button.equals("Step")) {//单步运行            stepLeft = 1;            if (running) {              pausebutton.setLabel("Start");              running = false;            }        }        else if (button.equals("set")){//设置参数          running=false;          CelluarControl ctl=new CelluarControl(this);          ctl.setSize(300,400);          ctl.show();        }        else if (button.equals("show")){//显示数据          ViewLog ctl=new ViewLog(this);          ctl.setSize(550,400);          ctl.show();        }        else if(button.equals("slower")){          if (delay<1000){            delay=delay+50;          }        }        else if(button.equals("faster")){          if (delay>0){            delay=delay-50;          }        }        return true; }else return false;}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -