老师让我们画一幅鱼在水中游动的图,完成了之后我又添加了一点天空啊山峰啊太阳啊小船啊,感觉挺有意思的。本来还想画云和鸟的,时间关系就没画了。
代码其实也就是画些圆和矩形不断的在那儿鼓捣,也就没添加注释了。
下面是截图:
下面是代码:
首先是框架的代码:
package day05;
import javax.swing.JFrame;
public class FishFrame {
public static void main(String[] args) {
JFrame frame=new JFrame();
frame.setSize(1000,800);
frame.setTitle("海底世界");
frame.setLocation(0,0);
FishPanel panel =new FishPanel();
frame.add(panel);
panel.startRun();
frame.setVisible(true);
}
}
接着是面板的代码:
package day05;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JPanel;
public class FishPanel extends JPanel{
//鱼的坐标
int []x_fish={0,100,230,260,290,370,600,700,750,870};
int []y_fish={0,10,50,120,0,-50,-30,20,-40,-60};
//波浪的坐标
int []x_wave=new int[50];
int []y_wave=new int[50];
//气泡的坐标
int []x_air=new int[40];
int []y_air=new int[40];
int a=200;
Random ran=new Random();
public FishPanel(){
for(int i=0;i<50;i++){
x_wave[i]=ran.nextInt(1000);
y_wave[i]=ran.nextInt(800);
}
for(int i=0;i<20;i++){
x_air[i]=ran.nextInt(1000);
y_air[i]=ran.nextInt(800);
}
}
public void paint(Graphics g){
super.paint(g);
this.setBackground(new Color(22,240,240));
paintFish(g);//画鱼
paintGrass(g);//画草
paintWave(g);//画波浪
paintAir(g);//画气泡
g.setColor(Color.white);
g.fillRect(0, 0, 1000, 300);
//画山峰
g.setColor(new Color(99,85,66));
g.fillArc(800, 100, 400, 400, 90, 90);
g.setColor(Color.yellow);
g.fillArc(20, 20, 100, 100, 0, 360);
paintShip(g);//画船
}
public void startRun(){
new Thread(){
public void run(){
while(true){
for(int i=0;i<10;i++){
x_fish[i]++;
if(x_fish[i]>1000){x_fish[i]=-100;}
}
for(int i=0;i<40;i++){
x_air[i]++;
y_air[i]-=1;
if(x_air[i]>1000){x_air[i]=-100;}
if(y_air[i]<-100){y_air[i]=800;}
}
for(int i=0;i<50;i++){
x_wave[i]--;
if(x_wave[i]<0){x_wave[i]=1000;}
}
a+=2;
if(a>1100){a=-100;}
try {
sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();
}
}
}.start();
}
public void paintFish(Graphics g){
for(int i=0;i<10;i++){
g.setColor(Color.yellow);
g.fillArc(x_fish[i]-25,y_fish[i]+ 500, 100, 50, -90, 180 );
g.setColor(new Color(22,240,240));
g.fillArc(x_fish[i]-10, y_fish[i]+500, 50, 50, 0, 360);
g.setColor(Color.yellow);
g.fillArc(x_fish[i]+15, y_fish[i]+500, 100, 50, 155, 45);
g.setColor(Color.black);
g.fillArc(x_fish[i]+50, y_fish[i]+515, 10, 10, 0, 360);
g.setColor(Color.white);
g.fillArc(x_fish[i]+53, y_fish[i]+516, 5, 5, 0, 360);
}
}
public void paintGrass(Graphics g){
g.setColor(new Color(35,204,52));
g.fillArc(0, 600, 200, 200, 0, 360);
g.fillArc(100, 700, 200, 200, 0, 360);
g.fillArc(190, 580, 200, 300, 0, 360);
g.setColor(new Color(22,240,240));
g.fillArc(-20, 600, 200, 200, 0, 360);
g.fillArc(210, 600, 200, 200, 0, 360);
}
public void paintWave(Graphics g){
g.setColor(Color.white);
for(int i=0;i<50;i++){
g.drawString("~~~~~~~~~~~~~~~~", x_wave[i], y_wave[i]);
}
}
public void paintAir(Graphics g){
g.setColor(Color.white);
for(int i=0;i<40;i++){
g.drawArc(x_air[i], y_air[i], 40, 40, 0, 360);
g.fillArc(x_air[i]+10, y_air[i]+10, 5, 5, 0, 360);
g.drawArc(x_air[i]-20, y_air[i]+50, 30, 30, 0, 360);
g.fillArc(x_air[i]-10, y_air[i]+60, 5, 5, 0, 360);
g.drawArc(x_air[i]-20, y_air[i]+100, 10, 10, 0, 360);
g.fillArc(x_air[i]+10, y_air[i]+10, 5, 5, 0, 360);
}
}
public void paintShip(Graphics g){
g.setColor(Color.red);
g.fillRect(a, 200, 10, 50);
g.fillRect(a, 250, 100, 50);
g.fillArc(a-50, 200, 100,100, 180, 90);
g.fillArc(a+50, 200, 100,100, -90, 90);
}
}