Java动态录入弹球
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test{
public static void main(String args[]){
JFrame f = new JFrame("弹球");
f.setSize(800, 600);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyPanel mp = new MyPanel();
f.add(mp);
Thread t =new Thread(mp);
t.start();
f.addKeyListener(mp);
mp.addKeyListener(mp);
f.setVisible(true);
}
}
class MyPanel extends JPanel implements Runnable , KeyListener{
List<Ball> list = new ArrayList<Ball>();
public void paint(Graphics g){
for(int i = 0 ; i < list.size() ; i ++){
g.setColor(list.get(i).c);
g.fillOval(list.get(i).x, list.get(i).y, list.get(i).d, list.get(i).d);
}
this.setOpaque(false);
}
public void run(){
while(true){
for(int i = 0 ; i < list.size(); i ++){
list.get(i).move();
}
try {
Thread.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();
}
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode() == e.VK_SPACE){
Ball b = new Ball();
list.add(b);
}
if(e.getKeyCode() == e.VK_ENTER){
if(list.size() > 0){
list.remove(0);
}
}
repaint();
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
class Ball{
int x;
int y;
int xstep;
int ystep;
int d;
Color c;
public Ball(){
x = (int)(Math.random()*700);
y = (int)(Math.random()*500);
d = (int)(Math.random()*20+20);
while(xstep == 0){
xstep = (int)(Math.random()*7-3);
}
while(ystep == 0){
ystep = (int)(Math.random()*7-3);
}
c = new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256));
}
public void move(){
x += xstep;
y += ystep;
if(x>800-d-5 || x < 0){
xstep *= -1;
}
if(y > 600-d-25 || y < 0){
ystep *= -1;
}
}
}
运行结果: