sim.app.lightcycles.LightCyclesWithUI Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mason Show documentation
Show all versions of mason Show documentation
MASON is a fast discrete-event multiagent simulation library core in Java, designed to be the foundation for large custom-purpose Java simulations, and also to provide more than enough functionality for many lightweight simulation needs. MASON contains both a model library and an optional suite of visualization tools in 2D and 3D.
The newest version!
/*
Copyright 2006 by Daniel Kuebrich
Licensed under the Academic Free License version 3.0
See the file "LICENSE" for more information
*/
package sim.app.lightcycles;
import sim.engine.*;
import sim.display.*;
import sim.portrayal.grid.*;
import java.awt.*;
import javax.swing.*;
public class LightCyclesWithUI extends GUIState
{
public Display2D display;
public JFrame displayFrame;
// For keyboard input
public ControlUI controls;
// gridPortrayal draws the "walls" created in the paths of the cycles
FastValueGridPortrayal2D gridPortrayal = new FastValueGridPortrayal2D();
// cycleGridPortrayal draws the cycles themselves
SparseGridPortrayal2D cycleGridPortrayal = new SparseGridPortrayal2D();
public static void main(String[] args)
{
new LightCyclesWithUI().createController();
}
public LightCyclesWithUI() { super(new LightCycles(System.currentTimeMillis())); }
public LightCyclesWithUI(SimState state) { super(state); }
public static String getName() { return "Light Cycles"; }
public void start()
{
super.start();
// set up our portrayals
setupPortrayals();
// If this is not the first time we have played the sim in this run,
// the user might still have a cycle selected... so clear the cycle var
if(controls != null)
controls.c = null;
}
public void load(SimState state)
{
super.load(state);
// we now have new grids. Set up the portrayals to reflect that
setupPortrayals();
}
public void setupPortrayals()
{
// portray varying levels on the gradient of transparent to red for cycle trails
gridPortrayal.setField(((LightCycles)state).grid);
// make an array of random colors
Color[] colors = new Color[((LightCycles)state).cycleCount+1];
colors[0] = new Color(0,0,0,0);
for(int i = 1 ; i < colors.length; i++)
{ colors[i] = new Color(guirandom.nextInt(255), guirandom.nextInt(255), guirandom.nextInt(255)); }
gridPortrayal.setMap(new sim.util.gui.SimpleColorMap(colors));
// just draw the cycles as white ovals
cycleGridPortrayal.setField(((LightCycles)state).cycleGrid);
cycleGridPortrayal.setPortrayalForClass(Cycle.class,
new sim.portrayal.simple.OvalPortrayal2D(Color.white));
// reschedule the displayer
display.reset();
// redraw the display
display.repaint();
}
public void init(Controller c)
{
super.init(c);
// Make the Display2D. We'll have it display stuff later.
display = new Display2D(400,400,this); // at 400x400, we've got 4x4 per array position
displayFrame = display.createFrame();
c.registerFrame(displayFrame); // register the frame so it appears in the "Display" list
displayFrame.setVisible(true);
// attach the portrayals
display.attach(gridPortrayal,"Paths");
display.attach(cycleGridPortrayal,"Cycles");
// make the ControlUI the first time around
controls = new ControlUI(this, cycleGridPortrayal);
// Specify the backdrop color -- what gets painted behind the displays
display.setBackdrop(new Color(0,0,128));
// or try: display.setBackdrop(new GradientPaint(0,0,Color.green,400,400,Color.blue));
// but be prepared to have to increase the amount of memory because it GC's a lot. But
// it's nifty nonetheless!
}
public void quit()
{
super.quit();
if (displayFrame!=null) displayFrame.dispose();
displayFrame = null; // let gc
display = null; // let gc
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy