Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
JHandHero - JHandHero.java

JHandHero.java

Caricato da:
Scarica il programma completo

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5.  
  6. /*
  7.  * JHandHero.java
  8.  *
  9.  * Created on 21-lug-2010, 12.50.35
  10.  */
  11. package jhandhero.graphics;
  12.  
  13. import java.awt.Rectangle;
  14. import java.awt.Toolkit;
  15. import java.awt.event.KeyAdapter;
  16. import java.awt.event.KeyEvent;
  17. import java.util.ArrayList;
  18. import javax.swing.ImageIcon;
  19. import javax.swing.JLabel;
  20. import jhandhero.Game;
  21.  
  22. /**
  23.  *
  24.  * @author Paolo
  25.  */
  26. public class JHandHero extends javax.swing.JFrame {
  27.  
  28.     private Game game;
  29.     private ArrayList<JLabel> rightLabels;
  30.     private ArrayList<JLabel> leftLabels;
  31.     private ArrayList<JLabel> upLabels;
  32.     private ArrayList<JLabel> downLabels;
  33.     private JLabel[] arrowsLabel;
  34.     private Move move;
  35.     private Choose choose;
  36.     private boolean started;
  37.  
  38.     private class Move implements Runnable {
  39.  
  40.         private Thread start;
  41.         private boolean pause;
  42.  
  43.         public Move() {
  44.             this.start = new Thread(this);
  45.             this.pause=false;
  46.         }
  47.  
  48.         public void start() {
  49.             this.start.start();
  50.         }
  51.  
  52.         public void stop() {
  53.             this.start.stop();
  54.         }
  55.  
  56.         public void pause() {
  57.             this.pause=true;
  58.         }
  59.  
  60.         public void resume(){
  61.             this.pause=false;
  62.         }
  63.  
  64.         public void run() {
  65.             while (true) {
  66.                 while(this.pause);
  67.                 this.moveLabel(rightLabels);
  68.                 this.moveLabel(leftLabels);
  69.                 this.moveLabel(upLabels);
  70.                 this.moveLabel(downLabels);
  71.                 int sleep = (11 - game.getLevel())*5;
  72.                 try {
  73.                     Thread.sleep(sleep);
  74.                 } catch (InterruptedException ex) {
  75.                 }
  76.             }
  77.         }
  78.  
  79.         private void moveLabel(ArrayList<JLabel> pLabels) {
  80.             for (int i = 0; i < pLabels.size(); i++) {
  81.                 pLabels.get(i).setLocation(pLabels.get(i).getLocation().x, pLabels.get(i).getLocation().y + 10);
  82.                 if(pLabels.get(i).getLocation().y>=360){
  83.                     gamePanel.remove(pLabels.get(i));
  84.                     pLabels.remove(i);
  85.                 }
  86.             }
  87.         }
  88.     }
  89.  
  90.     private class Choose implements Runnable {
  91.  
  92.         private Thread start;
  93.         private boolean pause;
  94.         private int choose;
  95.  
  96.         public Choose() {
  97.             this.start = new Thread(this);
  98.             this.pause=false;
  99.         }
  100.  
  101.         public void start() {
  102.             this.start.start();
  103.         }
  104.  
  105.         public void stop(){
  106.             this.start.stop();
  107.         }
  108.  
  109.         public void pause() {
  110.             this.pause=true;
  111.         }
  112.  
  113.         public void resume(){
  114.             this.pause=false;
  115.         }
  116.  
  117.  
  118.         public void run() {
  119.             while (true) {
  120.                 while(this.pause);
  121.                 int random=(int)(Math.random()*4);
  122.                 JLabel add=new JLabel();
  123.                 add.setIcon(new ImageIcon(getClass().getResource("/jhandhero/graphics/images/arrows"+random+".png")));
  124.                 add.setBounds(20 + (random * 60), -40, 40, 40);
  125.                 switch(random){
  126.                     case 0:
  127.                         rightLabels.add(add);
  128.                         break;
  129.                     case 1:
  130.                         leftLabels.add(add);
  131.                         break;
  132.                     case 2:
  133.                         upLabels.add(add);
  134.                         break;
  135.                     case 3:
  136.                         downLabels.add(add);
  137.                         break;
  138.                 }
  139.                 gamePanel.add(add);
  140.                 gamePanel.repaint();
  141.                 int sleep=(11-game.getLevel())*100;
  142.                 this.choose++;
  143.                 toLevelUp.setText(((game.getLevel()*50)-this.choose)+"");
  144.                 if(this.choose==(game.getLevel()*50)){
  145.                     this.choose=0;
  146.                     game.upLevel();
  147.                     level.setText(game.getLevel()+"");
  148.                 }
  149.                 try {
  150.                     Thread.sleep(sleep);
  151.                 } catch (InterruptedException ex) {
  152.                 }
  153.             }
  154.         }
  155.     }
  156.  
  157.     private class KeysListener extends KeyAdapter {
  158.  
  159.         private int selectedArrows;
  160.  
  161.         @Override
  162.         public void keyPressed(KeyEvent e) {
  163.             switch (e.getKeyCode()) {
  164.                 case KeyEvent.VK_RIGHT:
  165.                     this.selectedArrows = 1;
  166.                     break;
  167.                 case KeyEvent.VK_LEFT:
  168.                     this.selectedArrows = 2;
  169.                     break;
  170.                 case KeyEvent.VK_UP:
  171.                     this.selectedArrows = 3;
  172.                     break;
  173.                 case KeyEvent.VK_DOWN:
  174.                     this.selectedArrows = 4;
  175.                     break;
  176.             }
  177.             for (int i = 0; i < 4; i++) {
  178.                 if (i == this.selectedArrows - 1) {
  179.                     arrowsLabel[i].setIcon(new ImageIcon(getClass().getResource("/jhandhero/graphics/images/selected" + i + ".png")));
  180.                 } else {
  181.                     arrowsLabel[i].setIcon(new ImageIcon(getClass().getResource("/jhandhero/graphics/images/arrows" + i + ".png")));
  182.                 }
  183.             }
  184.         }
  185.  
  186.         @Override
  187.         public void keyReleased(KeyEvent e) {
  188.             int point = 0;
  189.             switch (this.selectedArrows) {
  190.                 case 1:
  191.                     point = this.labelControl(rightLabels, 1);
  192.                     break;
  193.                 case 2:
  194.                     point = this.labelControl(leftLabels, 2);
  195.                     break;
  196.                 case 3:
  197.                     point = this.labelControl(upLabels, 3);
  198.                     break;
  199.                 case 4:
  200.                     point = this.labelControl(downLabels, 4);
  201.                     break;
  202.             }
  203.             game.getPlayer().setScore(game.getPlayer().getScore() + point);
  204.             score.setText(game.getPlayer().getScore() + "");
  205.             this.selectedArrows = 0;
  206.             for (int i = 0; i < 4; i++) {
  207.                 arrowsLabel[i].setIcon(new ImageIcon(getClass().getResource("/jhandhero/graphics/images/arrows" + i + ".png")));
  208.             }
  209.         }
  210.  
  211.         private int labelControl(ArrayList<JLabel> pLabels, int pDirection) {
  212.             int retval = 0;
  213.             JLabel control = arrowsLabel[pDirection - 1];
  214.             for (int i = 0; i < pLabels.size(); i++) {
  215.                 Rectangle intersects = control.getBounds().intersection(pLabels.get(i).getBounds());
  216.                 if(!intersects.isEmpty()){
  217.                     retval = retval + (intersects.height + intersects.width);
  218.                     retval= retval*game.getLevel();
  219.                 }
  220.             }
  221.             return retval;
  222.         }
  223.     }
  224.  
  225.     /** Creates new form JHandHero */
  226.     public JHandHero(Game pGame) {
  227.         initComponents();
  228.         this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/JHandHero.png")));
  229.         this.game = pGame;
  230.         this.initInfo();
  231.         this.initLabel();
  232.         this.gamePanel.setFocusable(true);
  233.         this.move= new Move();
  234.         this.choose= new Choose();
  235.         this.started=false;
  236.     }
  237.  
  238.     private void initLabel() {
  239.         this.rightLabels = new ArrayList<JLabel>();
  240.         this.leftLabels = new ArrayList<JLabel>();
  241.         this.upLabels = new ArrayList<JLabel>();
  242.         this.downLabels = new ArrayList<JLabel>();
  243.         this.arrowsLabel = new JLabel[4];
  244.         for (int i = 0; i < 4; i++) {
  245.             this.arrowsLabel[i] = new JLabel(new ImageIcon(getClass().getResource("/jhandhero/graphics/images/arrows" + i + ".png")));
  246.             this.arrowsLabel[i].setSize(40, 40);
  247.             this.arrowsLabel[i].setLocation(20 + (i * 60), 320);
  248.             this.arrowsLabel[i].setVisible(true);
  249.             this.gamePanel.add(this.arrowsLabel[i]);
  250.         }
  251.     }
  252.  
  253.     private void initInfo() {
  254.         this.name.setText(this.game.getPlayer().getName());
  255.         this.level.setText(this.game.getLevel() + "");
  256.         this.score.setText(this.game.getPlayer().getScore() + "");
  257.     }
  258.  
  259.     /** This method is called from within the constructor to
  260.      * initialize the form.
  261.      * WARNING: Do NOT modify this code. The content of this method is
  262.      * always regenerated by the Form Editor.
  263.      */
  264.     @SuppressWarnings("unchecked")
  265.     // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
  266.     private void initComponents() {
  267.  
  268.         panel = new javax.swing.JPanel();
  269.         jLabel1 = new javax.swing.JLabel();
  270.         infoPanel = new javax.swing.JPanel();
  271.         nameLabel = new javax.swing.JLabel();
  272.         name = new javax.swing.JLabel();
  273.         levelLabel = new javax.swing.JLabel();
  274.         level = new javax.swing.JLabel();
  275.         scoreLabel = new javax.swing.JLabel();
  276.         score = new javax.swing.JLabel();
  277.         playPauseButton = new javax.swing.JButton();
  278.         toLevelUpLabel = new javax.swing.JLabel();
  279.         toLevelUp = new javax.swing.JLabel();
  280.         gamePanel = new javax.swing.JPanel();
  281.  
  282.         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  283.         setTitle("JHandHero - by Paolo Ricciuti (C)");
  284.         setFocusable(false);
  285.         setResizable(false);
  286.  
  287.         panel.setBackground(new java.awt.Color(0, 0, 0));
  288.         panel.setFocusable(false);
  289.  
  290.         jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
  291.         jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jhandhero/graphics/images/JHandHero.png"))); // NOI18N
  292.         jLabel1.setFocusable(false);
  293.  
  294.         infoPanel.setBackground(new java.awt.Color(0, 0, 0));
  295.         infoPanel.setFocusable(false);
  296.  
  297.         nameLabel.setForeground(new java.awt.Color(240, 240, 240));
  298.         nameLabel.setText("Nome:");
  299.         nameLabel.setFocusable(false);
  300.  
  301.         name.setForeground(new java.awt.Color(240, 240, 240));
  302.         name.setFocusable(false);
  303.  
  304.         levelLabel.setForeground(new java.awt.Color(240, 240, 240));
  305.         levelLabel.setText("Livello:");
  306.         levelLabel.setFocusable(false);
  307.  
  308.         level.setForeground(new java.awt.Color(240, 240, 240));
  309.         level.setFocusable(false);
  310.  
  311.         scoreLabel.setForeground(new java.awt.Color(240, 240, 240));
  312.         scoreLabel.setText("Score:");
  313.         scoreLabel.setFocusable(false);
  314.  
  315.         score.setForeground(new java.awt.Color(240, 240, 240));
  316.         score.setFocusable(false);
  317.  
  318.         playPauseButton.setText("Play");
  319.         playPauseButton.setFocusable(false);
  320.         playPauseButton.addActionListener(new java.awt.event.ActionListener() {
  321.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  322.                 playPauseButtonActionPerformed(evt);
  323.             }
  324.         });
  325.  
  326.         toLevelUpLabel.setForeground(new java.awt.Color(240, 240, 240));
  327.         toLevelUpLabel.setText("Level UP:");
  328.         toLevelUpLabel.setFocusable(false);
  329.  
  330.         toLevelUp.setForeground(new java.awt.Color(240, 240, 240));
  331.         toLevelUp.setFocusable(false);
  332.  
  333.         javax.swing.GroupLayout infoPanelLayout = new javax.swing.GroupLayout(infoPanel);
  334.         infoPanel.setLayout(infoPanelLayout);
  335.         infoPanelLayout.setHorizontalGroup(
  336.             infoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  337.             .addGroup(infoPanelLayout.createSequentialGroup()
  338.                 .addContainerGap()
  339.                 .addGroup(infoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  340.                     .addComponent(playPauseButton, javax.swing.GroupLayout.DEFAULT_SIZE, 107, Short.MAX_VALUE)
  341.                     .addGroup(infoPanelLayout.createSequentialGroup()
  342.                         .addComponent(nameLabel)
  343.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  344.                         .addComponent(name, javax.swing.GroupLayout.DEFAULT_SIZE, 70, Short.MAX_VALUE))
  345.                     .addGroup(infoPanelLayout.createSequentialGroup()
  346.                         .addComponent(levelLabel)
  347.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  348.                         .addComponent(level, javax.swing.GroupLayout.DEFAULT_SIZE, 68, Short.MAX_VALUE))
  349.                     .addGroup(infoPanelLayout.createSequentialGroup()
  350.                         .addComponent(scoreLabel)
  351.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  352.                         .addComponent(score, javax.swing.GroupLayout.DEFAULT_SIZE, 70, Short.MAX_VALUE))
  353.                     .addGroup(infoPanelLayout.createSequentialGroup()
  354.                         .addComponent(toLevelUpLabel)
  355.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  356.                         .addComponent(toLevelUp, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)))
  357.                 .addContainerGap())
  358.         );
  359.         infoPanelLayout.setVerticalGroup(
  360.             infoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  361.             .addGroup(infoPanelLayout.createSequentialGroup()
  362.                 .addContainerGap()
  363.                 .addGroup(infoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  364.                     .addComponent(nameLabel)
  365.                     .addComponent(name, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
  366.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  367.                 .addGroup(infoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  368.                     .addComponent(levelLabel)
  369.                     .addComponent(level, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
  370.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  371.                 .addGroup(infoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  372.                     .addComponent(scoreLabel)
  373.                     .addComponent(score, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
  374.                 .addGap(31, 31, 31)
  375.                 .addComponent(playPauseButton)
  376.                 .addGap(18, 18, 18)
  377.                 .addGroup(infoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  378.                     .addComponent(toLevelUpLabel)
  379.                     .addComponent(toLevelUp, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
  380.                 .addContainerGap(205, Short.MAX_VALUE))
  381.         );
  382.  
  383.         gamePanel.setBackground(new java.awt.Color(0, 0, 0));
  384.         gamePanel.setLayout(null);
  385.  
  386.         javax.swing.GroupLayout panelLayout = new javax.swing.GroupLayout(panel);
  387.         panel.setLayout(panelLayout);
  388.         panelLayout.setHorizontalGroup(
  389.             panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  390.             .addGroup(panelLayout.createSequentialGroup()
  391.                 .addComponent(gamePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 264, javax.swing.GroupLayout.PREFERRED_SIZE)
  392.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  393.                 .addComponent(infoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  394.             .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE)
  395.         );
  396.         panelLayout.setVerticalGroup(
  397.             panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  398.             .addGroup(panelLayout.createSequentialGroup()
  399.                 .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  400.                     .addGroup(panelLayout.createSequentialGroup()
  401.                         .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)
  402.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  403.                         .addComponent(gamePanel, javax.swing.GroupLayout.DEFAULT_SIZE, 356, Short.MAX_VALUE))
  404.                     .addGroup(panelLayout.createSequentialGroup()
  405.                         .addGap(200, 200, 200)
  406.                         .addComponent(infoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
  407.                 .addContainerGap())
  408.         );
  409.  
  410.         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  411.         getContentPane().setLayout(layout);
  412.         layout.setHorizontalGroup(
  413.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  414.             .addGroup(layout.createSequentialGroup()
  415.                 .addComponent(panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  416.                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  417.         );
  418.         layout.setVerticalGroup(
  419.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  420.             .addComponent(panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  421.         );
  422.  
  423.         java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
  424.         setBounds((screenSize.width-416)/2, (screenSize.height-615)/2, 416, 615);
  425.     }// </editor-fold>//GEN-END:initComponents
  426.  
  427.     private void playPauseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_playPauseButtonActionPerformed
  428.         if (this.playPauseButton.getText().equals("Play")) {
  429.             this.playPauseButton.setText("Pause");
  430.             this.gamePanel.addKeyListener(new KeysListener());
  431.             if(this.started){
  432.                 this.choose.resume();
  433.                 this.move.resume();
  434.             }else{
  435.                 this.choose.start();
  436.                 this.move.start();
  437.                 this.started=true;
  438.             }
  439.         } else {
  440.             this.playPauseButton.setText("Play");
  441.             this.gamePanel.removeKeyListener(this.gamePanel.getKeyListeners()[0]);
  442.             this.choose.pause();
  443.             this.move.pause();
  444.         }
  445.     }//GEN-LAST:event_playPauseButtonActionPerformed
  446.  
  447.     // Variables declaration - do not modify//GEN-BEGIN:variables
  448.     private javax.swing.JPanel gamePanel;
  449.     private javax.swing.JPanel infoPanel;
  450.     private javax.swing.JLabel jLabel1;
  451.     private javax.swing.JLabel level;
  452.     private javax.swing.JLabel levelLabel;
  453.     private javax.swing.JLabel name;
  454.     private javax.swing.JLabel nameLabel;
  455.     private javax.swing.JPanel panel;
  456.     private javax.swing.JButton playPauseButton;
  457.     private javax.swing.JLabel score;
  458.     private javax.swing.JLabel scoreLabel;
  459.     private javax.swing.JLabel toLevelUp;
  460.     private javax.swing.JLabel toLevelUpLabel;
  461.     // End of variables declaration//GEN-END:variables
  462. }