Package org.ggp.base.apps.player

Source Code of org.ggp.base.apps.player.Player

package org.ggp.base.apps.player;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

import org.ggp.base.apps.player.config.ConfigPanel;
import org.ggp.base.apps.player.detail.DetailPanel;
import org.ggp.base.apps.player.match.MatchPanel;
import org.ggp.base.apps.player.network.NetworkPanel;
import org.ggp.base.player.GamePlayer;
import org.ggp.base.player.gamer.Gamer;
import org.ggp.base.util.reflection.ProjectSearcher;
import org.ggp.base.util.ui.NativeUI;

import com.google.common.collect.Lists;


@SuppressWarnings("serial")
public final class Player extends JPanel
{
  private static void createAndShowGUI(Player playerPanel)
  {
    JFrame frame = new JFrame("Game Player");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.setPreferredSize(new Dimension(1024, 768));
    frame.getContentPane().add(playerPanel);

    frame.pack();
    frame.setVisible(true);
  }

  public static void main(String[] args) throws IOException
  {
      NativeUI.setNativeUI();

      final Player playerPanel = new Player();
      javax.swing.SwingUtilities.invokeLater(new Runnable()
      {

    @Override
    public void run()
    {
        createAndShowGUI(playerPanel);
    }
      });
  }

  private final JButton createButton;
  private final JTabbedPane playersTabbedPane;

  private final JTextField portTextField;

  private final JComboBox<String> typeComboBox;

  private Integer defaultPort = 9147;

  private List<Class<? extends Gamer>> gamers = Lists.newArrayList(ProjectSearcher.GAMERS.getConcreteClasses());

  public Player()
  {
    super(new GridBagLayout());

    portTextField = new JTextField(defaultPort.toString());
    typeComboBox = new JComboBox<String>();
    createButton = new JButton(createButtonMethod());
    playersTabbedPane = new JTabbedPane();

    portTextField.setColumns(15);

    // Sort the list of gamers before displaying it to the user
    java.util.Collections.sort(gamers, new Comparator<Class<? extends Gamer>>() {
      @Override
      public int compare(Class<? extends Gamer> left, Class<? extends Gamer> right) {
        return left.getSimpleName().compareTo(right.getSimpleName());
      }
    });

    List<Class<? extends Gamer>> gamersCopy = new ArrayList<Class<? extends Gamer>>(gamers);
    for(Class<? extends Gamer> gamer : gamersCopy)
    {
      Gamer g;
      try {
        g = gamer.newInstance();
        typeComboBox.addItem(g.getName());
      } catch(Exception ex) {
          gamers.remove(gamer);
      }
    }
    typeComboBox.setSelectedItem("Random");

    JPanel managerPanel = new JPanel(new GridBagLayout());
    managerPanel.setBorder(new TitledBorder("Manager"));

    managerPanel.add(new JLabel("Port:"), new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(20, 5, 5, 5), 5, 5));
    managerPanel.add(portTextField, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(20, 5, 5, 5), 5, 5));
    managerPanel.add(new JLabel("Type:"), new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 5, 5));
    managerPanel.add(typeComboBox, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 5, 5));
    managerPanel.add(createButton, new GridBagConstraints(1, 2, 1, 1, 1.0, 1.0, GridBagConstraints.SOUTH, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));

    JPanel playersPanel = new JPanel(new GridBagLayout());
    playersPanel.setBorder(new TitledBorder("Players"));

    playersPanel.add(playersTabbedPane, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 5, 5));

    this.add(managerPanel, new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 5, 5));
    this.add(playersPanel, new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 5, 5));
  }

  private AbstractAction createButtonMethod()
  {
    return new AbstractAction("Create")
    {

      @Override
      public void actionPerformed(ActionEvent evt)
      {
        try
        {
          int port = Integer.valueOf(portTextField.getText());
          String type = (String) typeComboBox.getSelectedItem();

          MatchPanel matchPanel = new MatchPanel();
          NetworkPanel networkPanel = new NetworkPanel();
          DetailPanel detailPanel = null;
          ConfigPanel configPanel = null;
          Gamer gamer = null;

          Class<?> gamerClass = gamers.get(typeComboBox.getSelectedIndex());
          try {
            gamer = (Gamer) gamerClass.newInstance();
          } catch(Exception ex) { throw new RuntimeException(ex); }
          detailPanel = gamer.getDetailPanel();
          configPanel = gamer.getConfigPanel();

          gamer.addObserver(matchPanel);
          gamer.addObserver(detailPanel);

          GamePlayer player = new GamePlayer(port, gamer);
          player.addObserver(networkPanel);
          player.start();

          JTabbedPane tab = new JTabbedPane();
          tab.addTab("Match", matchPanel);
          tab.addTab("Network", networkPanel);
          tab.addTab("Configuration", configPanel);
          tab.addTab("Detail", detailPanel);
          playersTabbedPane.addTab(type + " (" + player.getGamerPort() + ")", tab);
          playersTabbedPane.setSelectedIndex(playersTabbedPane.getTabCount()-1);

          defaultPort++;
          portTextField.setText(defaultPort.toString());
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
      }
    };
  }
}
TOP

Related Classes of org.ggp.base.apps.player.Player

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.