// CarryDropModel.java
package demo;
import java.awt.Color;
import uchicago.src.sim.engine.Schedule;
import uchicago.src.sim.engine.SimInit;
import uchicago.src.sim.engine.SimModelImpl;
import uchicago.src.sim.gui.DisplaySurface;
import uchicago.src.sim.gui.ColorMap;
import uchicago.src.sim.gui.Value2DDisplay;
public class CarryDropModel
extends SimModelImpl {
// Default Values
private static final int NUMAGENTS = 100;
private static final int WORLDXSIZE = 40;
private static final int WORLDYSIZE = 40;
private static final int TOTALMONEY = 1000;
private int numAgents = NUMAGENTS;
private int worldXSize = WORLDXSIZE;
private int worldYSize = WORLDYSIZE;
private int money = TOTALMONEY;
private Schedule schedule;
private CarryDropSpace cdSpace;
private DisplaySurface displaySurf;
public String getName(){
return "Carry And Drop";
}
public void setup(){
System.out.println("Running setup");
cdSpace =
null;
if (displaySurf !=
null){
displaySurf.dispose();
}
displaySurf =
null;
displaySurf =
new DisplaySurface(
this, "Carry Drop Model Window 1"); //为这个model创建一个DisplaySurface对象,当然,这个对象的一些性质肯定是依赖这个model的参数的。创建出来的DisplaySurface只是用了这个model的一些参数并没有相互绑定依赖,是一种初始化才干的事情。
registerDisplaySurface("Carry Drop Model Window 1", displaySurf); //让这个model注册一个DisplaySurface,把DisplaySurface与这个model绑定起来
}
public void begin(){
buildModel();
buildSchedule();
buildDisplay();
displaySurf.display();
}
public void buildModel(){
System.out.println("Running BuildModel");
cdSpace =
new CarryDropSpace(worldXSize, worldYSize);
cdSpace.spreadMoney(money);
}
public void buildSchedule(){
System.out.println("Running BuildSchedule");
}
public void buildDisplay(){
System.out.println("Running BuildDisplay");
ColorMap map =
new ColorMap(); //顾名思义,这是一个color板,键值对应形式。
for(
int i = 1; i<16; i++){
map.mapColor(i,
new Color((
int)(i * 8 + 127), 0, 0));
}
map.mapColor(0, Color.white);
Value2DDisplay displayMoney =
new Value2DDisplay(cdSpace.getCurrentMoneySpace(), map); // 创建一个Value2DDisplay,用来将Discrete2DSpace与ColorMap绑定。
displaySurf.addDisplayable(displayMoney, "Money");
}
public Schedule getSchedule(){
return schedule;
}
public String[] getInitParam(){
String[] initParams = { "NumAgents" , "WorldXSize", "WorldYSize", "Money" };
return initParams;
}
public int getNumAgents(){
return numAgents;
}
public void setNumAgents(
int na){
numAgents = na;
}
public int getWorldXSize(){
return worldXSize;
}
public void setWorldXSize(
int wxs){
worldXSize = wxs;
}
public int getWorldYSize(){
return worldYSize;
}
public void setWorldYSize(
int wys){
worldYSize = wys;
}
public int getMoney() {
return money;
}
public void setMoney(
int i) {
money = i;
}
public static void main(String[] args) {
SimInit init =
new SimInit();
CarryDropModel model =
new CarryDropModel();
init.loadModel(model, "",
false);
}
}