Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import java.io.*;
- import java.util.Scanner;
- import java.util.Arrays;
- import javax.sound.sampled.*;
- public class Starcraft2Helper {
- private UnitArray protossUnits = new UnitArray();
- private UnitArray zergUnits = new UnitArray();
- private UnitArray terranUnits = new UnitArray();
- public Starcraft2Helper() {}
- public static void main (String[] args) {
- final JFrame frame = new JFrame ("\"Starcraft 2\"-Helper");
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- //********************************************************************//
- // Toppmeny, hvor programmet kan avsluttes, alw-on-top aktiveres osv //
- //*********************************************************************//
- JMenuBar toppMeny = new JMenuBar();
- frame.setJMenuBar(toppMeny); //legger den til "rammen" som omslutter de forskjellige panelene
- JMenu fil = new JMenu("Fil");
- JMenu verktoy = new JMenu ("Verktoy");
- JMenu aboutMenu = new JMenu ("Om");
- JMenu unitMenu = new JMenu("Enheter");
- toppMeny.add(fil);
- toppMeny.add(verktoy);
- toppMeny.add(aboutMenu);
- toppMeny.add(unitMenu);
- JMenuItem aboutAction = new JMenuItem("Om");
- //Info om programmet
- aboutAction.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent about) {
- JOptionPane.showMessageDialog(null, "by lroedal \nStarcraft 2-Helper\nv0.2\n(C) 2013");
- }});
- // Lar brukeren avslutte programmet via menyen om ønskelig
- JMenuItem exitAction = new JMenuItem("Exit");
- exitAction.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent e) {
- System.exit(0);
- }});
- // Lar brukeren sette programmet til "always-on-top", slik at spillere med en skjerm kan bruke programmet også.
- final JCheckBoxMenuItem alwaysOnTopAction = new JCheckBoxMenuItem("Always on top");
- alwaysOnTopAction.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- if (alwaysOnTopAction.getState() == true) {
- frame.setAlwaysOnTop(true); }
- else frame.setAlwaysOnTop(false);
- }});
- fil.add(exitAction);
- verktoy.add(alwaysOnTopAction);
- aboutMenu.add(aboutAction);
- /**Undermeny av toppmenyen, hvor enheter kan velges. Infoen om
- * valgt enhet vil deretter vises i fanen "UnitInfoGUI"
- * */
- JMenu zergMenu = new JMenu ("Zerg");
- unitMenu.add(zergMenu);
- JMenu terranMenu = new JMenu ("Terran");
- unitMenu.add(terranMenu);
- JMenu protossMenu = new JMenu ("Protoss");
- unitMenu.add(protossMenu);
- JMenuItem itemProbe = new JMenuItem("Probe");
- itemProbe.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- }});
- //--------------------------------------------------------------------//
- //********************************************************************//
- // Hoved-frame, samt fane-menyen hvor du velger ønsket programfunksjon//
- //**********************************************************************
- JTabbedPane meny = new JTabbedPane();
- meny.addTab ("Hovedmeny", new introTab());
- meny.addTab ("Creep Tumor-timer", new CreepTumorGUI());
- meny.addTab ("Inject Larva-timer", new InjectLarvaGUI());
- meny.addTab ("Unit Info", new UnitInfoGUI());
- frame.setSize(new Dimension(500, 500));
- frame.setPreferredSize(new Dimension(500, 500));
- frame.setMaximumSize(new Dimension(500, 500));
- frame.setMinimumSize(new Dimension(500, 500));
- frame.setResizable(false);
- frame.getContentPane().add(meny);
- frame.pack();
- frame.setVisible(true);
- //--------------------------------------------------------------------//
- //********************************************************************//
- // Leser inn enheter fra tekstfil //
- //********************************************************************//
- UnitArray protossUnits = new UnitArray();
- UnitArray zergUnits = new UnitArray();
- UnitArray terranUnits = new UnitArray();
- try{
- Scanner reader = new Scanner(new File("docs/UnitInfo.txt"));
- while (reader.hasNext()){
- String strLine = reader.nextLine();
- String[] readToArray = strLine.split(" ");
- String unitRace = readToArray[0];
- String[] variables = Arrays.copyOfRange(readToArray,1,readToArray.length);
- String unitNavn = variables[0];
- String unitByggesFra = variables[1].replace('_', ' ');
- String unitAntMineraler = variables[2];
- String unitAntVespene = variables[3];
- String unitSupply = variables[4];
- if (unitRace.equals("Protoss")) {
- protossUnits.leggTilUnit(unitNavn, unitByggesFra, unitAntMineraler, unitAntVespene, unitSupply);
- }
- if (unitRace.equals("Zerg")) {
- zergUnits.leggTilUnit(unitNavn, unitByggesFra, unitAntMineraler, unitAntVespene, unitSupply);
- }
- if (unitRace.equals("Terran")) {
- terranUnits.leggTilUnit(unitNavn, unitByggesFra, unitAntMineraler, unitAntVespene, unitSupply);
- }
- else {}
- }
- }catch (Exception e){System.err.println("Error: " + e.getMessage());}
- System.out.println("Test" + protossUnits);
- }
- }
- //********************************************************************//
- // Start-fane med info om programmet //
- //********************************************************************//
- class introTab extends JPanel {
- private JPanel ToppPanel = new JPanel();
- private ImageIcon imgLogo = new ImageIcon("images/introLogo.png");
- private JLabel lblLogo = new JLabel("", imgLogo, SwingConstants.CENTER);
- private JPanel InfoPanel = new JPanel();
- private JLabel InfoLabel = new JLabel("Velg fane etter ønsket funksjon");
- public introTab() {
- setLayout(new GridLayout(2,1));
- setMaximumSize(new Dimension(500, 500));
- setPreferredSize(new Dimension(500, 500));
- ToppPanel.setPreferredSize(new Dimension(500, 200));
- add(ToppPanel, BorderLayout.NORTH);
- ToppPanel.add(lblLogo);
- InfoPanel.setPreferredSize(new Dimension(500, 300));
- add(InfoPanel, BorderLayout.SOUTH);
- InfoPanel.add(InfoLabel);
- }
- }
- //--------------------------------------------------------------------//
- //********************************************************************//
- // Fane for CreepTumor-timeren og dens GUI //
- //********************************************************************//
- class CreepTumorGUI extends JPanel {
- private int creepCounter = 15; //cooldown for creep tumors er 15 sekunder
- private JPanel ToppPanel = new JPanel();
- private ImageIcon creepTumor = new ImageIcon("images/creeptumor.jpg");
- private JLabel creepTumorLogo = new JLabel();
- private JPanel MidtPanel = new JPanel();
- private JLabel lblInfo = new JLabel("Hjelper deg med timingen på Creep Tumors.");
- private JPanel BunnPanel = new JPanel();
- private JLabel lblCreepTimer = new JLabel("15");
- private JButton btnTumorCounter = new JButton ("Start");
- //********************************************************************//
- // Oppretting av timer for creep og medfølgende actionlistener //
- //********************************************************************//
- javax.swing.Timer creepTimer = new Timer(1000, new ActionListener(){
- public void actionPerformed(ActionEvent e){
- if (creepCounter == 15) {
- creepTimer.setDelay(1000); //tilbakestiller til standard delay (1s/1000ms)
- }
- if (creepCounter >= 0) {
- String count = String.valueOf(creepCounter);
- lblCreepTimer.setText(count);
- creepCounter--;
- if (creepCounter == 0) {
- creepTimer.setDelay(5000); // setter en delay på fem sekunder, slik at brukeren rekker å plante tumors før telleren begynner på nytt
- creepCounter = 15;
- new AePlayWave("sounds/creepSound.wav").start(); //kaller classen fra anyexample, spiller av lyd når creep tumor er ferdig med cooldown.
- }}}});
- ////////////////////////////////////////////////////////////////////////
- public CreepTumorGUI() {
- setLayout(new GridLayout(3, 1));
- setMaximumSize(new Dimension(500, 500));
- setSize(new Dimension(500, 500));
- ToppPanel.setSize(500, 200);
- ToppPanel.setLayout(new GridBagLayout());
- add(ToppPanel, BorderLayout.NORTH);
- creepTumorLogo.setIcon(creepTumor);
- ToppPanel.add(creepTumorLogo);
- MidtPanel.setSize(500, 100);
- add(MidtPanel, BorderLayout.CENTER);
- MidtPanel.add(lblInfo);
- BunnPanel.setSize(500, 200);
- BunnPanel.setLayout(new GridLayout(1,2));
- add(BunnPanel, BorderLayout.SOUTH);
- lblCreepTimer.setFont(new Font("Serif", Font.PLAIN, 119));
- BunnPanel.add (lblCreepTimer);
- BunnPanel.add(btnTumorCounter);
- btnTumorCounter.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent event) {
- creepTimer.start();
- }
- });}}
- //--------------------------------------------------------------------//
- //********************************************************************//
- // Alt relatert til Inject-Larva timer //
- //********************************************************************//
- class InjectLarvaGUI extends JPanel {
- private int counter = 39; //Teller ned sekunder (injects tar 40 sekunder)
- private JPanel ToppPanel = new JPanel();
- private ImageIcon larvaInject = new ImageIcon("images/injectLarva.jpg");
- private JLabel injectLogo = new JLabel();
- private JPanel MidtPanel = new JPanel();
- private JTextArea txtInfo = new JTextArea("Hjelper deg å huske injects.\nTeller ned fra 40, har en fem sekunds delay før den begynner igjen. ");
- private JPanel BunnPanel = new JPanel();
- private JButton btnInjectCounter = new JButton ("Start");
- private JLabel lblTimer = new JLabel("40"); //Utgangspunktet for labelen der "timeren" telles ned
- //********************************************************************//
- // Oppretting av timer for injects og medfølgende actionlistener //
- //********************************************************************//
- javax.swing.Timer injectTimer = new Timer(1000, new ActionListener(){
- public void actionPerformed(ActionEvent e){
- if (counter == 40) {
- injectTimer.setDelay(1000); //tilbakestiller telleren til standard delay (1s/1000ms)
- }
- if (counter >= 1) {
- String count = String.valueOf(counter);
- lblTimer.setText(count);
- counter--;
- if (counter == 0) {
- injectTimer.setDelay(5000); //setter en delay på fem sekunder før telleren resettes, da rekker brukeren å kaste inject før det skjer
- counter = 40;
- new AePlayWave("sounds/injectSound.wav").start(); //kaller classen fra anyexample, spiller av lyd når inject er klart igjen.
- }
- }}
- });
- ////////////////////////////////////////////////////////////////////////
- public InjectLarvaGUI() {
- setLayout(new GridLayout(3,1));
- setMaximumSize(new Dimension(500, 500));
- setSize(new Dimension(500, 500));
- ToppPanel.setSize(500, 200);
- ToppPanel.setLayout(new GridBagLayout());
- add(ToppPanel, BorderLayout.NORTH);
- injectLogo.setIcon(larvaInject);
- ToppPanel.add(injectLogo);
- MidtPanel.setSize(500, 100);
- add(MidtPanel, BorderLayout.CENTER);
- txtInfo.setPreferredSize(new Dimension(400,80)); //setter størrelsen på txtboksen
- MidtPanel.add (txtInfo);
- txtInfo.setEnabled(false); //låser tekstboksen for input
- txtInfo.setDisabledTextColor(Color.BLACK); //setter textfargen til svart på tross av at boksen er disabled
- txtInfo.setOpaque(false); //gjør textareaet "gjennomsiktig" (samme farge som panelet)
- BunnPanel.setSize(500, 200);
- BunnPanel.setLayout(new GridLayout(1,2));
- add(BunnPanel, BorderLayout.SOUTH);
- lblTimer.setFont(new Font("Serif", Font.PLAIN, 119));
- BunnPanel.add(lblTimer);
- BunnPanel.add (btnInjectCounter);
- btnInjectCounter.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent event) {
- injectTimer.start();
- }});}
- }
- //--------------------------------------------------------------------//
- //********************************************************************//
- // Unit-info //
- //********************************************************************//
- class UnitInfoGUI extends JPanel {
- private JTextArea txtInfo = new JTextArea("Velg ønsket enhet i \"Enhetsmenyen på toppen");
- private JLabel lblNavn = new JLabel("Navn:");
- private JLabel lblByggesFra = new JLabel ("Bygges fra:");
- private JLabel lblAntMineraler = new JLabel("Mineral-kostnad");
- private JLabel lblAntVespene = new JLabel("Vespene-kostnad");
- private JLabel lblSupply = new JLabel("Supply-kostnad");
- protected JTextField txtNavn = new JTextField("arrayverdi her");
- private JTextField txtByggesFra = new JTextField("arrayverdi her");
- private JTextField txtAntMineraler = new JTextField("arrayverdi her");
- private JTextField txtAntVespene = new JTextField("arrayverdi her");
- private JTextField txtSupply = new JTextField("arrayverdi her");
- private JPanel toppPanel = new JPanel();
- private JPanel midtPanel = new JPanel();
- UnitInfoGUI() {
- toppPanel.setPreferredSize(new Dimension(480, 100));
- toppPanel.setLayout(new GridLayout(1,1));
- toppPanel.add(txtInfo);
- txtInfo.setEnabled(false);
- txtInfo.setDisabledTextColor(Color.BLACK); //setter textfargen til svart på tross av at boksen er disabled
- midtPanel.setPreferredSize(new Dimension(480, 400));
- midtPanel.setLayout(new GridLayout(0,2));
- midtPanel.add(lblNavn);
- midtPanel.add(txtNavn);
- midtPanel.add(lblByggesFra);
- midtPanel.add(txtByggesFra);
- midtPanel.add(lblAntMineraler);
- midtPanel.add(txtAntMineraler);
- midtPanel.add(lblAntVespene);
- midtPanel.add(txtAntVespene);
- midtPanel.add(lblSupply);
- midtPanel.add(txtSupply);
- txtNavn.setEnabled(false);
- txtByggesFra.setEnabled(false);
- txtAntMineraler.setEnabled(false);
- txtAntVespene.setEnabled(false);
- txtSupply.setEnabled(false);
- txtNavn.setDisabledTextColor(Color.BLACK);
- txtByggesFra.setDisabledTextColor(Color.BLACK);
- txtAntMineraler.setDisabledTextColor(Color.BLACK);
- txtAntVespene.setDisabledTextColor(Color.BLACK);
- txtSupply.setDisabledTextColor(Color.BLACK);
- add(toppPanel);
- add(midtPanel);
- }
- }
- //--------------------------------------------------------------------//
- //********************************************************************//
- // UnitArray //
- //********************************************************************//
- class UnitArray {
- private static Unit[] unitSamling; //Denne samlingen holder de forskjellige enhetene
- private static String printList; //Legges til i tilfelle jeg får behov for printing om info av kontoer
- UnitArray() {
- unitSamling = new Unit[3];
- }
- public void leggTilUnit (String unitNavn, String unitByggesFra, String unitAntMineraler,
- String unitAntVespene, String unitSupply) {
- if (Unit.getCount() == unitSamling.length) {increaseSize();}
- unitSamling[Unit.getCount()] = new Unit (unitNavn, unitByggesFra,
- unitAntMineraler, unitAntVespene, unitSupply);
- }
- public void increaseSize() {
- Unit[] temp = new Unit[unitSamling.length * 2]; //oppretter midlertidig array med dobbel størrelse
- for (int unit = 0; unit < unitSamling.length; unit++) { //kopierer alle units i opprinnelig array inn i det midlertidige
- temp[unit] = unitSamling[unit]; }
- unitSamling = temp; } //overskriver unitArrayet med det doblede midlertidige, slik at økningen blir lagret
- }
- //********************************************************************//
- // Unit //
- //********************************************************************//
- class Unit {
- protected String unitNavn, unitByggesFra, unitAntMineraler, unitAntVespene,
- unitSupply;
- private static int count = 0;
- public Unit(String unitNavn, String unitByggesFra, String unitAntMineraler,
- String unitAntVespene, String unitSupply) {
- this.unitNavn = unitNavn;
- this.unitByggesFra = unitByggesFra;
- this.unitAntMineraler = unitAntMineraler;
- this.unitAntVespene = unitAntVespene;
- this.unitSupply = unitSupply;
- count++;
- }
- //Getters
- public String getNavn() {return unitNavn;} //returnerer navn
- public String getByggesFra() {return unitByggesFra;} // returnerer bygning unit bygges fra
- public String getAntMineraler() {return unitAntMineraler;} //returnerer mineralkostnad
- public String getAntVespene() {return unitAntVespene;} //returnerer "Vespene Gas"-kostnad
- public String getSupply() {return unitSupply;} //returnerer units Supply-forbruk
- public static int getCount() {return count;} //returnerer antall Units som er opprettet
- //Setters
- public void setNavn(String unitNavn) {this.unitNavn = unitNavn;} //setter navn
- public void setByggesFra(String unitByggesFra) {this.unitByggesFra = unitByggesFra;} //definerer bygning unit spawner fra
- public void setAntMineraler(String unitAntMineraler) {this.unitAntMineraler = unitAntMineraler;} //definerer mineralkostnad
- public void setAntVespene(String unitAntVespene) {this.unitAntVespene = unitAntVespene;} //definerer kostnad i "Vespene Gas"
- public void setSupply(String unitSupply) {this.unitSupply = unitSupply;} //definerer forbruk av Supply
- }
- //********************************************************************//
- // Klasse hvis formål er avspilling av lydeffekter (brukes i timerne //
- //********************************************************************//
- class AePlayWave extends Thread {
- // @author: http://www.anyexample.com/programming/java/java_play_wav_sound_file.xml
- private String filename;
- private Position curPosition;
- private final int EXTERNAL_BUFFER_SIZE = 524288; // 128Kb
- enum Position {LEFT, RIGHT, NORMAL};
- public AePlayWave(String wavfile) {
- filename = wavfile;
- curPosition = Position.NORMAL;
- }
- public AePlayWave(String wavfile, Position p) {
- filename = wavfile;
- curPosition = p;
- }
- public void run() {
- File soundFile = new File(filename);
- if (!soundFile.exists()) {
- System.err.println("Wave file not found: " + filename);
- return;
- }
- AudioInputStream audioInputStream = null;
- try {audioInputStream = AudioSystem.getAudioInputStream(soundFile);}
- catch (UnsupportedAudioFileException e1) {e1.printStackTrace();
- return;}
- catch (IOException e1) {e1.printStackTrace();
- return;}
- AudioFormat format = audioInputStream.getFormat();
- SourceDataLine auline = null;
- DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
- try {
- auline = (SourceDataLine) AudioSystem.getLine(info);
- auline.open(format);
- } catch (LineUnavailableException e) {
- e.printStackTrace();
- return;
- } catch (Exception e) {
- e.printStackTrace();
- return;
- }
- if (auline.isControlSupported(FloatControl.Type.PAN)) {
- FloatControl pan = (FloatControl) auline
- .getControl(FloatControl.Type.PAN);
- if (curPosition == Position.RIGHT)
- pan.setValue(1.0f);
- else if (curPosition == Position.LEFT)
- pan.setValue(-1.0f);
- }
- auline.start();
- int nBytesRead = 0;
- byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];
- try {
- while (nBytesRead != -1) {
- nBytesRead = audioInputStream.read(abData, 0, abData.length);
- if (nBytesRead >= 0)
- auline.write(abData, 0, nBytesRead);
- }
- } catch (IOException e) {
- e.printStackTrace();
- return;
- } finally {
- auline.drain();
- auline.close();
- }
- }
- }
- ////////////////////////////////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement