initial commit
[applet-bots.git] / src / appletbots / directedballs / DirectedBallsApplet.java
blob6390d5e063c0a4bdb6d55e7f4e4e63e7496f5bb9
1 /*
2 * Copyright (c) 2002 Erik Rasmussen - All Rights Reserverd
3 */
4 package appletbots.directedballs;
6 import appletbots.World;
7 import appletbots.balls.Ball;
8 import appletbots.geometry.Vector;
9 import appletbots.Applet;
11 import javax.swing.*;
12 import javax.swing.event.ChangeEvent;
13 import javax.swing.event.ChangeListener;
14 import java.awt.*;
15 import java.util.Hashtable;
17 /**
18 * An applet to run a DirectedKicker simulation
20 * @author Erik Rasmussen
22 public class DirectedBallsApplet extends Applet
24 /**
25 * The maximum number of red agents allowed
27 public static final int MAX_RED_NUM_AGENTS = 50;
28 /**
29 * The minimum number of red agents allowed
31 public static final int MIN_RED_NUM_AGENTS = 1;
32 /**
33 * The number of red agents
35 protected int numRedAgents = 5;
36 /**
37 * The "Number of Red Agents" slider
39 protected JSlider numRedAgentsSlider;
40 /**
41 * The "Number of Red Agents" label
43 protected JLabel numRedAgentsLabel;
44 /**
45 * The maximum number of blue agents allowed
47 public static final int MAX_BLUE_NUM_AGENTS = 50;
48 /**
49 * The minimum number of blue agents allowed
51 public static final int MIN_BLUE_NUM_AGENTS = 1;
52 /**
53 * The number of blue agents
55 protected int numBlueAgents = 5;
56 /**
57 * The "Number of Blue Agents" slider
59 protected JSlider numBlueAgentsSlider;
60 /**
61 * The "Number of Blue Agents" label
63 protected JLabel numBlueAgentsLabel;
64 /**
65 * The maximum agent sight value allowed
67 public static final int MAX_AGENT_SIGHT = 100;
68 /**
69 * The minimum agent sight value allowed
71 public static final int MIN_AGENT_SIGHT = 5;
72 /**
73 * The agent sight value
75 protected int agentSight = 60;
76 /**
77 * The "Agent Sight" slider
79 protected JSlider agentSightSlider;
80 /**
81 * The "Agent Sight" label
83 protected JLabel agentSightLabel;
84 /**
85 * The maximum number of balls allowed
87 public static final int MAX_NUM_BALLS = 5;
88 /**
89 * The minimum number of balls allowed
91 public static final int MIN_NUM_BALLS = 1;
92 /**
93 * The number of balls
95 protected int numBalls = 2;
96 /**
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;
113 * The ball mass
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));
143 catch (Exception e)
145 e.printStackTrace();
147 return world;
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"
156 * sliders
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);