Gra a la Arkanoid, jak poprawic dzialanie

0

Myślę, że każdy zna grę Arkanoid i wie jak powinna działać. Więc mam już część kodu. To ma być taka bardzo prymitywna wersja tej gry. Zastanawiam się co napisać, żeby kulka i cegiełki oddziaływały na siebie. Dla belki odbijającej kulkę było to banalne. Niby dla każdej cegiełki można by podobnie zrobić, ale gdyby cegiełek było dużo to kod by się bardzo rozrósł. Więc to jest mój problem, jak inaczej sprawić, żeby kulka oddziaływała z cegiełkami. No i żeby znikały po uderzeniu.

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.geom.*;
import java.util.ArrayList;

class Kulka extends Ellipse2D.Float
{
   Pole plansza;
   int dx,dy;
   Belka b;
   
   Kulka(Pole plansza,int x,int y,int dx,int dy,Belka b) 
   {                                             
      this.x=x;                                  
      this.y=y;                                  
      this.width=10;                             
      this.height=10;                            
                                                 
      this.plansza=plansza;                      
      this.dx=dx;                                
      this.dy=dy;
      
      this.b=b;
   }                                             
   
   void nextKrok()                                              
   {                                                           
      x+=dx;                                                   
      y+=dy;                                                   
                                                               
      if(getMinX()<0 || getMaxX()>plansza.getWidth())  dx=-dx; 
      if(getMinY()<0 || getMaxY()>plansza.getHeight()) dy=-dy; 
      if(getY()==245 && getX()>b.getXx()&& getX()<(b.getXx()+60)) dy=-dy;
      if(getY()==255 && getX()>b.getXx()&& getX()<(b.getXx()+60)) dy=-dy;
                                                               
      plansza.repaint();                                       
   }                                                           
}

class SilnikKulki extends Thread
{
   Kulka a;
   
   SilnikKulki(Kulka a) 
   {                    
      this.a=a;         
      start();          
   }                    
   
   public void run()                   
   {                                  
      try                             
      {                               
         while(true)                  
         {                            
            a.nextKrok();             
            sleep(15);                
         }                            
      }                               
      catch(InterruptedException e){} 
   }                                  
}


class Cegielka extends Rectangle2D.Float
{ 
	Cegielka(int x, int y)       
	   {                  
	      this.x=x;
	      this.y=y;     
	      this.width=40;  
	      this.height=20; 
	   }
}

class Belka extends Rectangle2D.Float
{
   Belka(int x)       
   {                  
      this.x=x;
      this.y=250;     
      this.width=60;  
      this.height=10; 
   }                  
   
   void setX(int x) 
   {                
      this.x=x;     
   }  
   float getXx(){
	   float polozenie=0;
	   polozenie=this.x;
	   return polozenie;
   }
}

class Pole extends JPanel implements MouseMotionListener
{
   Belka b=new Belka(100);
   Kulka a=new Kulka(this,100,100,1,1,b);
   Cegielka[] c={new Cegielka(100,50),new Cegielka(145,50),new Cegielka(190,50),new Cegielka(235,50),new Cegielka(100,75),new Cegielka(145,75),new Cegielka(190,75),new Cegielka(235,75)};
   
   
   Pole()                           
   {                                
      super();   
      setPreferredSize(new Dimension(400,300));
      addMouseMotionListener(this); 
      new SilnikKulki(a);           
   }                                
   
   public void paintComponent(Graphics g)                                                       
   {                                                                                           
      super.paintComponent(g);                                                                 
      Graphics2D g2d=(Graphics2D)g;                                                            
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 
                                                                                               
      g2d.fill(a);    //kulka                                                                         
      g2d.fill(b);		//belka
      for(int i=0; i<8;i++){
    	  g2d.fill(c[i]);
      }
      
      
   }                                                                                           
   
   public void mouseMoved(MouseEvent e) 
   {                                    
      b.setX(e.getX()-30);   //-30 zeby za srodek belki trzymac           
      repaint();                        
   }                                    
   
   public void mouseDragged(MouseEvent e) 
   {                                      
                                          
   }                                      
}
public class Gra extends JFrame
{
   public static void main(String[] args)
   {
        new Gra();
   }
   public Gra()              
   {                              
        setContentPane(new Pole());
        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);   
   }                              
}
0

Lista cegiełek i w pętli sprawdzasz kolizję z każdą cegiełką.

0

moze to nie odpowiedź ale nie wiem po co Ci ten antyaliasing? :)

0

A taka metoda collidesWith(), czy może ona już należy do tych przestarzałych?

0
swr napisał(a):

moze to nie odpowiedź ale nie wiem po co Ci ten antyaliasing? :)

A bo to kawałek kodu już był i trzeba przerobić. Antyaliasing był w pierwotnej wersji.

0

Jak to jest z tą listą? Zastanawiam się nad ArrayList, ale czy ta lista może być użyta dla własnej klasy obiektów?

1 użytkowników online, w tym zalogowanych: 0, gości: 1