神刀安全网

Java小程序祝国庆快乐

祝大家国庆节快乐

Java小程序祝国庆快乐
祝大家国庆节快乐

上面是用java的JFrame为基础实现的效果,下面用面向对象的思考分析并实现此效果:

1)找对象

最开始鼠标点击冲出来的白色圆点 Bullet
白色圆点爆炸成一片(包含很多小圆点)Piece
主程序类 Guoqing 继承于 JPanel
程序初始化类执行类GuoqingStart 继承于JFrame

2) 类的设计, 定义出 类属性(数据模型)

比如

白色圆点类Bullet
|– int x x坐标
|– int y y坐标

3) 界面绘制(利用Java Swing API 绘制界面)

4) 功能算法设计

原则: 一切功能 都是方法: 动词就是方法

实现策略: 将功能映射到数学模型, 研究数据的变化规律

比如白色圆点类Bullet与*Piece中各个小圆点的移动,其实都是坐标位置的变化

5) 事件绑定(利用Java Swing API 实现事件绑定)
比如鼠标点击监听事件

6)完整代码

import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*;  public class GuoqingStart extends JFrame {     Guoqing gq;     public static void main(String[] args) {         new GuoqingStart();     }     public GuoqingStart() {         gq=new Guoqing();         this.addMouseListener(gq);         this.add(gq);         new Thread(gq).start();         this.setTitle("国庆快乐");         this.setLocation(100, 0);         this.setSize(1000,700);         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         this.setVisible(true);     } }  class Guoqing extends JPanel implements MouseListener,Runnable{     Bullet bullet;     Vector<Bullet> bullets;     static Vector<Piece> pieces;     int times=1;     public Guoqing() {         bullets=new Vector<Bullet>();         pieces=new Vector<Piece>();     }     public void paint(Graphics g) {         super.paint(g);         times++;         g.setColor(Color.black);         g.fillRect(0, 0, 2000, 1000);         g.setColor(Color.lightGray);         for(int i=0;i<this.bullets.size();i++){             Bullet b=this.bullets.get(i);             if(b.isLive){                 b.move();                 g.fillOval(b.x,b.oldY, 15, 15);             }         }          for(int i=0;i<this.pieces.size();i++){             Piece b=this.pieces.get(i);             if(b.isLive){                 if(b.color==0){                     g.setColor(Color.red);                 }else if(b.color==1){                     g.setColor(Color.blue);                 }else if(b.color==2){                     g.setColor(Color.cyan);                 }else if(b.color==3){                     g.setColor(Color.green);                 }else{                     g.setColor(Color.gray);                 }                 if(times%3==0){                     b.move();                 }                 g.fillOval((int)b.x, (int)b.y, (int)b.w, (int)b.h);             }          }     }     public void mousePressed(MouseEvent e) {         bullet=new Bullet(e.getX(),e.getY());         this.bullets.add(bullet);     }     public void mouseClicked(MouseEvent e) {}     public void mouseReleased(MouseEvent e) {}     public void mouseEntered(MouseEvent e) {}     public void mouseExited(MouseEvent e) {}     @Override     public void run() {         while(true){             this.repaint();             try {                 Thread.sleep(20);             } catch (Exception e) {                 e.printStackTrace();             }         }     } } class Piece{     double x,y;     double w=15;     double h=15;     double velocityX, velocityY;     boolean isLive=true;     int color=0;     int times=1;     public Piece(double x,double y,double velocity,double angle,int color) {         this.x=x;         this.y=y;         this.color=color;         velocityX = velocity * Math.cos(angle);         velocityY = velocity * Math.sin(angle);     }     public void move(){         velocityX *= 0.75;         velocityY += 1.0;         velocityY *= 0.75;          y += velocityY;         x += velocityX;          times++;         if(times%7==0){             this.w-=2;             this.h-=2;             if(this.w<=4){                 Guoqing.pieces.remove(this);             }         }     } } class Bullet{     int x;     int y;     int oldY=700;     boolean isLive=true;     Piece piece;     Random r=new Random(System.currentTimeMillis());     public Bullet(int x, int y) {         this.x = x;         this.y = y;     }     public void move(){         oldY-=8;         if(oldY<=y){             this.isLive=false;             int color=r.nextInt(4);             for(int i=0;i<200;i++){                 double angleXy = r.nextDouble() * 2 * Math.PI;                 double angleZ  = r.nextDouble() * 2 * Math.PI;                 double velocity = 72 * Math.cos(angleZ);                 piece=new Piece(x,oldY,velocity, angleXy,color);                 Guoqing.pieces.add(piece);             }         }     }  }

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Java小程序祝国庆快乐

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址