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

📄 zoomview.java

📁 Autolife模型是一个能够进行“开放式进化”的人工生命系统。每个Agent模型采用可以变化规则表长度的有限自动机模型建模。一方面Agent可以进行自我繁殖
💻 JAVA
字号:
package lifetest;

import java.awt.Frame;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
/**
 * Title:        LifeSim
 * Description:
 * Copyright:    Copyright (c) 2004
 * Company:      www.swarmagents.com
 * @author jake
 * @version 1.0
 */

public class zoomView extends Frame implements Runnable{
  //Choice agents;
  Thread runner1;//定义独立线程
  Choice lstChoice=new Choice();
  Button btnOK = new Button("OK");
  Button btnCancel=new Button("Cancel");
  Button btnRefresh = new Button("Refresh");
  TextArea des;
  TextArea rules;
  Choice lstAg=new Choice();
  lifesim localapp;
  Panel pan;
  Panel controlPan;
  Panel centralPan;
  Point leftTopPoint;
  Point rightBotPoint;
  Point startPoint;
  Point endPoint;
  boolean doOrder=false;
  int nSelAgent;
  int Order[];
  int selectType=0;
  Vector agSelected=new Vector();
  public zoomView(lifesim local,Point pt1,Point pt2) {
	  localapp=local;
	  startPoint=pt1;
	  endPoint=pt2;
	  leftTopPoint=new Point(pt1);
	  rightBotPoint=new Point(pt2);
	  if(pt1.x>pt2.x){
	  	leftTopPoint.x=pt2.x;
	  	rightBotPoint.x=pt1.x;
	  }
	  if(pt1.y>pt2.y){
	 	leftTopPoint.y=pt2.y;
		rightBotPoint.y=pt1.y;
	  }
  try {
	  jbInit();
	}
	catch(Exception e) {
	  e.printStackTrace();
	}
  }

  public zoomView() {
	try {
	  jbInit();
	}
	catch(Exception e) {
	  e.printStackTrace();
	}
  }
  private void jbInit() throws Exception {

	setLayout(new BorderLayout());
	pan=new Panel();
	pan.setLayout(new BorderLayout());
	controlPan=new Panel();
	centralPan=new Panel();
	centralPan.setLayout(new BorderLayout());
	des=new TextArea();
	rules=new TextArea();
	this.addWindowListener(new java.awt.event.WindowAdapter() {
	public void windowOpened(WindowEvent e) {
		   this_windowOpened(e);
		 }
	  public void windowClosing(WindowEvent e) {
		this_windowClosing(e);
	  }
	});
	
	centralPan.add("North",lstAg);
	centralPan.add("Center",rules);
	
    pan.add("North",des);
    pan.add("Center",centralPan);
    
    lstChoice.addItem("Select action:");
	lstChoice.addItem("Delete all selected");
	lstChoice.addItem("Delete grasses and seeds");
	lstChoice.addItem("Delete grasses");
	lstChoice.addItem("Fill with grasses");
	lstChoice.addItem("Gradiant grass");
	lstChoice.addItem("Delete agents");
	lstChoice.addItem("Copy agents");
	lstChoice.addItem("Cut agents");
	lstChoice.addItem("Paste agents");
	pan.add("South",lstChoice);

	this.add("Center",pan);
	this.add("South",controlPan);
	controlPan.add(btnOK);
	controlPan.add(btnCancel);

	String out="";
		agSelected.removeAllElements();
		int agCount=0;
		int seedCount=0;
		int grassCount=0;
		for(int i=0;i<localapp.localwd.agents.size();i++){
			agent ag1=(agent)localapp.localwd.agents.elementAt(i);
			if(ag1.x>leftTopPoint.x&&ag1.x<rightBotPoint.x&&ag1.y>leftTopPoint.y&&ag1.y<rightBotPoint.y){
				agCount++;
				agSelected.addElement(ag1);
			}
		  }
		  for(int i=leftTopPoint.x;i<rightBotPoint.x;i++){
			for(int j=leftTopPoint.y;j<rightBotPoint.y;j++){
					if(localapp.localwd.WorldState[i][j]==1){
						grassCount++;
					}else if(localapp.localwd.WorldState[i][j]==2){
						seedCount++;
					}
			}
		  }
		  out="****************NOTES*******************\n";
		  out+="You have selected "+Integer.toString(agCount)+" agents\n";
		  out+="and "+Integer.toString(grassCount)+" grasses\n";
		  out+="and "+Integer.toString(seedCount)+" seeds";
		  des.setText(out);
		 doOrder=true;
	//lstAg.select(0);

  }
  public void paint(Graphics g){
		super.paint(g);
  }
  public boolean action(Event evt, Object o) {
	if(evt.target==lstChoice){
	  selectType=lstChoice.getSelectedIndex()-1;
	  return true;
	}else if(evt.target==btnOK){
		if(selectType<=5&&selectType>=0){
			if(selectType!=4){
				localapp.localwd.DealWithSelected(leftTopPoint,rightBotPoint,agSelected,selectType,1);
			}else{
				localapp.localwd.DealWithSelected(startPoint,endPoint,agSelected,selectType,localapp.gValue);
			}
		}else{
			switch(selectType){
				case 6:
					localapp.localwd.copyAgents(agSelected,leftTopPoint.x,leftTopPoint.y);
					break;
				case 7:
					localapp.localwd.copyAgents(agSelected,leftTopPoint.x,leftTopPoint.y);
					localapp.localwd.DeleteAgents(leftTopPoint,rightBotPoint,agSelected);
					break;
				case 8:
					localapp.localwd.pasteAgents(leftTopPoint,rightBotPoint);
					break;
			}
		}
		localapp.enable(true);
		//localapp.running=true;
		localapp.canvas.repaint();
		this.hide();
		this.dispose();
		return true;
	}else if(evt.target==btnCancel){
		localapp.enable(true);
		//localapp.running=true;
		localapp.canvas.repaint();
		this.dispose();
	}else if(evt.target==lstAg){
		refreshRules();
		return true;
  	}else if(evt.target==btnRefresh){
		lstAg.select(nSelAgent);
		repaint();
		refreshRules();
		return true;
	 }

 	 return false;
	}
	private void refreshRules(){
		nSelAgent=lstAg.getSelectedIndex()-1;
		agent ag=(agent)localapp.localwd.agents.elementAt(Order[agSelected.size()-1-nSelAgent]);
		String out="**************Rules of your selected agents*************\n";
		for(int i=0;i<ag.rules.size();i++){
		  out+=ag.ReadRules(i,"");
		  out+="\n";
		}
		rules.setText(out);
	}
void this_windowOpened(WindowEvent e) {
	 if(runner1==null){
	   runner1=new Thread(this);
	   runner1.start();
	 }
   }

 void this_windowClosing(WindowEvent e) {
 	localapp.enable(true);
 	//localapp.running=true;
	localapp.canvas.repaint();
	this.hide();
	this.dispose();
	
  }
  public void stop() {
	if (runner1!=null)
	{
	  // running = false;
		runner1.stop();
	   runner1=null;
	}

  }
  public void run()   {
	while(true){
		if(doOrder){
				String out="";
				lstAg.removeAll();
				int count=agSelected.size();
				out="selected agents' conditions: ";
				lstAg.add(out);
				
				Order=new int[count];
				for(int i=0;i<count;i++){
				  Order[i]=i;
				}
				for(int i=count-1;i>=0;i--){
				  for(int j=0;j<i;j++){
					agent ag1=(agent)localapp.localwd.agents.elementAt(Order[j]);
					agent ag2=(agent)localapp.localwd.agents.elementAt(Order[j+1]);
					if(ag1.age>ag2.age){
					  int t=Order[j+1];
					  Order[j+1]=Order[j];
					  Order[j]=t;
					}
				  }

				  agent ag=(agent)localapp.localwd.agents.elementAt(Order[i]);
				  out="No."+Integer.toString(Order[i])+",  Age:"+Integer.toString(ag.age)+",  RulesNumber:"+Integer.toString(ag.rules.size())+",  E:"+Integer.toString(ag.energy);
				  lstAg.add(out);
				}
				doOrder=false;
		}
		try{Thread.sleep(20);}catch(InterruptedException e){};
	}
  }

}

⌨️ 快捷键说明

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