martaczaska

GamePanel

Dec 30th, 2019
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.23 KB | None | 0 0
  1. package pl.gda.biomed.wjp;
  2.  
  3. import java.awt.BasicStroke;
  4. import java.awt.Color;
  5. import java.awt.Font;
  6. import java.awt.Graphics;
  7. import java.awt.Graphics2D;
  8. import java.awt.RenderingHints;
  9. import java.awt.event.MouseAdapter;
  10. import java.awt.event.MouseEvent;
  11. import java.text.DecimalFormat;
  12. import javax.swing.JOptionPane;
  13. import javax.swing.JPanel;
  14.  
  15. /**
  16.  * Główna obszar graficzny gry
  17.  * Klasa dziedzicząca po klasie JPanel
  18.  * @author Jacek Rumiński
  19.  */
  20. public class GamePanel extends JPanel{
  21.     /** Szerokość pola graficznego gry*/
  22.     public int sWidth;
  23.     /** Wysokość pola graficznego gry*/
  24.     public int sHeight;
  25.     /** Liczba obiektów/balonów w linii*/
  26.     public int objectsInLine;
  27.     /** Przesunięcie pomiędzy liniami z obiektami/bsalonami*/
  28.     public int shiftBL;
  29.     /** Obiekt reprezentujący status gry*/
  30.     public GameStatus gStatus;
  31.     /** Wysokość paska menu*/
  32.     public int barHeight;
  33.     /** Czcionki stosowane w pasku Menu*/
  34.     public Font menuFont;
  35.     /** Czcionki stosowane jako alert w polu gry*/
  36.     public Font alertFont;
  37.     /** Tablica obiektów pierwszego planu - balony*/
  38.     private FlyingBalloon [] fBalloon;
  39.    
  40.     /**
  41.      * Konstruktor klasy pola graficznego gry.
  42.      * Ustawienia początkowe oraz ładowanie zasobów
  43.      * Ponadto dodanie obsługi zdarzeń w polu graficznym gry
  44.      * @param width Szerokość pola graficznego gry
  45.      * @param height Wysokość pola graficznego gry
  46.      */
  47.     public GamePanel(int width, int height){
  48.        
  49.         gStatus=new GameStatus();
  50.         gStatus.reset();
  51.         menuFont=new Font("Dialog",Font.BOLD,36);
  52.         alertFont=new Font("Dialog",Font.BOLD,92);
  53.        
  54.         this.sWidth=width;
  55.         this.sHeight=height;
  56.         barHeight=50;
  57.        
  58.         //c=Color.YELLOW;
  59.         //x=512;
  60.         //y=380;
  61.        
  62.         objectsInLine=4;
  63.         shiftBL=sHeight/(GPars.noOfObjects/objectsInLine);
  64.         fBalloon=new FlyingBalloon[GPars.noOfObjects];
  65.  
  66.         restartGame();
  67.        
  68.         /* Dodaj obsługę zdarzeń - wciśnięcie przycisku myszki*/
  69.         addMouseListener(new MouseAdapter(){
  70.             @Override
  71.           public void mouseClicked(MouseEvent me){
  72.               //Czy wybrano opcję Menu w pasku dolnym
  73.               if(me.getX()>(sWidth-150) && me.getY()>(sHeight-barHeight)){
  74.                   GPars.pause=!GPars.pause;
  75.                   return;
  76.               }
  77.               //Czy wybrano z Menu pozycję Koniec gry
  78.               if(me.getX()<300 && me.getY()>(sHeight-barHeight)){
  79.                   if(GPars.pause){
  80.                       System.exit(1);
  81.                   }
  82.               }
  83.               //czy wybrano rozpoczęcie nowego poziomu lub nowej gry
  84.               if(me.getX()>500 && me.getX()<800 && me.getY()>(sHeight-barHeight)){
  85.                   //Nowa gra
  86.                   if(GPars.pause){
  87.                       GPars.MoveMODE=1;
  88.                       GPars.end=false;
  89.                       gStatus.reset();
  90.                       GPars.levelPause=false;
  91.                       GPars.bgImage = GPars.loadImage("images/grass_sky_1024.jpg");
  92.                       restartGame();
  93.                       repaint();
  94.                   }else{
  95.                       //Nowy poziom
  96.                       if(GPars.levelPause){
  97.                           //Czy dostępny jest kolejny poziom
  98.                           if (GPars.MoveMODE<GPars.NO_LEVELS){
  99.                               GPars.MoveMODE++;
  100.                               gStatus.time+=GPars.levelTime;
  101.                               GPars.levelPause=false;
  102.                               GPars.bgImage = GPars.loadImage("images/sand_sky_1024.jpg");
  103.                               gStatus.nextLevel();
  104.                               restartGame();
  105.                           }else{
  106.                               //koniec poziomów = koniec gry
  107.                               GPars.end=true;
  108.                               gStatus.time+=GPars.levelTime;
  109.                               GPars.pause=true;
  110.                           }
  111.                           repaint();
  112.                       }
  113.                   }
  114.               }
  115.               //inaczej sprawdź czy trafiono obiekt (balon)
  116.               for(int i=0;i<fBalloon.length;i++){
  117.                   if(me.getY()<(sHeight-barHeight)){
  118.                       if(fBalloon[i].containsPoint(me.getX(), me.getY())){
  119.                           if(!fBalloon[i].hit){
  120.                               fBalloon[i].setHit();
  121.                               gStatus.points++;
  122.                           }
  123.                       }
  124.                   }
  125.               }//koniec for i
  126.           }//koniec mouseClicked()
  127.       });
  128.        
  129.        
  130.     }//koniec GamePanel()
  131.    
  132.    
  133.     /**
  134.      * Nadpisz metodę odpowiedzialną za odrysowanie panelu - własne wypełnienie
  135.      * pola graficznego gry, zgodnie z wybraną treścią.
  136.      * @param gs
  137.      */
  138.     @Override
  139.     protected void paintComponent(Graphics gs){
  140.         Graphics2D g=(Graphics2D)gs;
  141.         //Ustaw tryb lepszej jakości grafiki (wygładzanie/antyaliasing)
  142.         g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  143.         // Narysuj tło
  144.         g.drawImage(GPars.bgImage, 0, 0, null);
  145.  
  146.         //Na tle obiektu pierwszego planu
  147.         for(int i=0;i<fBalloon.length;i++){
  148.             fBalloon[i].calculatePathPos(GPars.MoveMODE);
  149.             if(!fBalloon[i].hit)
  150.                 g.drawImage(fBalloon[i].icon,fBalloon[i].currX,sHeight-fBalloon[i].currY,(int)(fBalloon[i].icon.getWidth(null)*(1.0-fBalloon[i].currY/(double)sHeight)), (int)(fBalloon[i].icon.getHeight(null)*(1.0-fBalloon[i].currY/(double)sHeight)),null);
  151.         }
  152.  
  153.         //Ustaw kolor dolnego paska Menu i narysuj pasek
  154.         g.setColor(new Color(50,30,0));
  155.         g.fillRect(0, sHeight-barHeight, sWidth, barHeight);
  156.         //Ustaw kolor domyślny
  157.         g.setColor(Color.white);
  158.         //Ustaw czcionki do wypełnienia paska Menu
  159.         g.setFont(menuFont);
  160.        
  161.         //Jeśli już wybrano Menu (czyli pausa) narysuj stosowną wersję paska Menu
  162.         if(GPars.pause){
  163.             g.drawImage(GPars.menuGameImage,sWidth-150,sHeight-barHeight-30,null);
  164.             g.setColor(Color.red);
  165.             g.drawString("KONIEC GRY!",10,sHeight-10);
  166.             g.setColor(Color.white);
  167.             g.drawString("O GRZE...",300, sHeight-10);
  168.             g.drawString("NOWA GRA!",550, sHeight-10);
  169.             if(GPars.end){ //Czy wszystkie poziomy skończone - koniec gry
  170.                 g.setColor(Color.RED);
  171.                 //g.drawString("KONIEC?",500, sHeight-10);
  172.                 g.setFont(alertFont);
  173.                 DecimalFormat df = new DecimalFormat("#.##");
  174.                 g.drawString("KONIEC GRY! ",170, sHeight/2);
  175.                 g.drawString("CZAS RAZEM="+df.format(gStatus.time)+"s",10, sHeight/2+100);
  176.                 g.setColor(Color.white);
  177.                 g.setFont(menuFont);
  178.             }
  179.         //Nie wybranu nic z menu - pokaż poziom i stan punktów w trakcie gry    
  180.         }else{
  181.             g.drawString("POZIOM:",10, sHeight-10);
  182.  
  183.             g.drawString(""+gStatus.level,200, sHeight-10);
  184.             g.drawString("PUNKTY:",300, sHeight-10);
  185.             // Czy ukończono poziom - wskazano wszystkie obiekty pozciomu
  186.             if(gStatus.points==GPars.noOfObjects){
  187.                 if(!GPars.levelPause){
  188.                     long stopTime = System.currentTimeMillis();
  189.                     GPars.levelTime=(stopTime-GPars.startTime)/1000.0;
  190.                     GPars.levelPause=true;
  191.                 }
  192.                 g.setColor(Color.RED);
  193.                 g.drawString("GRASZ DALEJ?",500, sHeight-10);
  194.                 g.setFont(alertFont);
  195.                 DecimalFormat df = new DecimalFormat("#.##");
  196.                 g.drawString("WYGRANA:"+df.format(GPars.levelTime)+"s",150, sHeight/2);
  197.                 g.setColor(Color.white);
  198.                 g.setFont(menuFont);
  199.             //Jak nie zmień punkty jeśli stosowne
  200.             }else
  201.                 g.drawString(""+gStatus.points,500, sHeight-10);
  202.             //narysuj ikonę z napisem Menu
  203.             g.drawImage(GPars.menuImage,sWidth-150,sHeight-barHeight-30,null);
  204.         }
  205.         //narysuj ikonę z logo
  206.         g.drawImage(GPars.logoImage,sWidth-180,sHeight-barHeight+15,null);
  207.  
  208.     }//
  209.    
  210.     /**
  211.      * Restart gry - ustawienia parametrów oraz obiektów pierwszego planu
  212.      *
  213.      */
  214.     private void restartGame(){
  215.         gStatus.resetPoints();
  216.         GPars.startTime=System.currentTimeMillis();
  217.         GPars.pause=false;
  218.         int offset=sWidth/objectsInLine;
  219.         int inLine=0;    
  220.         int yLine=0;
  221.         for(int i=0; i<GPars.noOfObjects;i++){
  222.          
  223.             fBalloon[i]=new FlyingBalloon((((inLine%objectsInLine)+1)*offset)-GPars.balloons[(i%GPars.balloons.length)].getWidth(null),0,100,0.0025,GPars.balloons);
  224.             fBalloon[i].setScreenSize(sWidth, sHeight);
  225.  
  226.             if(inLine>=objectsInLine){
  227.                 yLine++;
  228.                 inLine%=objectsInLine;
  229.             }
  230.             inLine++;
  231.             fBalloon[i].setYPos(yLine*shiftBL*-1);
  232.         }//koniec for i
  233.        
  234.     }//koniec restartGame()
  235.    
  236.  
  237. }//koniec klasy GamePanel
Advertisement
Add Comment
Please, Sign In to add comment