Jeszcze jeden problem wydawało mi się, że banalny, ale jednak... Chodzi o to, że po zbiciu prostokątów powinno się pokazać okienko z komunikatem ile sekund zajęła gra, a po naciśnięciu OK powinna się gra restartować automatycznie. To co mi się wydawało jest zakomentowane.
Czyli pytanie konkretne jak restartować grę?
To był mój pomysł, ale zawiódł:
if(lista.isEmpty()==true){
JOptionPane.showMessageDialog(null,"Twoj czas: "+label.getText());
// new Gra();
}
A to cały kod:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.geom.*;
import java.util.ArrayList;
public class Gra extends JFrame
{
Label label;
public static void main(String[] args)
{
new Gra();
}
public Gra()
{
setContentPane(new Pole());
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
label=new Label("start");
label.setSize(400, 80);
add(label);
Timer t1 = new Timer(label);
t1.start();
}
class Kulka extends Ellipse2D.Float
{
Pole plansza;
int dx,dy;
Belka b;
ArrayList<Cegielka> lista= new ArrayList<Cegielka>(8);
Kulka(Pole plansza,int x,int y,int dx,int dy,Belka b, ArrayList<Cegielka> l)
{
this.x=x;
this.y=y;
this.width=10;
this.height=10;
this.plansza=plansza;
this.dx=dx;
this.dy=dy;
this.b=b;
for(int i=0; i<8;i++){
this.lista=l;
}
}
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;
if(lista.isEmpty()==true){
JOptionPane.showMessageDialog(null,"Twoj czas: "+label.getText());
// new Gra();
}
for(int i=0;i<lista.size();i++){
if(getY()==lista.get(i).getYy()-10 && getX()>lista.get(i).getXx() && getX()<lista.get(i).getXx()+40){
dy=-dy;
lista.remove(i);
plansza.repaint();
return;}
if(getY()==lista.get(i).getYy()+10 && getX()>lista.get(i).getXx() && getX()<lista.get(i).getXx()+40) {
dy=-dy;
lista.remove(i);
plansza.repaint();
return;}
if(getX()==lista.get(i).getXx() && getY()>lista.get(i).getYy() && getY()<lista.get(i).getYy()+20) {
dx=-dx;
lista.remove(i);
plansza.repaint();
return;}
if(getX()==lista.get(i).getXx()+40 && getY()>lista.get(i).getYy() && getY()<lista.get(i).getYy()+20){
dx=-dx;
lista.remove(i);
plansza.repaint();
return;}
}
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;
}
float getXx(){
float polozenie=0;
polozenie=this.x;
return polozenie;
}
float getYy(){
float polozenie=0;
polozenie=this.y;
return polozenie;
}
}
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);
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)};
ArrayList<Cegielka> l=new ArrayList<Cegielka>();{
for(int i=0; i<8;i++){
l.add(c[i]);
}}
Kulka a=new Kulka(this,100,100,1,1,b,l);
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.fill(a); //kulka
g2d.fill(b); //belka
for(int i=0; i<l.size();i++){
g2d.fill(l.get(i));
}
}
public void mouseMoved(MouseEvent e)
{
b.setX(e.getX()-30); //-30 zeby za srodek belki trzymac
repaint();
}
public void mouseDragged(MouseEvent e)
{
}
}
class Timer extends Thread{
Label tl;
Timer(Label l) {tl=l;}
public void run(){
int time =0;
while (true){
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
time++;
tl.setText(String.valueOf(time));
}
}
}
}