afeeb686b815b0c9215ecad10136b4f114873d10
[applet-bots.git] / src / appletbots / friendly / FriendlyApplet.java
1 /*
2  * Copyright (c) 2002 Erik Rasmussen - All Rights Reserverd
3  */
4 package appletbots.friendly;
5
6 import appletbots.World;
7 import appletbots.Applet;
8
9 import javax.swing.*;
10 import javax.swing.event.ChangeEvent;
11 import javax.swing.event.ChangeListener;
12 import java.util.Hashtable;
13
14 /**
15  * An applet to run a FriendlyAgent simulation
16  *
17  * @author Erik Rasmussen
18  */
19 public class FriendlyApplet extends Applet
20 {
21         /**
22          * The maximum number of agents allowed
23          */
24         public static final int MAX_NUM_AGENTS = 100;
25         /**
26          * The minimum number of agents allowed
27          */
28         public static final int MIN_NUM_AGENTS = 2;
29         /**
30          * The number of agents
31          */
32         protected int numAgents = 50;
33         /**
34          * The "Number of Agents" slider
35          */
36         protected JSlider numAgentsSlider;
37         /**
38          * The "Number of Agents" label
39          */
40         protected JLabel numAgentsLabel;
41         /**
42          * The maximum agent sight value allowed
43          */
44         public static final int MAX_AGENT_SIGHT = 100;
45         /**
46          * The minimum agent sight value allowed
47          */
48         public static final int MIN_AGENT_SIGHT = 5;
49         /**
50          * The agent sight value
51          */
52         protected int agentSight = 60;
53         /**
54          * The "Agent Sight" slider
55          */
56         protected JSlider agentSightSlider;
57         /**
58          * The "Agent Sight" label
59          */
60         protected JLabel agentSightLabel;
61
62         /**
63          * Initializes the world with the appropriate number of FriendlyAgents
64          * with the appropriate "agent sight" settings
65          *
66          * @return A world with FriendlyAgents
67          */
68         protected World initializeWorld()
69         {
70                 final World world = new World(300, 300);
71                 try
72                 {
73                         for (int i = 0; i < numAgents; i++)
74                                 world.addObject(new FriendlyAgent(5, agentSight, 5, 3));
75                 }
76                 catch (Exception e)
77                 {
78                         e.printStackTrace();
79                 }
80                 return world;
81         }
82
83         /**
84          * Returns a settings panel with "Number of Agents" and "Agent Sight"
85          * sliders
86          *
87          * @return A settings panel with "Number of Agents" and "Agent Sight"
88          *         sliders
89          */
90         protected JPanel getSettingsPanel()
91         {
92                 final JPanel settingsPanel = new JPanel();
93                 settingsPanel.setLayout(new BoxLayout(settingsPanel, BoxLayout.Y_AXIS));
94
95                 numAgentsLabel = new JLabel("Number of Agents: " + numAgents);
96                 numAgentsLabel.setAlignmentX(java.awt.Component.CENTER_ALIGNMENT);
97                 settingsPanel.add(numAgentsLabel);
98
99                 final Hashtable numAgentsLabels = new Hashtable();
100                 numAgentsLabels.put(new Integer(MIN_NUM_AGENTS), new JLabel(Integer.toString(MIN_NUM_AGENTS)));
101                 numAgentsLabels.put(new Integer(MAX_NUM_AGENTS), new JLabel(Integer.toString(MAX_NUM_AGENTS)));
102
103                 numAgentsSlider = new JSlider(MIN_NUM_AGENTS, MAX_NUM_AGENTS, numAgents);
104                 numAgentsSlider.setLabelTable(numAgentsLabels);
105                 numAgentsSlider.setPaintLabels(true);
106                 numAgentsSlider.addChangeListener(new ChangeListener()
107                 {
108                         public void stateChanged(final ChangeEvent event)
109                         {
110                                 numAgentsChanged(event);
111                         }
112                 });
113                 settingsPanel.add(numAgentsSlider);
114
115                 agentSightLabel = new JLabel("Agent Sight: " + agentSight);
116                 agentSightLabel.setAlignmentX(java.awt.Component.CENTER_ALIGNMENT);
117                 settingsPanel.add(agentSightLabel);
118
119                 final Hashtable agentSightLabels = new Hashtable();
120                 agentSightLabels.put(new Integer(MIN_AGENT_SIGHT), new JLabel(Integer.toString(MIN_AGENT_SIGHT)));
121                 agentSightLabels.put(new Integer(MAX_AGENT_SIGHT), new JLabel(Integer.toString(MAX_AGENT_SIGHT)));
122
123                 agentSightSlider = new JSlider(MIN_AGENT_SIGHT, MAX_AGENT_SIGHT, agentSight);
124                 agentSightSlider.setLabelTable(agentSightLabels);
125                 agentSightSlider.setPaintLabels(true);
126                 agentSightSlider.addChangeListener(new ChangeListener()
127                 {
128                         public void stateChanged(final ChangeEvent event)
129                         {
130                                 agentSightChanged(event);
131                         }
132                 });
133                 settingsPanel.add(agentSightSlider);
134
135                 final JLabel changes = new JLabel("Changes will take");
136                 changes.setAlignmentX(java.awt.Component.CENTER_ALIGNMENT);
137                 final JLabel takeEffect = new JLabel("effect at next reset");
138                 takeEffect.setAlignmentX(java.awt.Component.CENTER_ALIGNMENT);
139                 settingsPanel.add(changes);
140                 settingsPanel.add(takeEffect);
141                 return settingsPanel;
142         }
143
144         /**
145          * The method invoked when the "Number of Agents" slider changes
146          *
147          * @param event The change event
148          */
149         public void numAgentsChanged(final ChangeEvent event)
150         {
151                 numAgents = numAgentsSlider.getValue();
152                 numAgentsLabel.setText("Number of Agents: " + numAgents);
153         }
154
155         /**
156          * The method invoked when the "Agent Sight" slider changes
157          *
158          * @param event The change event
159          */
160         public void agentSightChanged(final ChangeEvent event)
161         {
162                 agentSight = agentSightSlider.getValue();
163                 agentSightLabel.setText("Agent Sight: " + agentSight);
164         }
165 }