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);
}
}