initial commit
[applet-bots.git] / src / appletbots / balls / BallsApplet.java
blobc0a133cc6a05d2e83cff0a5e0917b8d89fabad5a
1 /*
2 * Copyright (c) 2002 Erik Rasmussen - All Rights Reserverd
3 */
4 package appletbots.balls;
6 import appletbots.World;
7 import appletbots.geometry.Vector;
8 import appletbots.Applet;
10 import javax.swing.*;
11 import javax.swing.event.ChangeEvent;
12 import javax.swing.event.ChangeListener;
13 import java.awt.*;
14 import java.util.Hashtable;
16 /**
17 * An applet to run a KickerAgent simulation
19 * @author Erik Rasmussen
21 public class BallsApplet extends Applet
23 /**
24 * The maximum number of agents allowed
26 public static final int MAX_NUM_AGENTS = 50;
27 /**
28 * The minimum number of agents allowed
30 public static final int MIN_NUM_AGENTS = 1;
31 /**
32 * The number of agents
34 protected int numAgents = 10;
35 /**
36 * The "Number of Agents" slider
38 protected JSlider numAgentsSlider;
39 /**
40 * The "Number of Agents" label
42 protected JLabel numAgentsLabel;
43 /**
44 * The maximum agent sight value allowed
46 public static final int MAX_AGENT_SIGHT = 100;
47 /**
48 * The minimum agent sight value allowed
50 public static final int MIN_AGENT_SIGHT = 5;
51 /**
52 * The agent sight value
54 protected int agentSight = 60;
55 /**
56 * The "Agent Sight" slider
58 protected JSlider agentSightSlider;
59 /**
60 * The "Agent Sight" label
62 protected JLabel agentSightLabel;
63 /**
64 * The maximum number of balls allowed
66 public static final int MAX_NUM_BALLS = 5;
67 /**
68 * The minimum number of balls allowed
70 public static final int MIN_NUM_BALLS = 1;
71 /**
72 * The number of balls
74 protected int numBalls = 2;
75 /**
76 * The "Number of Balls" slider
78 protected JSlider numBallsSlider;
79 /**
80 * The "Number of Balls" label
82 protected JLabel numBallsLabel;
83 /**
84 * The maximum allowed ball mass
86 public static final int MAX_BALL_MASS = 100;
87 /**
88 * The minimum allowed ball mass
90 public static final int MIN_BALL_MASS = 5;
91 /**
92 * The ball mass
94 protected int ballMass = 10;
95 /**
96 * The "Ball Mass" slider
98 protected JSlider ballMassSlider;
99 /**
100 * The "Ball Mass" label
102 protected JLabel ballMassLabel;
105 * Initializes the world with the appropriate number of balls and
106 * KickerAgents with the appropriate "agent sight" settings
108 * @return A world with KickerAgents
110 protected World initializeWorld()
112 final World world = new World(300, 300);
115 for (int i = 0; i < numBalls; i++)
116 world.addObject(new Ball(10, ballMass, Color.red), Vector.getRandom(5));
117 for (int i = 0; i < numAgents; i++)
118 world.addObject(new Kicker(5, agentSight, 5, 3));
120 catch (Exception e)
122 e.printStackTrace();
124 return world;
128 * Returns a settings panel with "Number of Agents", "Number of Balls",
129 * "Agent Sight", and "Ball Mass" sliders
131 * @return A settings panel with "Number of Agents", "Number of Balls",
132 * "Agent Sight", and "Ball Mass" sliders
134 protected JPanel getSettingsPanel()
136 final JPanel settingsPanel = new JPanel();
137 settingsPanel.setLayout(new BoxLayout(settingsPanel, BoxLayout.Y_AXIS));
139 numAgentsLabel = new JLabel("Number of Agents: " + numAgents);
140 numAgentsLabel.setAlignmentX(java.awt.Component.CENTER_ALIGNMENT);
141 settingsPanel.add(numAgentsLabel);
143 final Hashtable numAgentsLabels = new Hashtable();
144 numAgentsLabels.put(new Integer(MIN_NUM_AGENTS), new JLabel(Integer.toString(MIN_NUM_AGENTS)));
145 numAgentsLabels.put(new Integer(MAX_NUM_AGENTS), new JLabel(Integer.toString(MAX_NUM_AGENTS)));
147 numAgentsSlider = new JSlider(MIN_NUM_AGENTS, MAX_NUM_AGENTS, numAgents);
148 numAgentsSlider.setLabelTable(numAgentsLabels);
149 numAgentsSlider.setPaintLabels(true);
150 numAgentsSlider.addChangeListener(new ChangeListener()
152 public void stateChanged(final ChangeEvent event)
154 numAgentsChanged(event);
157 settingsPanel.add(numAgentsSlider);
159 agentSightLabel = new JLabel("Agent Sight: " + agentSight);
160 agentSightLabel.setAlignmentX(java.awt.Component.CENTER_ALIGNMENT);
161 settingsPanel.add(agentSightLabel);
163 final Hashtable agentSightLabels = new Hashtable();
164 agentSightLabels.put(new Integer(MIN_AGENT_SIGHT), new JLabel(Integer.toString(MIN_AGENT_SIGHT)));
165 agentSightLabels.put(new Integer(MAX_AGENT_SIGHT), new JLabel(Integer.toString(MAX_AGENT_SIGHT)));
166 agentSightSlider = new JSlider(MIN_AGENT_SIGHT, MAX_AGENT_SIGHT, agentSight);
167 agentSightSlider.setLabelTable(agentSightLabels);
168 agentSightSlider.setPaintLabels(true);
169 agentSightSlider.addChangeListener(new ChangeListener()
171 public void stateChanged(final ChangeEvent event)
173 agentSightChanged(event);
176 settingsPanel.add(agentSightSlider);
178 numBallsLabel = new JLabel("Number of Balls: " + numBalls);
179 numBallsLabel.setAlignmentX(java.awt.Component.CENTER_ALIGNMENT);
180 settingsPanel.add(numBallsLabel);
182 final Hashtable numBallsLabels = new Hashtable();
183 numBallsLabels.put(new Integer(MIN_NUM_BALLS), new JLabel(Integer.toString(MIN_NUM_BALLS)));
184 numBallsLabels.put(new Integer(MAX_NUM_BALLS), new JLabel(Integer.toString(MAX_NUM_BALLS)));
186 numBallsSlider = new JSlider(MIN_NUM_BALLS, MAX_NUM_BALLS, numBalls);
187 numBallsSlider.setLabelTable(numBallsLabels);
188 numBallsSlider.setPaintLabels(true);
189 numBallsSlider.addChangeListener(new ChangeListener()
191 public void stateChanged(final ChangeEvent event)
193 numBallsChanged(event);
196 settingsPanel.add(numBallsSlider);
198 ballMassLabel = new JLabel("Ball Mass: " + ballMass);
199 ballMassLabel.setAlignmentX(java.awt.Component.CENTER_ALIGNMENT);
200 settingsPanel.add(ballMassLabel);
202 final Hashtable ballMassLabels = new Hashtable();
203 ballMassLabels.put(new Integer(MIN_BALL_MASS), new JLabel(Integer.toString(MIN_BALL_MASS)));
204 ballMassLabels.put(new Integer(MAX_BALL_MASS), new JLabel(Integer.toString(MAX_BALL_MASS)));
206 ballMassSlider = new JSlider(MIN_BALL_MASS, MAX_BALL_MASS, ballMass);
207 ballMassSlider.setLabelTable(ballMassLabels);
208 ballMassSlider.setPaintLabels(true);
209 ballMassSlider.addChangeListener(new ChangeListener()
211 public void stateChanged(final ChangeEvent event)
213 ballMassChanged(event);
216 settingsPanel.add(ballMassSlider);
218 final JLabel changes = new JLabel("Changes will take");
219 changes.setAlignmentX(java.awt.Component.CENTER_ALIGNMENT);
220 final JLabel takeEffect = new JLabel("effect at next reset");
221 takeEffect.setAlignmentX(java.awt.Component.CENTER_ALIGNMENT);
222 settingsPanel.add(changes);
223 settingsPanel.add(takeEffect);
224 return settingsPanel;
228 * The method invoked when the "Number of Agents" slider changes
230 * @param event The change event
232 public void numAgentsChanged(final ChangeEvent event)
234 numAgents = numAgentsSlider.getValue();
235 numAgentsLabel.setText("Number of Agents: " + numAgents);
239 * The method invoked when the "Agent Sight" slider changes
241 * @param event The change event
243 public void agentSightChanged(final ChangeEvent event)
245 agentSight = agentSightSlider.getValue();
246 agentSightLabel.setText("Agent Sight: " + agentSight);
250 * The method invoked when the "Number of Balls" slider changes
252 * @param event The change event
254 public void numBallsChanged(final ChangeEvent event)
256 numBalls = numBallsSlider.getValue();
257 numBallsLabel.setText("Number of Balls: " + numBalls);
261 * The method invoked when the "Ball Mass" slider changes
263 * @param event The change event
265 public void ballMassChanged(final ChangeEvent event)
267 ballMass = ballMassSlider.getValue();
268 ballMassLabel.setText("Ball Mass: " + ballMass);