martaczaska

FlyingBalloon

Dec 30th, 2019
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.05 KB | None | 0 0
  1. package pl.gda.biomed.wjp;
  2.  
  3. import java.awt.Image;
  4. import java.awt.Point;
  5. import java.io.File;
  6. import javax.sound.sampled.AudioInputStream;
  7. import javax.sound.sampled.AudioSystem;
  8. import javax.sound.sampled.Clip;
  9.  
  10.  
  11. /**
  12.  * Klasa modelująca przemieszczający się balon
  13.  * @author Jacek Rumiński
  14.  */
  15. public class FlyingBalloon {
  16.     /** Początkowa współrzędna x obiektu */
  17.     public int x;
  18.     /** Początkowa współrzędna y obiektu */
  19.     public int y;
  20.     /** Aktualna współrzędna x obiektu */
  21.     public int currX;
  22.     /** Aktualna współrzędna y obiektu */
  23.     public int currY;
  24.     /** Szerokość ikony obiektu  */
  25.     public int width;
  26.     /** Wysokość ikony obiektu */
  27.     public int height;
  28.    
  29.     /** Krok przesunięcia obiektu z dołu do góry */
  30.     public int dy;
  31.     /** Kąt w funkcji sinus opisującej ruch balonu */
  32.     private double angle;
  33.     /** Amplituda w funkcji sinus opisującej ruch balonu */
  34.     public int ampl;
  35.     /** Częstotliwość funkcji sinus opisującej ruch balonu */
  36.     public double freq;
  37.     /** Kolor balonu */
  38.     public int color;
  39.     /** Omega 2Pi*f */
  40.     public final static double w=2*Math.PI;
  41.     /** Szerokość pola graficznego*/
  42.     public int sWidth;
  43.     /** Wysokość pola graficznego*/
  44.     public int sHeight;
  45.    
  46.     /** Czy trafiono balon */
  47.     public boolean hit;
  48.     /** Ikona obiektu - balonu*/
  49.     public Image icon;
  50.    
  51.     /**
  52.      * Konstruktor - ustawienie parametrów obiektu, wylosowanie koloru balonu
  53.      * @param x początkowa współrzędna x
  54.      * @param y początkowa współrzędna y
  55.      * @param ampl amplituda sinus (ruch balonu)
  56.      * @param freq częstotliwość w funkcji sinus
  57.      * @param images tablica ikon z balonami
  58.      */
  59.     public FlyingBalloon(int x, int y, int ampl, double freq, Image[] images){
  60.         this.x=x;
  61.         this.y=y;
  62.         currX=x;
  63.         currY=y;
  64.         this.dy=10;
  65.         sWidth=1024;
  66.         sHeight=768;
  67.         hit=false;
  68.        
  69.         this.ampl=ampl;
  70.         this.freq=freq;
  71.         //losujemy kolor balonu
  72.         color=(int)(0.4+Math.random()*images.length);
  73.         if(color>=images.length) color=images.length-1;
  74.         icon=images[color];
  75.         width=icon.getWidth(null);
  76.         height=icon.getHeight(null);
  77.         //ustawiamy pulsację w funkcji sinus 2 Pi f
  78.         setOmega(this.freq);
  79.  
  80.        
  81.     }
  82.     /**
  83.      * Balon trafiony - ustaw stan i odtwórz dźwięk
  84.      */
  85.     public void setHit(){
  86.         if(!hit){
  87.             hit=true;
  88.             playSound(new File("sounds/balloon_boom.wav"));
  89.         }
  90.     }//setHint()
  91.    
  92.     /**
  93.      * Ustaw pozycję balonu
  94.      * @param cX współrzędna x
  95.      * @param cY współrzędna y
  96.      */
  97.     public void setPosition(int cX, int cY){
  98.         currX=cX;
  99.         currY=cY;
  100.     }//setPosition()
  101.    
  102.     /**
  103.      * Ustaw rozmiar pola graficznego
  104.      * @param gWidth szerokość
  105.      * @param gHeight wysokość
  106.      */
  107.     public void setScreenSize(int gWidth, int gHeight){
  108.         sWidth=gWidth;
  109.         sHeight=gHeight;
  110.     }
  111.    
  112.     /**
  113.      * Ustaw pozycję y obiektu/balonu
  114.      * @param cY
  115.      */
  116.     public void setYPos(int cY){
  117.         currY=cY;
  118.     }//setYPos()
  119.    
  120.     /**
  121.      * Pobierz pozycję balonu
  122.      * @return pozycja balonu
  123.      */
  124.     public Point getPosition(){
  125.         return new Point(currX,currY);
  126.     }//getPosition()
  127.  
  128.     /**
  129.      * Ustaw 2 Pi f
  130.      * @param freq
  131.      */
  132.     public void setOmega(double freq){
  133.         angle=w*freq;
  134.     }//setOmega()
  135.    
  136.     /**
  137.      * Metoda obliczania pozycji balonu - symulacja ruchu
  138.      *
  139.      * @param mode Tryb określający ruch: 1 - liniowo (prawie) do góry
  140.      * 2 - sinus do góry
  141.      */
  142.     public void calculatePathPos(int mode){
  143.         int tmpX=0;
  144.         switch(mode){
  145.             case 1: //liniowo
  146.                    currY=currY+dy;
  147.                    if(currY>sHeight) {
  148.                        currY=0;
  149.                    }
  150.                    tmpX=0;
  151.                    currX=x+tmpX;
  152.                     break;
  153.             case 2://sinus
  154.                    currY=currY+dy;
  155.                    if(currY>sHeight) {
  156.                        currY=0;
  157.                    }
  158.                    tmpX=(int)(ampl*Math.sin(angle*currY));
  159.                    currX=x+tmpX;
  160.                    
  161.                    break;
  162.             default: break;    
  163.         }
  164.        
  165.     }//calculatePathPos()
  166.    
  167.     /**
  168.      * Funkcja określająca czy określone współrzędne (np. klik myszką
  169.      * są w obrębie obiektu/balonu
  170.      * @param x  wsp. x
  171.      * @param y  wsp. y
  172.      * @return true jeśli obszar balonu zawiera dany punkt
  173.      */
  174.     public boolean containsPoint(int x, int y){
  175.         //skalowanie rozmiaru balonu wraz z ruchem z dołu w górę
  176.         scaleWidthHeight((double)sHeight);
  177.         if(x>=currX && x<currX+width){
  178.             if(y>=(sHeight-currY) && y<(sHeight-currY+height)){
  179.                 return true;
  180.             }
  181.         }
  182.        
  183.         return false;
  184.     }//containsPoint()
  185.    
  186.     /**
  187.      * Skalowanie rozmiaru balonu wraz z ruchem z dołu w górę
  188.      * @param scale
  189.      */
  190.     public void scaleWidthHeight(double scale){
  191.         width=(int)(icon.getWidth(null)*(1.0-currY/scale));
  192.         height=(int)(icon.getHeight(null)*(1.0-currY/scale));
  193.     }//scaleWidthHeight()
  194.    
  195.    
  196.     /**
  197.      * Funkcja odtwarzania dźwięku z pliku
  198.      * @param f - obiekt klasy File reprezentujący ścieżkę do pliku MP3
  199.      */
  200.     public static synchronized void playSound(final File f) {
  201.         new Thread(new Runnable() {
  202.           public void run() {
  203.             try {
  204.               Clip clip = AudioSystem.getClip();
  205.               AudioInputStream inputStream = AudioSystem.getAudioInputStream(f);
  206.               clip.open(inputStream);
  207.               clip.start();
  208.             } catch (Exception e) {
  209.               System.err.println(e.getMessage());
  210.             }
  211.           }
  212.         }).start();
  213.     }//playSound()
  214.  
  215.  
  216. }//koniec class FlyingBallonn
Advertisement
Add Comment
Please, Sign In to add comment