Advertisement
Guest User

Starcraft2Helper

a guest
Apr 25th, 2013
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 19.72 KB | None | 0 0
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import java.io.*;
  5. import java.util.Scanner;
  6. import java.util.Arrays;
  7. import javax.sound.sampled.*;
  8.  
  9.  
  10. public class Starcraft2Helper {
  11.         private UnitArray protossUnits = new UnitArray();
  12.         private UnitArray zergUnits = new UnitArray();
  13.         private UnitArray terranUnits = new UnitArray();
  14.        
  15.     public Starcraft2Helper() {}
  16.    
  17.     public static void main (String[] args) {
  18.         final JFrame frame = new JFrame ("\"Starcraft 2\"-Helper");
  19.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  20.  
  21. //********************************************************************//
  22. // Toppmeny, hvor programmet kan avsluttes, alw-on-top aktiveres osv  //
  23. //*********************************************************************//
  24.         JMenuBar toppMeny = new JMenuBar();
  25.         frame.setJMenuBar(toppMeny); //legger den til "rammen" som omslutter de forskjellige panelene
  26.         JMenu fil = new JMenu("Fil");
  27.         JMenu verktoy = new JMenu ("Verktoy");
  28.         JMenu aboutMenu = new JMenu ("Om");
  29.         JMenu unitMenu = new JMenu("Enheter");
  30.                        
  31.         toppMeny.add(fil);
  32.         toppMeny.add(verktoy);
  33.         toppMeny.add(aboutMenu);
  34.         toppMeny.add(unitMenu);
  35.        
  36.         JMenuItem aboutAction = new JMenuItem("Om");
  37.  
  38.         //Info om programmet
  39.         aboutAction.addActionListener(new ActionListener() {
  40.             public void actionPerformed(ActionEvent about) {
  41.                 JOptionPane.showMessageDialog(null, "by lroedal \nStarcraft 2-Helper\nv0.2\n(C) 2013");
  42.             }});
  43.        
  44.         // Lar brukeren avslutte programmet via menyen om ønskelig
  45.         JMenuItem exitAction = new JMenuItem("Exit");      
  46.         exitAction.addActionListener(new ActionListener(){
  47.             public void actionPerformed(ActionEvent e) {
  48.                 System.exit(0);
  49.             }});
  50.        
  51.         // Lar brukeren sette programmet til "always-on-top", slik at spillere med en skjerm kan bruke programmet også.
  52.         final JCheckBoxMenuItem alwaysOnTopAction = new JCheckBoxMenuItem("Always on top");
  53.         alwaysOnTopAction.addActionListener(new ActionListener() {
  54.             public void actionPerformed(ActionEvent e) {
  55.             if (alwaysOnTopAction.getState() == true) {
  56.             frame.setAlwaysOnTop(true); }
  57.             else frame.setAlwaysOnTop(false);
  58.             }});   
  59.        
  60.         fil.add(exitAction);
  61.         verktoy.add(alwaysOnTopAction);
  62.         aboutMenu.add(aboutAction);
  63.        
  64.         /**Undermeny av toppmenyen, hvor enheter kan velges. Infoen om
  65.          * valgt enhet vil deretter vises i fanen "UnitInfoGUI"
  66.          * */
  67.         JMenu zergMenu = new JMenu ("Zerg");
  68.         unitMenu.add(zergMenu);
  69.         JMenu terranMenu = new JMenu ("Terran");
  70.         unitMenu.add(terranMenu);
  71.         JMenu protossMenu = new JMenu ("Protoss");
  72.         unitMenu.add(protossMenu);
  73.    
  74.         JMenuItem itemProbe = new JMenuItem("Probe");
  75.             itemProbe.addActionListener(new ActionListener() {
  76.             public void actionPerformed(ActionEvent e) {
  77.             }});               
  78. //--------------------------------------------------------------------//
  79.  
  80. //********************************************************************//       
  81. // Hoved-frame, samt fane-menyen hvor du velger ønsket programfunksjon//
  82. //**********************************************************************       
  83.         JTabbedPane meny = new JTabbedPane();
  84.         meny.addTab ("Hovedmeny", new introTab());
  85.         meny.addTab ("Creep Tumor-timer", new CreepTumorGUI());
  86.         meny.addTab ("Inject Larva-timer", new InjectLarvaGUI());
  87.         meny.addTab ("Unit Info", new UnitInfoGUI());
  88.        
  89.         frame.setSize(new Dimension(500, 500));
  90.         frame.setPreferredSize(new Dimension(500, 500));
  91.         frame.setMaximumSize(new Dimension(500, 500));
  92.         frame.setMinimumSize(new Dimension(500, 500));
  93.         frame.setResizable(false);
  94.         frame.getContentPane().add(meny);
  95.         frame.pack();
  96.         frame.setVisible(true);
  97. //--------------------------------------------------------------------//
  98.  
  99. //********************************************************************//
  100. //                  Leser inn enheter fra tekstfil                    //
  101. //********************************************************************//
  102.         UnitArray protossUnits = new UnitArray();
  103.         UnitArray zergUnits = new UnitArray();
  104.         UnitArray terranUnits = new UnitArray();
  105.        
  106.         try{
  107.             Scanner reader = new Scanner(new File("docs/UnitInfo.txt"));
  108.             while (reader.hasNext()){
  109.                 String strLine = reader.nextLine();
  110.                 String[] readToArray = strLine.split(" ");
  111.                 String unitRace = readToArray[0];
  112.  
  113.                 String[] variables = Arrays.copyOfRange(readToArray,1,readToArray.length);
  114.                 String unitNavn = variables[0];
  115.                 String unitByggesFra = variables[1].replace('_', ' ');
  116.                 String unitAntMineraler = variables[2];
  117.                 String unitAntVespene = variables[3];
  118.                 String unitSupply = variables[4];
  119.  
  120.                 if (unitRace.equals("Protoss")) {
  121.                    protossUnits.leggTilUnit(unitNavn, unitByggesFra, unitAntMineraler, unitAntVespene, unitSupply);
  122.                    }
  123.                 if (unitRace.equals("Zerg")) {
  124.                     zergUnits.leggTilUnit(unitNavn, unitByggesFra, unitAntMineraler, unitAntVespene, unitSupply);
  125.                     }
  126.                 if (unitRace.equals("Terran")) {
  127.                     terranUnits.leggTilUnit(unitNavn, unitByggesFra, unitAntMineraler, unitAntVespene, unitSupply);
  128.                 }
  129.         else {}
  130.             }
  131.         }catch (Exception e){System.err.println("Error: " + e.getMessage());}
  132.         System.out.println("Test" + protossUnits);
  133. }
  134. }
  135. //********************************************************************//
  136. //              Start-fane med info om programmet                     //
  137. //********************************************************************//
  138. class introTab extends JPanel {
  139.     private JPanel ToppPanel = new JPanel();
  140.         private ImageIcon imgLogo = new ImageIcon("images/introLogo.png");
  141.         private JLabel lblLogo = new JLabel("", imgLogo, SwingConstants.CENTER);
  142.             private JPanel InfoPanel = new JPanel();
  143.             private JLabel InfoLabel = new JLabel("Velg fane etter ønsket funksjon");
  144.                
  145.     public introTab() {
  146.         setLayout(new GridLayout(2,1));
  147.         setMaximumSize(new Dimension(500, 500));
  148.         setPreferredSize(new Dimension(500, 500));
  149.        
  150.         ToppPanel.setPreferredSize(new Dimension(500, 200));
  151.         add(ToppPanel, BorderLayout.NORTH);
  152.         ToppPanel.add(lblLogo);
  153.        
  154.         InfoPanel.setPreferredSize(new Dimension(500, 300));
  155.         add(InfoPanel, BorderLayout.SOUTH);
  156.         InfoPanel.add(InfoLabel);
  157.     }
  158. }
  159. //--------------------------------------------------------------------//
  160.  
  161. //********************************************************************//
  162. //      Fane for CreepTumor-timeren og dens GUI                       //
  163. //********************************************************************//
  164. class CreepTumorGUI extends JPanel {
  165.     private int creepCounter = 15; //cooldown for creep tumors er 15 sekunder
  166.         private JPanel ToppPanel = new JPanel();
  167.         private ImageIcon creepTumor = new ImageIcon("images/creeptumor.jpg");
  168.         private JLabel creepTumorLogo = new JLabel();
  169.             private JPanel MidtPanel = new JPanel();
  170.             private JLabel lblInfo = new JLabel("Hjelper deg med timingen på Creep Tumors.");
  171.                 private JPanel BunnPanel = new JPanel();
  172.                 private JLabel lblCreepTimer = new JLabel("15");
  173.                 private JButton btnTumorCounter = new JButton ("Start");
  174. //********************************************************************//
  175. //  Oppretting av timer for creep og medfølgende actionlistener          //
  176. //********************************************************************//   
  177. javax.swing.Timer creepTimer = new Timer(1000, new ActionListener(){
  178.    public void actionPerformed(ActionEvent e){
  179.        if (creepCounter == 15) {
  180.            creepTimer.setDelay(1000); //tilbakestiller til standard delay (1s/1000ms)
  181.        }     
  182.        if (creepCounter >= 0) {
  183.            String count = String.valueOf(creepCounter);
  184.         lblCreepTimer.setText(count);
  185.         creepCounter--;
  186.         if (creepCounter == 0) {
  187.             creepTimer.setDelay(5000); // setter en delay på fem sekunder, slik at brukeren rekker å plante tumors før telleren begynner på nytt
  188.             creepCounter = 15;
  189.             new AePlayWave("sounds/creepSound.wav").start(); //kaller classen fra anyexample, spiller av lyd når creep tumor er ferdig med cooldown.
  190.         }}}});
  191. ////////////////////////////////////////////////////////////////////////   
  192.     public CreepTumorGUI() {
  193.         setLayout(new GridLayout(3, 1));
  194.         setMaximumSize(new Dimension(500, 500));
  195.         setSize(new Dimension(500, 500));
  196.        
  197.         ToppPanel.setSize(500, 200);
  198.         ToppPanel.setLayout(new GridBagLayout());
  199.         add(ToppPanel, BorderLayout.NORTH);
  200.         creepTumorLogo.setIcon(creepTumor);
  201.         ToppPanel.add(creepTumorLogo);
  202.        
  203.         MidtPanel.setSize(500, 100);
  204.         add(MidtPanel, BorderLayout.CENTER);
  205.         MidtPanel.add(lblInfo);
  206.  
  207.         BunnPanel.setSize(500, 200);
  208.         BunnPanel.setLayout(new GridLayout(1,2));
  209.         add(BunnPanel, BorderLayout.SOUTH);
  210.         lblCreepTimer.setFont(new Font("Serif", Font.PLAIN, 119));
  211.         BunnPanel.add (lblCreepTimer);
  212.         BunnPanel.add(btnTumorCounter);
  213.        
  214.         btnTumorCounter.addActionListener(new ActionListener() {
  215.         public void actionPerformed(ActionEvent event) {
  216.             creepTimer.start();
  217.     }
  218. });}}
  219. //--------------------------------------------------------------------//
  220.  
  221. //********************************************************************//
  222. //      Alt relatert til Inject-Larva timer                           //
  223. //********************************************************************//
  224. class InjectLarvaGUI extends JPanel {
  225.     private int counter = 39; //Teller ned sekunder (injects tar 40 sekunder)
  226.         private JPanel ToppPanel = new JPanel();
  227.         private ImageIcon larvaInject = new ImageIcon("images/injectLarva.jpg");
  228.         private JLabel injectLogo = new JLabel();
  229.             private JPanel MidtPanel = new JPanel();
  230.             private JTextArea txtInfo = new JTextArea("Hjelper deg å huske injects.\nTeller ned fra 40, har en fem sekunds delay før den begynner igjen. ");
  231.                 private JPanel BunnPanel = new JPanel();
  232.                 private JButton btnInjectCounter = new JButton ("Start");
  233.                 private JLabel lblTimer = new JLabel("40"); //Utgangspunktet for labelen der "timeren" telles ned
  234. //********************************************************************//
  235. //  Oppretting av timer for injects og medfølgende actionlistener    //
  236. //********************************************************************//   
  237. javax.swing.Timer injectTimer = new Timer(1000, new ActionListener(){
  238.    public void actionPerformed(ActionEvent e){
  239.        if (counter == 40) {
  240.            injectTimer.setDelay(1000); //tilbakestiller telleren til standard delay (1s/1000ms)
  241.        }     
  242.        if (counter >= 1) {
  243.            String count = String.valueOf(counter);
  244.         lblTimer.setText(count);
  245.         counter--;
  246.         if (counter == 0) {
  247.             injectTimer.setDelay(5000); //setter en delay på fem sekunder før telleren resettes, da rekker brukeren å kaste inject før det skjer
  248.             counter = 40;
  249.             new AePlayWave("sounds/injectSound.wav").start(); //kaller classen fra anyexample, spiller av lyd når inject er klart igjen.
  250.         }
  251.        }}
  252. });
  253. ////////////////////////////////////////////////////////////////////////
  254.  
  255.     public InjectLarvaGUI() {
  256.         setLayout(new GridLayout(3,1));
  257.         setMaximumSize(new Dimension(500, 500));
  258.         setSize(new Dimension(500, 500));
  259.        
  260.         ToppPanel.setSize(500, 200);
  261.         ToppPanel.setLayout(new GridBagLayout());
  262.         add(ToppPanel, BorderLayout.NORTH);
  263.         injectLogo.setIcon(larvaInject);
  264.         ToppPanel.add(injectLogo);
  265.        
  266.         MidtPanel.setSize(500, 100);
  267.         add(MidtPanel, BorderLayout.CENTER);
  268.         txtInfo.setPreferredSize(new Dimension(400,80)); //setter størrelsen på txtboksen
  269.         MidtPanel.add (txtInfo);
  270.         txtInfo.setEnabled(false); //låser tekstboksen for input
  271.         txtInfo.setDisabledTextColor(Color.BLACK); //setter textfargen til svart på tross av at boksen er disabled
  272.         txtInfo.setOpaque(false); //gjør textareaet "gjennomsiktig" (samme farge som panelet)
  273.  
  274.         BunnPanel.setSize(500, 200);
  275.         BunnPanel.setLayout(new GridLayout(1,2));
  276.         add(BunnPanel, BorderLayout.SOUTH);
  277.         lblTimer.setFont(new Font("Serif", Font.PLAIN, 119));
  278.         BunnPanel.add(lblTimer);
  279.         BunnPanel.add (btnInjectCounter);
  280.  
  281.         btnInjectCounter.addActionListener(new ActionListener() {
  282.             public void actionPerformed(ActionEvent event) {
  283.                 injectTimer.start();
  284.                 }});}
  285. }
  286. //--------------------------------------------------------------------//
  287.  
  288. //********************************************************************//
  289. //                              Unit-info                             //
  290. //********************************************************************//
  291. class UnitInfoGUI extends JPanel {
  292.     private JTextArea txtInfo = new JTextArea("Velg ønsket enhet i \"Enhetsmenyen på toppen");
  293.    
  294.     private JLabel lblNavn = new JLabel("Navn:");
  295.     private JLabel lblByggesFra = new JLabel ("Bygges fra:");
  296.     private JLabel lblAntMineraler = new JLabel("Mineral-kostnad");
  297.     private JLabel lblAntVespene = new JLabel("Vespene-kostnad");
  298.     private JLabel lblSupply = new JLabel("Supply-kostnad");
  299.    
  300.     protected JTextField txtNavn = new JTextField("arrayverdi her");
  301.     private JTextField txtByggesFra = new JTextField("arrayverdi her");
  302.     private JTextField txtAntMineraler = new JTextField("arrayverdi her");
  303.     private JTextField txtAntVespene = new JTextField("arrayverdi her");
  304.     private JTextField txtSupply = new JTextField("arrayverdi her");
  305.    
  306.     private JPanel toppPanel = new JPanel();
  307.     private JPanel midtPanel = new JPanel();
  308.        
  309.     UnitInfoGUI() {
  310.         toppPanel.setPreferredSize(new Dimension(480, 100));
  311.         toppPanel.setLayout(new GridLayout(1,1));
  312.         toppPanel.add(txtInfo);
  313.         txtInfo.setEnabled(false);
  314.         txtInfo.setDisabledTextColor(Color.BLACK); //setter textfargen til svart på tross av at boksen er disabled
  315.        
  316.         midtPanel.setPreferredSize(new Dimension(480, 400));
  317.         midtPanel.setLayout(new GridLayout(0,2));
  318.         midtPanel.add(lblNavn);
  319.         midtPanel.add(txtNavn);
  320.         midtPanel.add(lblByggesFra);
  321.         midtPanel.add(txtByggesFra);
  322.         midtPanel.add(lblAntMineraler);
  323.         midtPanel.add(txtAntMineraler);
  324.         midtPanel.add(lblAntVespene);
  325.         midtPanel.add(txtAntVespene);
  326.         midtPanel.add(lblSupply);
  327.         midtPanel.add(txtSupply);
  328.        
  329.         txtNavn.setEnabled(false);
  330.         txtByggesFra.setEnabled(false);
  331.         txtAntMineraler.setEnabled(false);
  332.         txtAntVespene.setEnabled(false);
  333.         txtSupply.setEnabled(false);
  334.        
  335.         txtNavn.setDisabledTextColor(Color.BLACK);
  336.         txtByggesFra.setDisabledTextColor(Color.BLACK);
  337.         txtAntMineraler.setDisabledTextColor(Color.BLACK);
  338.         txtAntVespene.setDisabledTextColor(Color.BLACK);
  339.         txtSupply.setDisabledTextColor(Color.BLACK);
  340.        
  341.         add(toppPanel);
  342.         add(midtPanel);    
  343.     }
  344. }
  345. //--------------------------------------------------------------------//
  346.  
  347. //********************************************************************//
  348. //                      UnitArray                                     //
  349. //********************************************************************//
  350. class UnitArray {
  351.     private static Unit[] unitSamling; //Denne samlingen holder de forskjellige enhetene
  352.     private static String printList; //Legges til i tilfelle jeg får behov for printing om info av kontoer
  353.    
  354.     UnitArray() {
  355.         unitSamling = new Unit[3];
  356.                 }
  357.            
  358.     public void leggTilUnit (String unitNavn, String unitByggesFra, String unitAntMineraler,
  359.                             String unitAntVespene, String unitSupply) {
  360.             if (Unit.getCount() == unitSamling.length) {increaseSize();}
  361.            
  362.             unitSamling[Unit.getCount()] = new Unit (unitNavn, unitByggesFra,
  363.             unitAntMineraler, unitAntVespene, unitSupply); 
  364.             }
  365.    
  366.     public void increaseSize() {
  367.         Unit[] temp = new Unit[unitSamling.length * 2]; //oppretter midlertidig array med dobbel størrelse
  368.         for (int unit = 0; unit < unitSamling.length; unit++) { //kopierer alle units i opprinnelig array inn i det midlertidige
  369.         temp[unit] = unitSamling[unit]; }
  370.         unitSamling = temp; }   //overskriver unitArrayet med det doblede midlertidige, slik at økningen blir lagret
  371.             }
  372.  
  373. //********************************************************************//
  374. //                          Unit                                      //
  375. //********************************************************************//
  376. class Unit {
  377.     protected String unitNavn, unitByggesFra, unitAntMineraler, unitAntVespene,
  378.     unitSupply;
  379.     private static int count = 0;
  380.    
  381.     public Unit(String unitNavn, String unitByggesFra, String unitAntMineraler,
  382.                 String unitAntVespene, String unitSupply) {
  383.             this.unitNavn = unitNavn;
  384.             this.unitByggesFra = unitByggesFra;
  385.             this.unitAntMineraler = unitAntMineraler;
  386.             this.unitAntVespene = unitAntVespene;
  387.             this.unitSupply = unitSupply;
  388.             count++;
  389.         }
  390.    
  391.     //Getters
  392.     public String getNavn() {return unitNavn;} //returnerer navn
  393.         public String getByggesFra() {return unitByggesFra;} // returnerer bygning unit bygges fra
  394.             public String getAntMineraler() {return unitAntMineraler;} //returnerer mineralkostnad
  395.                 public String getAntVespene() {return unitAntVespene;} //returnerer "Vespene Gas"-kostnad
  396.                     public String getSupply() {return unitSupply;} //returnerer units Supply-forbruk
  397.                         public static int getCount() {return count;} //returnerer antall Units som er opprettet
  398.    
  399.     //Setters
  400.     public void setNavn(String unitNavn) {this.unitNavn = unitNavn;} //setter navn
  401.         public void setByggesFra(String unitByggesFra) {this.unitByggesFra = unitByggesFra;} //definerer bygning unit spawner fra
  402.             public void setAntMineraler(String unitAntMineraler) {this.unitAntMineraler = unitAntMineraler;} //definerer mineralkostnad
  403.                 public void setAntVespene(String unitAntVespene) {this.unitAntVespene = unitAntVespene;} //definerer kostnad i "Vespene Gas"
  404.                     public void setSupply(String unitSupply) {this.unitSupply = unitSupply;} //definerer forbruk av Supply
  405. }
  406.  
  407. //********************************************************************//
  408. //  Klasse hvis formål er avspilling av lydeffekter (brukes i timerne //
  409. //********************************************************************//   
  410.     class AePlayWave extends Thread {
  411.     // @author: http://www.anyexample.com/programming/java/java_play_wav_sound_file.xml
  412.      private String filename;
  413.      private Position curPosition;
  414.      private final int EXTERNAL_BUFFER_SIZE = 524288; // 128Kb
  415.  
  416.     enum Position {LEFT, RIGHT, NORMAL};
  417.  
  418.     public AePlayWave(String wavfile) {
  419.         filename = wavfile;
  420.         curPosition = Position.NORMAL;
  421.     }
  422.  
  423.     public AePlayWave(String wavfile, Position p) {
  424.         filename = wavfile;
  425.         curPosition = p;
  426.     }
  427.  
  428.     public void run() {  
  429.         File soundFile = new File(filename);
  430.         if (!soundFile.exists()) {
  431.             System.err.println("Wave file not found: " + filename);
  432.             return;
  433.         }
  434.  
  435.         AudioInputStream audioInputStream = null;
  436.         try {audioInputStream = AudioSystem.getAudioInputStream(soundFile);}
  437.         catch (UnsupportedAudioFileException e1) {e1.printStackTrace();
  438.             return;}
  439.             catch (IOException e1) {e1.printStackTrace();
  440.             return;}
  441.  
  442.         AudioFormat format = audioInputStream.getFormat();
  443.         SourceDataLine auline = null;
  444.         DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
  445.  
  446.         try {
  447.             auline = (SourceDataLine) AudioSystem.getLine(info);
  448.             auline.open(format);
  449.         } catch (LineUnavailableException e) {
  450.             e.printStackTrace();
  451.             return;
  452.         } catch (Exception e) {
  453.             e.printStackTrace();
  454.             return;
  455.         }
  456.  
  457.         if (auline.isControlSupported(FloatControl.Type.PAN)) {
  458.             FloatControl pan = (FloatControl) auline
  459.                     .getControl(FloatControl.Type.PAN);
  460.             if (curPosition == Position.RIGHT)
  461.                 pan.setValue(1.0f);
  462.             else if (curPosition == Position.LEFT)
  463.                 pan.setValue(-1.0f);
  464.         }
  465.  
  466.         auline.start();
  467.         int nBytesRead = 0;
  468.         byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];
  469.  
  470.         try {
  471.             while (nBytesRead != -1) {
  472.                 nBytesRead = audioInputStream.read(abData, 0, abData.length);
  473.                 if (nBytesRead >= 0)
  474.                     auline.write(abData, 0, nBytesRead);
  475.             }
  476.         } catch (IOException e) {
  477.             e.printStackTrace();
  478.             return;
  479.         } finally {
  480.             auline.drain();
  481.             auline.close();
  482.         }
  483.  
  484.     }
  485. }
  486. ////////////////////////////////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement