làm hiệu ứng tuyết rơi bằng java

thao

New Member
28/11/14
4
0
0
26
Chào mọi người!!! có bạn nào ở đây biết làm hiệu ứng tuyết rơi bằng java không? hướng dẫn cho t với. t sắp phải nộp rồi mà tìm hiểu mãi chẳng thấy có hiệu quả gì cả, hiện tại t đã làm dk 1 châm rơi từ trên xuống và h muốn nó có nhiều hơn và rơi ở các điểm ngẫu nhiên và có mầu sắc ngẫu nhiên thì làm thế nào nhỉ???.cảm ơn mọi người!!!
 

Joe

Thành viên VIP
21/1/13
2,962
1,307
113
Just because of you as a newbie
PHP:
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class ItSnows extends JFrame {
        public ItSnows( ) {
                setTitle("It's snowing...");
                Snowing snow = new Snowing();
                snow.setBounds(5, 5,400, 400);
                add("Center", snow);
                setBounds(300, 50, 400, 400);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setVisible(true);
                snow.go();
        }
      
        public class Snowing extends JPanel {
                private double angle;
                public Snowing( ) { }

                public void go() {
                        (new Falling()).start();
                }
                private class Falling extends Thread {
                        public Falling() { }
                        public void run() {
                                try {
                                        Random ran = new Random();
                                        while (true) {
                                                ax.add(Math.abs(ran.nextInt(400)));
                                                ay.add(Math.abs(ran.nextInt(400)));
                                                repaint();
                                                Thread.sleep(50);
                                        }
                                } catch (Exception e) { }
                        }
                }
                private ArrayList<Integer> ax = new ArrayList<Integer>(100);
                private ArrayList<Integer> ay = new ArrayList<Integer>(100);
                protected void paintComponent(Graphics g) {
                        super.paintComponent(g);
                        g.setColor(Color.black);
                        g.fillRect(0, 0, 400, 400);
                        g.setColor(Color.white);
                        for (int i = 0, mx = ax.size(); i < mx; ++i)
                            g.fillOval(ax.get(i), ay.get(i), 5, 5);
                }
        }
        public static void main(String... a) {
                new ItSnows();
        }
}
 
Sửa lần cuối:

thao

New Member
28/11/14
4
0
0
26
Cảm ơn bạn Joe nhiều ạ nhưng nó không đúng đề tài mà. nó rơi từ trên xuống chứ không phải xuất hiện chấm trên màn hình như thế ạ.
 

Joe

Thành viên VIP
21/1/13
2,962
1,307
113
Oh...That's much easier...
PHP:
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class ItSnows extends JFrame {
        public ItSnows( ) {
                setTitle("It's snowing...");
                Snowing snow = new Snowing();
                snow.setBounds(5, 5,400, 400);
                add("Center", snow);
                setBounds(300, 50, 400, 400);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setVisible(true);
                snow.go();
        }
       
        public class Snowing extends JPanel {
                private double angle;
                public Snowing( ) { }

                public void go() {
                        (new Falling()).start();
                }
                private class Falling extends Thread {
                        public Falling() { }
                        public void run() {
                                try {
                                        Random ran = new Random();
                                        while (true) {
                                                x = ran.nextInt(400);
                                                for (y = ran.nextInt(400); y < 400; y += 5) {
                                                        repaint();
                                                        Thread.sleep(20);
                                                }
                                        }
                                } catch (Exception e) { }
                        }
                }
                private int x, y;
                protected void paintComponent(Graphics g) {
                        super.paintComponent(g);
                        g.setColor(Color.black);
                        g.fillRect(0, 0, 400, 400);
                        g.setColor(Color.white);
                        g.fillOval(x, y, 5, 5);
                }
        }
        public static void main(String... a) {
                new ItSnows();
        }
}
 

thao

New Member
28/11/14
4
0
0
26
Làm nó rơi nhiều hơn trong cùng 1 lúc thì sao ạ???
 

Joe

Thành viên VIP
21/1/13
2,962
1,307
113
Sorry, my dear. I show you the way to your goal, to get there you have to "walk" yourself. I don't carry anyone on my back or spoonfeed anybody like a "babe".

Anyway, some hints for you:
1) it requires a complex structure to organize a random number of snowflakes to fall slowly down ,
2) Animation is an art of deceiving if you're able to create a scene that produces some optical illusion so that the viewers "see" the snowflakes floating down. With the 1st version and some modification you can achieve the illusion of "It snows and the snowflakes are floating". This version here is a little game with all the trimmings ;)
PHP:
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
public class ItSnows extends JFrame implements ActionListener {
        JComboBox<String> cb, dn;
        JButton go;
        Snowing snow;
        public ItSnows( ) {
                setTitle("It's snowing...");
                snow = new Snowing();
                snow.setBounds(0, 0,410, 410);
                cb = new JComboBox<String>("40!60!80!100!120!140!160!180!200".split("!"));
                dn = new JComboBox<String>("Day!Night".split("!"));
                dn.addActionListener(this);
                cb.addActionListener(this);
                JPanel jp = new JPanel();
                JLabel jl = new JLabel("FallingSpeed mSec.");
                go = new JButton("GO");
                go.addActionListener(this);
                jp.add(go);
                jp.add(jl);
                jp.add(cb);
                jp.add(dn);
                add("Center", snow);
                add("South", jp);
                setBounds(300, 50, 410, 420);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setVisible(true);
        }
        private int speed, day;
        private boolean done = false;
        public void actionPerformed(ActionEvent e) {
                day = dn.getSelectedIndex();
                speed = Integer.parseInt((String)cb.getSelectedItem());
                if (!done) snow.go();
                go.setEnabled(false);
                done = true;

        }
        public class Snowing extends JPanel {
                private double angle;
                public Snowing( ) { }

                public void go() {
                        ax = new ArrayList<Integer>(50);
                        ay = new ArrayList<Integer>(50);
                        (new Falling()).start();
                }
                private class Falling extends Thread {
                        public Falling() { }
                        public void run() {
                                try {
                                    Random ran = new Random();
                                    while (true) {
                                        mx = ran.nextInt(400);
                                        if (mx < 10) mx = 10;
                                        for (int i = 0; i < mx; ++i) {
                                                ax.add(ran.nextInt(400));
                                                ay.add(ran.nextInt(400));
                                        }
                                        repaint();
                                        Thread.sleep(speed);
                                        ax.clear();
                                        ay.clear();
                                   }
                                } catch (Exception e) { }
                        }
                }
                private int mx;
                private ArrayList<Integer> ax, ay;
                protected void paintComponent(Graphics g) {
                        super.paintComponent(g);
                        g.setColor(day == 0? Color.gray:Color.black);
                        g.fillRect(0, 0, 410, 410);
                        g.setColor(Color.white);
                        for (int i = 0; i < mx; ++i)
                                g.fillOval(ax.get(i), ay.get(i), 10, 10);
                }
        }
        public static void main(String... a) {
                try {   UIManager.setLookAndFeel
                        ("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
                } catch (Exception ex) { }
                new ItSnows();
        }
}
 
Sửa lần cuối:

thao

New Member
28/11/14
4
0
0
26
Cảm ơn bạn Joe nhiều nhiều ạ!!! với những gợi ý của bạn mình sẽ cố gắng hoàn thành bài!!!!:x