Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javax.swing.SwingUtilities;
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import javax.swing.event.*;
- import java.util.Hashtable;
- import javax.swing.JSlider;
- import javax.swing.JLabel;
- class PrisonersDilemma implements ActionListener, ChangeListener {
- // Adding frame
- JFrame frame;
- // Adding panels
- PlayingField field; // panel for playingfield
- JPanel interactive; // panel for interactions
- JPanel buttonPanel; // panel for buttons
- JPanel sliderPanel; // panel for sliders
- JPanel defectionPanel; // defection panel
- JPanel frequencyPanel; // frequency panel
- // Adding buttons
- JButton goButton; // create go button
- JButton pauseButton; // create pause button
- JButton resetButton; // create reset button
- //Adding sliders
- JSlider defectionSlider;
- JSlider frequencySlider;
- //Defection slider properties
- static final int defection_MIN = 0; //
- static final int defection_MAX = 30; //
- static final int defection_INIT = 15; // initial defection factor
- //frequency slider properties
- static final int frequency_MIN = 0; //
- static final int frequency_MAX = 60; //
- static final int frequency_INIT = 1; // initial defection factor
- // Timer
- Timer timer;
- int stepTime = 100;
- // settings of the slider
- private int settingMax = 300;
- private int settingInit = 150;
- private double alpha;
- void setAward(int setting) {
- alpha = (double) setting / 100;
- }
- void buildGUI() {
- SwingUtilities.invokeLater( () -> {
- field = new PlayingField();
- frame = new JFrame("Prisoners Dilemma by Rohan & Marijn");
- frame.setSize(700,700); // set size of frame
- frame.setVisible(true);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- // Panel setup
- interactive = new JPanel();
- interactive.setLayout(new BorderLayout());
- buttonPanel = new JPanel();
- sliderPanel = new JPanel();
- sliderPanel.setLayout(new BorderLayout());
- defectionPanel = new JPanel();
- defectionPanel.setLayout(new BorderLayout());
- frequencyPanel = new JPanel();
- frequencyPanel.setLayout(new BorderLayout());
- // button setup
- resetButton = new JButton("Reset");
- resetButton.addActionListener(this);
- pauseButton = new JButton("Pause");
- pauseButton.addActionListener(this);
- goButton = new JButton("Go");
- goButton.addActionListener(this);
- // defection slider setup
- defectionSlider = new JSlider(JSlider.HORIZONTAL, defection_MIN,
- defection_MAX, defection_INIT);
- Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
- labelTable.put(0, new JLabel("0.0"));
- labelTable.put(10, new JLabel("1.0"));
- labelTable.put(20, new JLabel("2.0"));
- labelTable.put(30, new JLabel("3.0"));
- defectionSlider.setLabelTable(labelTable);
- defectionSlider.setPaintLabels(true);
- // frequency slider setup
- frequencySlider = new JSlider(JSlider.HORIZONTAL, frequency_MIN,
- frequency_MAX, frequency_INIT);
- frequencySlider.setMajorTickSpacing(10);
- frequencySlider.setPaintTicks(true);
- frequencySlider.setPaintLabels(true);
- // defection panel building
- defectionPanel.add(new JLabel("defection factor = "));
- defectionPanel.add(defectionSlider, BorderLayout.EAST);
- // frequency panel building
- frequencyPanel.add(new JLabel("frequency = "));
- frequencyPanel.add(frequencySlider, BorderLayout.EAST);
- // slider panel building
- sliderPanel.add(defectionPanel, BorderLayout.WEST);
- sliderPanel.add(frequencyPanel, BorderLayout.EAST);
- // button Panel building
- buttonPanel.add(goButton, BorderLayout.WEST);
- buttonPanel.add(pauseButton, BorderLayout.CENTER);
- buttonPanel.add(resetButton, BorderLayout.EAST);
- // interactive panel building
- interactive.add(buttonPanel, BorderLayout.SOUTH);
- interactive.add(sliderPanel, BorderLayout.NORTH);
- frame.add(interactive, BorderLayout.SOUTH);
- timer = new Timer(stepTime, null);
- timer.addActionListener(this);
- // Frame Building
- field = new PlayingField();
- frame.add(field, BorderLayout.CENTER);
- } );
- }
- // add actions to buttons
- @Override
- public void actionPerformed(ActionEvent e) {
- if (e.getSource() == timer) {
- field.step();
- } else if (e.getActionCommand().equals("GO")) {
- timer.start();
- } else if (e.getActionCommand().equals("Pause")) {
- timer.stop();
- } else if (e.getActionCommand().equals("Reset")) {
- field.revalidate();
- field = new PlayingField();
- frame.add(field, BorderLayout.CENTER);
- }
- }
- @Override
- public void stateChanged(ChangeEvent e) {
- this.setAward(defectionSlider.getValue());
- }
- public static void main( String[] a ) {
- (new PrisonersDilemma()).buildGUI();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement