Witam robię bardzo prosta grę w Javie i mam problem związany z tym że w momencie w którym wciskam przycisk który wywołuje metodę animacje która z kolei kilkukrotnie wywołuje metodę klasy JFrame repaint(); to repaint wykonuje się tylko raz po zakończeniu działania przycisku. przez co nie mogę osiągnąć oczekiwanego efektu. tego samego kodu używałem w metodzie doDziela() i tam wszystko działało pionki przeskakiwały z jednego pola nr.1 na pole nr.2 itd. A z kolei ta sama metoda(animacje()) wywołana przy użyciu przycisku nie działa. Oto kod całego programu
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class KolkaGra
{
private JFrame ramka;
private KoloPanel panelKol;
private KoloPanel []tablicaKol;
private KolkaGra gra;
private ArrayList<Gracz> listaGraczy;
private JButton rzuc;
private boolean czyLosuj;
private boolean czyRobic;
public static void main(String[] args)
{
KolkaGra gra=new KolkaGra();
gra.doDziela();
}
public void doDziela()
{
gra=this;
ramka=new JFrame();
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panelKol=new KoloPanel();
tablicaKol=new KoloPanel[12];
listaGraczy=new ArrayList<Gracz>();
rzuc=new JButton("Rzuc");
rzuc.addActionListener(new RzucListener());
panelKol.obliczWspolrzedne();
int zwyciestwo,porazka;
do
{
zwyciestwo=(int)(Math.random()*12);
porazka=(int)(Math.random()*12);
}
while(zwyciestwo==porazka);
panelKol.setKolor(10,255,10,zwyciestwo);
panelKol.setKolor(255,10,10,porazka);
panelKol.add(rzuc);
KoloPanel przykladoweKolo=new KoloPanel();
Gracz gracz=new Gracz(255,255,255);
Gracz komputer=new Gracz(0,0,0);
komputer.setPoczatkowyX(przykladoweKolo.r-komputer.getR());
listaGraczy.add(gracz);
listaGraczy.add(komputer);
ramka.getContentPane().add(BorderLayout.CENTER,panelKol);
ramka.setSize(1000,750);
ramka.setVisible(true);
}
class RzucListener implements ActionListener
{
public void actionPerformed(ActionEvent zd)
{
animacje();
}
}
void animacje()
{
for(Gracz obecnyGracz:listaGraczy)
{
int poczatek=obecnyGracz.getPozycja();
int r=(int)(Math.random()*6)+1;
obecnyGracz.setRzut(r);
for(int i=obecnyGracz.getPozycja(); i<=r+poczatek;i++)
{
if(i==12)
{
r-=(i-poczatek);
i=0;
poczatek=0;
}
obecnyGracz.setPozycja(i);
System.out.println(i);
ramka.repaint();
gra.czyLosuj=false;
try
{
Thread.sleep(1000);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
}
class KoloPanel extends JPanel
{
private int x,y;
private int r=50;
private Color kolor=new Color(10,10,255);
public void paintComponent(Graphics g)
{
int losowa;
for(KoloPanel k : tablicaKol)
{
g.setColor(k.kolor);
g.fillOval(k.x,k.y,r,r);
}
//Wyswietlanie pionkow
for(Gracz gracz:listaGraczy)
{
System.out.println("Repaint");
g.setColor(gracz.getKolor());
g.fillOval(tablicaKol[gracz.getPozycja()].x+gracz.getPoczatkowyX(), tablicaKol[gracz.getPozycja()].y+16, gracz.getR(), gracz.getR());
}
}
public void obliczWspolrzedne()
{
int x=500,y=50,wspolczynik=60,pomoc=0;
for(int ile=0;ile<12;ile++)
{
KoloPanel k=new KoloPanel();
if(ile<6)
{
if(ile%2!=0)
{
x-=(ile*wspolczynik);
y+=50;
k.x=x;
k.y=y;
pomoc++;
tablicaKol[12-pomoc]=k;
}
else
{
x+=(ile*wspolczynik);
k.x=x;
k.y=y;
tablicaKol[ile-pomoc]=k;
}
}
else
{
if(ile%2!=0)
{
x-=((12-ile)*wspolczynik);
y+=50;
k.x=x;
k.y=y;
pomoc++;
tablicaKol[12-pomoc]=k;
}
else
{
x+=((12-ile)*wspolczynik);
k.x=x;
k.y=y;
tablicaKol[ile-pomoc]=k;
}
}
}
}
public void setKolor(int c,int z, int n, int i)
{
KoloPanel k=tablicaKol[i];
k.kolor=new Color(c,z,n);
}
}
class EastPanel extends JPanel
{
}
}
class Gracz
{
private int pozycja;
private int poczatkowyX;
private int r=25;
private Color kolor;
private int rzut;
public Gracz(int c,int z,int n)
{
this.kolor=new Color(c,z,n);
}
public int getR()
{
return r;
}
public int getPozycja()
{
return pozycja;
}
public int getPoczatkowyX()
{
return poczatkowyX;
}
public int getRzut()
{
return rzut;
}
public Color getKolor()
{
return kolor;
}
public void setPoczatkowyX(int p)
{
poczatkowyX=p;
}
public void setPozycja(int p)
{
pozycja=p;
}
public void setRzut(int r)
{
rzut=r;
}
}