Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pl.gda.biomed.wjp;
- import java.awt.BasicStroke;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.RenderingHints;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.text.DecimalFormat;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- /**
- * Główna obszar graficzny gry
- * Klasa dziedzicząca po klasie JPanel
- * @author Jacek Rumiński
- */
- public class GamePanel extends JPanel{
- /** Szerokość pola graficznego gry*/
- public int sWidth;
- /** Wysokość pola graficznego gry*/
- public int sHeight;
- /** Liczba obiektów/balonów w linii*/
- public int objectsInLine;
- /** Przesunięcie pomiędzy liniami z obiektami/bsalonami*/
- public int shiftBL;
- /** Obiekt reprezentujący status gry*/
- public GameStatus gStatus;
- /** Wysokość paska menu*/
- public int barHeight;
- /** Czcionki stosowane w pasku Menu*/
- public Font menuFont;
- /** Czcionki stosowane jako alert w polu gry*/
- public Font alertFont;
- /** Tablica obiektów pierwszego planu - balony*/
- private FlyingBalloon [] fBalloon;
- /**
- * Konstruktor klasy pola graficznego gry.
- * Ustawienia początkowe oraz ładowanie zasobów
- * Ponadto dodanie obsługi zdarzeń w polu graficznym gry
- * @param width Szerokość pola graficznego gry
- * @param height Wysokość pola graficznego gry
- */
- public GamePanel(int width, int height){
- gStatus=new GameStatus();
- gStatus.reset();
- menuFont=new Font("Dialog",Font.BOLD,36);
- alertFont=new Font("Dialog",Font.BOLD,92);
- this.sWidth=width;
- this.sHeight=height;
- barHeight=50;
- //c=Color.YELLOW;
- //x=512;
- //y=380;
- objectsInLine=4;
- shiftBL=sHeight/(GPars.noOfObjects/objectsInLine);
- fBalloon=new FlyingBalloon[GPars.noOfObjects];
- restartGame();
- /* Dodaj obsługę zdarzeń - wciśnięcie przycisku myszki*/
- addMouseListener(new MouseAdapter(){
- @Override
- public void mouseClicked(MouseEvent me){
- //Czy wybrano opcję Menu w pasku dolnym
- if(me.getX()>(sWidth-150) && me.getY()>(sHeight-barHeight)){
- GPars.pause=!GPars.pause;
- return;
- }
- //Czy wybrano z Menu pozycję Koniec gry
- if(me.getX()<300 && me.getY()>(sHeight-barHeight)){
- if(GPars.pause){
- System.exit(1);
- }
- }
- //czy wybrano rozpoczęcie nowego poziomu lub nowej gry
- if(me.getX()>500 && me.getX()<800 && me.getY()>(sHeight-barHeight)){
- //Nowa gra
- if(GPars.pause){
- GPars.MoveMODE=1;
- GPars.end=false;
- gStatus.reset();
- GPars.levelPause=false;
- GPars.bgImage = GPars.loadImage("images/grass_sky_1024.jpg");
- restartGame();
- repaint();
- }else{
- //Nowy poziom
- if(GPars.levelPause){
- //Czy dostępny jest kolejny poziom
- if (GPars.MoveMODE<GPars.NO_LEVELS){
- GPars.MoveMODE++;
- gStatus.time+=GPars.levelTime;
- GPars.levelPause=false;
- GPars.bgImage = GPars.loadImage("images/sand_sky_1024.jpg");
- gStatus.nextLevel();
- restartGame();
- }else{
- //koniec poziomów = koniec gry
- GPars.end=true;
- gStatus.time+=GPars.levelTime;
- GPars.pause=true;
- }
- repaint();
- }
- }
- }
- //inaczej sprawdź czy trafiono obiekt (balon)
- for(int i=0;i<fBalloon.length;i++){
- if(me.getY()<(sHeight-barHeight)){
- if(fBalloon[i].containsPoint(me.getX(), me.getY())){
- if(!fBalloon[i].hit){
- fBalloon[i].setHit();
- gStatus.points++;
- }
- }
- }
- }//koniec for i
- }//koniec mouseClicked()
- });
- }//koniec GamePanel()
- /**
- * Nadpisz metodę odpowiedzialną za odrysowanie panelu - własne wypełnienie
- * pola graficznego gry, zgodnie z wybraną treścią.
- * @param gs
- */
- @Override
- protected void paintComponent(Graphics gs){
- Graphics2D g=(Graphics2D)gs;
- //Ustaw tryb lepszej jakości grafiki (wygładzanie/antyaliasing)
- g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
- // Narysuj tło
- g.drawImage(GPars.bgImage, 0, 0, null);
- //Na tle obiektu pierwszego planu
- for(int i=0;i<fBalloon.length;i++){
- fBalloon[i].calculatePathPos(GPars.MoveMODE);
- if(!fBalloon[i].hit)
- 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);
- }
- //Ustaw kolor dolnego paska Menu i narysuj pasek
- g.setColor(new Color(50,30,0));
- g.fillRect(0, sHeight-barHeight, sWidth, barHeight);
- //Ustaw kolor domyślny
- g.setColor(Color.white);
- //Ustaw czcionki do wypełnienia paska Menu
- g.setFont(menuFont);
- //Jeśli już wybrano Menu (czyli pausa) narysuj stosowną wersję paska Menu
- if(GPars.pause){
- g.drawImage(GPars.menuGameImage,sWidth-150,sHeight-barHeight-30,null);
- g.setColor(Color.red);
- g.drawString("KONIEC GRY!",10,sHeight-10);
- g.setColor(Color.white);
- g.drawString("O GRZE...",300, sHeight-10);
- g.drawString("NOWA GRA!",550, sHeight-10);
- if(GPars.end){ //Czy wszystkie poziomy skończone - koniec gry
- g.setColor(Color.RED);
- //g.drawString("KONIEC?",500, sHeight-10);
- g.setFont(alertFont);
- DecimalFormat df = new DecimalFormat("#.##");
- g.drawString("KONIEC GRY! ",170, sHeight/2);
- g.drawString("CZAS RAZEM="+df.format(gStatus.time)+"s",10, sHeight/2+100);
- g.setColor(Color.white);
- g.setFont(menuFont);
- }
- //Nie wybranu nic z menu - pokaż poziom i stan punktów w trakcie gry
- }else{
- g.drawString("POZIOM:",10, sHeight-10);
- g.drawString(""+gStatus.level,200, sHeight-10);
- g.drawString("PUNKTY:",300, sHeight-10);
- // Czy ukończono poziom - wskazano wszystkie obiekty pozciomu
- if(gStatus.points==GPars.noOfObjects){
- if(!GPars.levelPause){
- long stopTime = System.currentTimeMillis();
- GPars.levelTime=(stopTime-GPars.startTime)/1000.0;
- GPars.levelPause=true;
- }
- g.setColor(Color.RED);
- g.drawString("GRASZ DALEJ?",500, sHeight-10);
- g.setFont(alertFont);
- DecimalFormat df = new DecimalFormat("#.##");
- g.drawString("WYGRANA:"+df.format(GPars.levelTime)+"s",150, sHeight/2);
- g.setColor(Color.white);
- g.setFont(menuFont);
- //Jak nie zmień punkty jeśli stosowne
- }else
- g.drawString(""+gStatus.points,500, sHeight-10);
- //narysuj ikonę z napisem Menu
- g.drawImage(GPars.menuImage,sWidth-150,sHeight-barHeight-30,null);
- }
- //narysuj ikonę z logo
- g.drawImage(GPars.logoImage,sWidth-180,sHeight-barHeight+15,null);
- }//
- /**
- * Restart gry - ustawienia parametrów oraz obiektów pierwszego planu
- *
- */
- private void restartGame(){
- gStatus.resetPoints();
- GPars.startTime=System.currentTimeMillis();
- GPars.pause=false;
- int offset=sWidth/objectsInLine;
- int inLine=0;
- int yLine=0;
- for(int i=0; i<GPars.noOfObjects;i++){
- fBalloon[i]=new FlyingBalloon((((inLine%objectsInLine)+1)*offset)-GPars.balloons[(i%GPars.balloons.length)].getWidth(null),0,100,0.0025,GPars.balloons);
- fBalloon[i].setScreenSize(sWidth, sHeight);
- if(inLine>=objectsInLine){
- yLine++;
- inLine%=objectsInLine;
- }
- inLine++;
- fBalloon[i].setYPos(yLine*shiftBL*-1);
- }//koniec for i
- }//koniec restartGame()
- }//koniec klasy GamePanel
Advertisement
Add Comment
Please, Sign In to add comment