智荣博客
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.color.*;
import java.util.Vector;
import java.util.Iterator;
class Fish{//鱼类
public void draw(Graphics g) {//画鱼
Color c = g.getColor();
g.setColor(Color.black);
g.drawLine(250,230,110,110);
g.drawLine(250,270,110,390);
g.drawLine(250,230,230,250);
g.drawLine(250,270,230,250);
g.drawLine(110,230,60,200);
g.drawLine(110,270,60,300);
g.drawLine(60,200,60,300);
g.drawLine(110,110,110,390);
g.setColor(Color.black);
g.fillOval(210,220,20,20);
g.setColor(c);
}
}
class Bubble{//泡泡类
int x=250,y=233,x_speed,y_speed;//泡泡的位置以及x,y方向的移动速度
public void draw(Graphics g){//画泡泡
Color c=
g.getColor();
g.setColor(Color.blue);
g.fillOval(x, y, 20, 20);
g.setColor(Color.white);
g.fillOval(x+1, y+1, 16, 16);
g.setColor(c);//把画笔默认颜色还原
x+=8;
}
}
public class FishGame extends Frame implements
ActionListener{//窗体类
Vector bubb = new
Vector();//每吐出的泡泡就添加进Vector集合
Image offScrrenImage = null;//重绘泡泡时消除上一次的轨迹,避免形成连续轨迹
Fish fish = new Fish();
public FishGame(){
this.setLayout(new BorderLayout());
this.setTitle("FishGame");
this.setBackground(Color.white);
this.setSize(600,400);
this.setResizable(false);
this.setVisible(true);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
Button b =
new Button("吐泡泡");
b.addActionListener(this);
this.add(b,BorderLayout.SOUTH);
Thread t =
new Thread(new BubbleThread());
t.start();//启动泡泡移动线程
Thread t2 =
new Thread(new BubbleCountThread());
t2.start();//启动自动吐泡泡线程
}
public void paint(Graphics g){
fish.draw(g);
Iterator it
= bubb.iterator();
while(it.hasNext()){
((Bubble) it.next()).draw(g);
}
}
public void update(Graphics g){//绘制虚拟图片
if(offScrrenImage == null){
offScrrenImage = this.createImage(800,600);//设置虚拟图片和主窗体背景一样宽
}
Graphics goffScreen =
offScrrenImage.getGraphics();//拿到虚拟图片的画笔
Color c = goffScreen.getColor();
goffScreen.setColor(Color.white);
goffScreen.fillRect(0, 0, 800, 600);
paint(goffScreen);
g.drawImage(offScrrenImage, 0, 0, null);
goffScreen.setColor(c);
}
public void actionPerformed(ActionEvent arg0) {
bubb.add(new
Bubble());
}
private class BubbleThread implements Runnable{//控制泡泡移动的线程类
public void run() {
while(true) {
try
{
Thread.sleep(300);
}
catch(InterruptedException e){
e.printStackTrace();
}
repaint();
}
}
}
private class BubbleCountThread implements
Runnable{//控制泡泡自动吐的线程类
public void run() {
while(true) {
try
{
Thread.sleep(1000);//1秒吐一个
}
catch(InterruptedException e){
e.printStackTrace();
}
bubb.add(new Bubble());
}
}
}
public static void main(String args[]){
new FishGame();
}
}