Kiedyś z nudów napisałem taki programik, wiec udostępnie Ci kod.
import java.util.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
public class Motylki extends JFrame{
public Motylki(){
Laka l = new Laka();
getContentPane().add(l);
setSize(500,500);
show();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
new Thread(l).start();
}
public static void main(String[] args){
new Motylki();
}
}
class Laka extends JPanel implements Runnable{
int step = 10;
long delay = 1;
boolean pause = false;
Motylek[] motylki = new Motylek[10];
JLabel predkosc = new JLabel();
public Laka(){
setTxt();
add(predkosc);
addKeyListener(new P());
initMotylki();
}
public boolean isFocusTraversable(){
return true;
}
private void setTxt(){
predkosc.setText("Odświeżanie: " + delay + ", krok: " + step);
}
private void setPause(){
predkosc.setText("Pause");
}
private void initMotylki(){
motylki[0] = new Motylek(Color.red,200,300);
motylki[1] = new Motylek(Color.blue,200,100);
motylki[2] = new Motylek(Color.black,200,50);
motylki[3] = new Motylek(Color.yellow,20,150);
motylki[4] = new Motylek(Color.pink,20,20);
motylki[5] = new Motylek(Color.blue,200,250);
motylki[6] = new Motylek(Color.gray,230,200);
motylki[7] = new Motylek(Color.white,200,200);
motylki[8] = new Motylek(Color.red,200,200);
motylki[9] = new Motylek(Color.orange,200,0);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(Color.green);
Rectangle2D bg = new Rectangle2D.Double(0,0,500,500);
g2.fill(bg);
g2.draw(bg);
for(int i=0;i<motylki.length;i++){
motylki[i].newCords();
g2.setPaint(motylki[i].getColor());
Rectangle2D pros1 =
new Rectangle2D.Double(motylki[i].getX(),motylki[i].getY(),10,10);
g2.fill(pros1);
g2.draw(pros1);
}
}
public void run(){
try{
while(true){
Thread.sleep(delay);
if(pause) continue;
repaint();
}
}catch(Exception e){}
}
private class P implements KeyListener{
public void keyPressed(KeyEvent e){
int code = e.getKeyCode();
if(code == KeyEvent.VK_UP)step += 5;
else if(code == KeyEvent.VK_DOWN)step -= 5;
else if(code == KeyEvent.VK_LEFT)step -= 1;
else if(code == KeyEvent.VK_RIGHT)step += 1;
if(code == KeyEvent.VK_Q) delay += 50;
else if(code == KeyEvent.VK_W) delay -= 50;
else if(code == KeyEvent.VK_A) delay += 5;
else if(code == KeyEvent.VK_S) delay -= 5;
else if(code == KeyEvent.VK_Z) delay += 1;
else if(code == KeyEvent.VK_X) delay -= 1;
if(delay<0) delay =0;
if(delay>10000) delay = 10000;
if(step <1) step =1;
if(step>50) step = 50;
//System.out.println(step + " " + delay);
setTxt();
}
public void keyReleased(KeyEvent e){ }
public void keyTyped(KeyEvent e){
int code = e.getKeyChar();
if(code == 'p'){
if(!pause){
pause = true;
// System.out.println("pause");
setPause();
}
else{
pause = false;
setTxt();
//System.out.println("unpause");
}
}
}
}
private class Motylek{
private Color color;
private double x1;
private double y1;
public Motylek(Color color, double x, double y){
this.color = color;
x1 = x;
y1 = y;
}
public void newCords(){
Random rand = new Random();
switch(rand.nextInt(4)){
case 0:{
if((x1+step) <= 490) x1+=step;
break;
}
case 1:{
if((x1-step) >= 0)x1-=step;
break;
}
case 2:{
if((y1+step) <= 490) y1+=step;
break;
}
case 3:{
if((y1-step) >= 0) y1-=step;
break;
}
}
}
public double getX(){
return x1;
}
public double getY(){
return y1;
}
public Color getColor(){
return color;
}
}
}
Dalej baw sie sam ;)
Pozdrawiam BookaYashee