微信小程序> Java小程序祝国庆快乐

Java小程序祝国庆快乐

浏览量:4090 时间: 来源:wblearn

祝大家国庆节快乐

小程序

上面是用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);            }        }    }}

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎