2 * Copyright (c) 2002 Erik Rasmussen - All Rights Reserverd
4 package appletbots
.directedballs
;
6 import appletbots
.World
;
7 import appletbots
.balls
.Ball
;
8 import appletbots
.geometry
.Vector
;
9 import appletbots
.Applet
;
12 import javax
.swing
.event
.ChangeEvent
;
13 import javax
.swing
.event
.ChangeListener
;
15 import java
.util
.Hashtable
;
18 * An applet to run a DirectedKicker simulation
20 * @author Erik Rasmussen
22 public class DirectedBallsApplet
extends Applet
25 * The maximum number of red agents allowed
27 public static final int MAX_RED_NUM_AGENTS
= 50;
29 * The minimum number of red agents allowed
31 public static final int MIN_RED_NUM_AGENTS
= 1;
33 * The number of red agents
35 protected int numRedAgents
= 5;
37 * The "Number of Red Agents" slider
39 protected JSlider numRedAgentsSlider
;
41 * The "Number of Red Agents" label
43 protected JLabel numRedAgentsLabel
;
45 * The maximum number of blue agents allowed
47 public static final int MAX_BLUE_NUM_AGENTS
= 50;
49 * The minimum number of blue agents allowed
51 public static final int MIN_BLUE_NUM_AGENTS
= 1;
53 * The number of blue agents
55 protected int numBlueAgents
= 5;
57 * The "Number of Blue Agents" slider
59 protected JSlider numBlueAgentsSlider
;
61 * The "Number of Blue Agents" label
63 protected JLabel numBlueAgentsLabel
;
65 * The maximum agent sight value allowed
67 public static final int MAX_AGENT_SIGHT
= 100;
69 * The minimum agent sight value allowed
71 public static final int MIN_AGENT_SIGHT
= 5;
73 * The agent sight value
75 protected int agentSight
= 60;
77 * The "Agent Sight" slider
79 protected JSlider agentSightSlider
;
81 * The "Agent Sight" label
83 protected JLabel agentSightLabel
;
85 * The maximum number of balls allowed
87 public static final int MAX_NUM_BALLS
= 5;
89 * The minimum number of balls allowed
91 public static final int MIN_NUM_BALLS
= 1;
95 protected int numBalls
= 2;
97 * The "Number of Balls" slider
99 protected JSlider numBallsSlider
;
101 * The "Number of Balls" label
103 protected JLabel numBallsLabel
;
105 * The maximum allowed ball mass
107 public static final int MAX_BALL_MASS
= 100;
109 * The minimum allowed ball mass
111 public static final int MIN_BALL_MASS
= 5;
115 protected int ballMass
= 10;
117 * The "Ball Mass" slider
119 protected JSlider ballMassSlider
;
121 * The "Ball Mass" label
123 protected JLabel ballMassLabel
;
126 * Initializes the world with the appropriate number of balls and
127 * DirectedKickerAgents with the appropriate "agent sight" settings
129 * @return A world with DirectedKickerAgents
131 protected World
initializeWorld()
133 final World world
= new World(300, 300);
136 for (int i
= 0; i
< numBalls
; i
++)
137 world
.addObject(new Ball(10, ballMass
, Color
.red
), Vector
.getRandom(5));
138 for (int i
= 0; i
< numRedAgents
; i
++)
139 world
.addObject(new DirectedKicker(new Vector(0, 1), Color
.pink
, 5, agentSight
, 5, 3));
140 for (int i
= 0; i
< numBlueAgents
; i
++)
141 world
.addObject(new DirectedKicker(new Vector(0, -1), Color
.cyan
, 5, agentSight
, 5, 3));
151 * Returns a settings panel with "Number of Red Agents", "Number of Blue
152 * Agents", "Number of Balls", "Agent Sight", and "Ball Mass" sliders
154 * @return A settings panel with "Number of Red Agents", "Number of Blue
155 * Agents", "Number of Balls", "Agent Sight", and "Ball Mass"
158 protected JPanel
getSettingsPanel()
160 final JPanel settingsPanel
= new JPanel();
161 settingsPanel
.setLayout(new BoxLayout(settingsPanel
, BoxLayout
.Y_AXIS
));
163 numRedAgentsLabel
= new JLabel("Number of Red Agents: " + numRedAgents
);
164 numRedAgentsLabel
.setAlignmentX(java
.awt
.Component
.CENTER_ALIGNMENT
);
165 settingsPanel
.add(numRedAgentsLabel
);
167 final Hashtable numRedAgentsLabels
= new Hashtable();
168 numRedAgentsLabels
.put(new Integer(MIN_RED_NUM_AGENTS
), new JLabel(Integer
.toString(MIN_RED_NUM_AGENTS
)));
169 numRedAgentsLabels
.put(new Integer(MAX_RED_NUM_AGENTS
), new JLabel(Integer
.toString(MAX_RED_NUM_AGENTS
)));
171 numRedAgentsSlider
= new JSlider(MIN_RED_NUM_AGENTS
, MAX_RED_NUM_AGENTS
, numRedAgents
);
172 numRedAgentsSlider
.setLabelTable(numRedAgentsLabels
);
173 numRedAgentsSlider
.setPaintLabels(true);
174 numRedAgentsSlider
.addChangeListener(new javax
.swing
.event
.ChangeListener()
176 public void stateChanged(final ChangeEvent event
)
178 numRedAgentsChanged(event
);
181 settingsPanel
.add(numRedAgentsSlider
);
183 numBlueAgentsLabel
= new JLabel("Number of Blue Agents: " + numBlueAgents
);
184 numBlueAgentsLabel
.setAlignmentX(java
.awt
.Component
.CENTER_ALIGNMENT
);
185 settingsPanel
.add(numBlueAgentsLabel
);
187 final Hashtable numBlueAgentsLabels
= new Hashtable();
188 numBlueAgentsLabels
.put(new Integer(MIN_BLUE_NUM_AGENTS
), new JLabel(Integer
.toString(MIN_BLUE_NUM_AGENTS
)));
189 numBlueAgentsLabels
.put(new Integer(MAX_BLUE_NUM_AGENTS
), new JLabel(Integer
.toString(MAX_BLUE_NUM_AGENTS
)));
191 numBlueAgentsSlider
= new JSlider(MIN_BLUE_NUM_AGENTS
, MAX_BLUE_NUM_AGENTS
, numBlueAgents
);
192 numBlueAgentsSlider
.setLabelTable(numBlueAgentsLabels
);
193 numBlueAgentsSlider
.setPaintLabels(true);
194 numBlueAgentsSlider
.addChangeListener(new ChangeListener()
196 public void stateChanged(final ChangeEvent event
)
198 numBlueAgentsChanged(event
);
201 settingsPanel
.add(numBlueAgentsSlider
);
203 agentSightLabel
= new JLabel("Agent Sight: " + agentSight
);
204 agentSightLabel
.setAlignmentX(java
.awt
.Component
.CENTER_ALIGNMENT
);
205 settingsPanel
.add(agentSightLabel
);
207 final Hashtable agentSightLabels
= new Hashtable();
208 agentSightLabels
.put(new Integer(MIN_AGENT_SIGHT
), new JLabel(Integer
.toString(MIN_AGENT_SIGHT
)));
209 agentSightLabels
.put(new Integer(MAX_AGENT_SIGHT
), new JLabel(Integer
.toString(MAX_AGENT_SIGHT
)));
211 agentSightSlider
= new JSlider(MIN_AGENT_SIGHT
, MAX_AGENT_SIGHT
, agentSight
);
212 agentSightSlider
.setLabelTable(agentSightLabels
);
213 agentSightSlider
.setPaintLabels(true);
214 agentSightSlider
.addChangeListener(new ChangeListener()
216 public void stateChanged(final ChangeEvent event
)
218 agentSightChanged(event
);
221 settingsPanel
.add(agentSightSlider
);
223 numBallsLabel
= new JLabel("Number of Balls: " + numBalls
);
224 numBallsLabel
.setAlignmentX(java
.awt
.Component
.CENTER_ALIGNMENT
);
225 settingsPanel
.add(numBallsLabel
);
227 final Hashtable numBallsLabels
= new Hashtable();
228 numBallsLabels
.put(new Integer(MIN_NUM_BALLS
), new JLabel(Integer
.toString(MIN_NUM_BALLS
)));
229 numBallsLabels
.put(new Integer(MAX_NUM_BALLS
), new JLabel(Integer
.toString(MAX_NUM_BALLS
)));
231 numBallsSlider
= new JSlider(MIN_NUM_BALLS
, MAX_NUM_BALLS
, numBalls
);
232 numBallsSlider
.setLabelTable(numBallsLabels
);
233 numBallsSlider
.setPaintLabels(true);
234 numBallsSlider
.addChangeListener(new ChangeListener()
236 public void stateChanged(final ChangeEvent event
)
238 numBallsChanged(event
);
241 settingsPanel
.add(numBallsSlider
);
243 ballMassLabel
= new JLabel("Ball Mass: " + ballMass
);
244 ballMassLabel
.setAlignmentX(java
.awt
.Component
.CENTER_ALIGNMENT
);
245 settingsPanel
.add(ballMassLabel
);
247 final Hashtable ballMassLabels
= new Hashtable();
248 ballMassLabels
.put(new Integer(MIN_BALL_MASS
), new JLabel(Integer
.toString(MIN_BALL_MASS
)));
249 ballMassLabels
.put(new Integer(MAX_BALL_MASS
), new JLabel(Integer
.toString(MAX_BALL_MASS
)));
251 ballMassSlider
= new JSlider(MIN_BALL_MASS
, MAX_BALL_MASS
, ballMass
);
252 ballMassSlider
.setLabelTable(ballMassLabels
);
253 ballMassSlider
.setPaintLabels(true);
254 ballMassSlider
.addChangeListener(new ChangeListener()
256 public void stateChanged(final ChangeEvent event
)
258 ballMassChanged(event
);
261 settingsPanel
.add(ballMassSlider
);
263 final JLabel changes
= new JLabel("Changes will take");
264 changes
.setAlignmentX(java
.awt
.Component
.CENTER_ALIGNMENT
);
265 final JLabel takeEffect
= new JLabel("effect at next reset");
266 takeEffect
.setAlignmentX(java
.awt
.Component
.CENTER_ALIGNMENT
);
267 settingsPanel
.add(changes
);
268 settingsPanel
.add(takeEffect
);
269 return settingsPanel
;
273 * The method invoked when the "Number of Red Agents" slider changes
275 * @param event The change event
277 public void numRedAgentsChanged(final ChangeEvent event
)
279 numRedAgents
= numRedAgentsSlider
.getValue();
280 numRedAgentsLabel
.setText("Number of Red Agents: " + numRedAgents
);
284 * The method invoked when the "Number of Blue Agents" slider changes
286 * @param event The change event
288 public void numBlueAgentsChanged(final ChangeEvent event
)
290 numBlueAgents
= numBlueAgentsSlider
.getValue();
291 numBlueAgentsLabel
.setText("Number of Blue Agents: " + numBlueAgents
);
295 * The method invoked when the "Agent Sight" slider changes
297 * @param event The change event
299 public void agentSightChanged(final ChangeEvent event
)
301 agentSight
= agentSightSlider
.getValue();
302 agentSightLabel
.setText("Agent Sight: " + agentSight
);
306 * The method invoked when the "Number of Balls" slider changes
308 * @param event The change event
310 public void numBallsChanged(final ChangeEvent event
)
312 numBalls
= numBallsSlider
.getValue();
313 numBallsLabel
.setText("Number of Balls: " + numBalls
);
317 * The method invoked when the "Ball Mass" slider changes
319 * @param event The change event
321 public void ballMassChanged(final ChangeEvent event
)
323 ballMass
= ballMassSlider
.getValue();
324 ballMassLabel
.setText("Ball Mass: " + ballMass
);