import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
public class Screen extends JFrame implements Runnable, MouseListener {
BufferedImage Show;
Pnt[] pnt;
int p; //myers-briggs
int i, t, u, sizx, sizy;
public static void main(String[] args) {
Screen bob = new Screen();
bob.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
bob.setTitle("Pretty Colors");
bob.setResizable(false);
bob.setVisible(true);
bob.init();
bob.start();
}
public void init() {
sizx = 1200;
sizy = 800;
Show = new BufferedImage(sizx, sizy, BufferedImage.TYPE_INT_ARGB);
setSize(sizx, sizy);
setLocation(80, 0);
SetItUpYo();
addMouseListener(this);
}
public void start() {
Thread Electricity = new Thread(this);
Electricity.start();
}
public void run() {
//System.out.println("run");
try {
while(true) {
repaint();
Thread.sleep(23);
}
}
catch(Exception e) { }
}
public void paint(Graphics g) {
Drawitbaby();
g.drawImage(Show, 0, 0, this);
}
public void Drawitbaby() {
Graphics g = Show.getGraphics();
g.setColor(Color.black);
g.fillRect(0, 0, sizx, sizy);
for(i = 0; i < p; i++) {
pnt[i].update();
for(t = 99; t > 0; t--) {
g.setColor(pnt[i].getColor(100 - t));
g.fillOval(pnt[i].pastx[t], pnt[i].pasty[t], (int)((100 - t) * .1), (int)((100 - t) * .1));
pnt[i].pastx[t] = pnt[i].pastx[t - 1];
pnt[i].pasty[t] = pnt[i].pasty[t - 1];
}
for(u = 0; u < p; u++){
if(pnt[i].changedir && i!=u && pnt[i].Checkit(pnt[u].px, pnt[u].py, pnt[u].angle))
pnt[i].resetvars(pnt[u].angle);
}
if(pnt[i].changedir)
pnt[i].resetvars(.23);
//g.setColor(Color.white);
//g.drawLine(pnt[i].x, pnt[i].y, pnt[i].px, pnt[i].py);
}
}
public void SetItUpYo() {
p = 64;
pnt = new Pnt[p];
int q = (p / 4);
int d, a, b, f, g;
int red, green, blue;
new java.util.Random();
for(d = 0; d < 4; d++) {
a = (int) (Math.random() * sizx);
b = (int) (Math.random() * sizy);
red = (int) (50 + (Math.random() * 200));
green = (int) (50 + (Math.random() * 200));
blue = (int) (50 + (Math.random() * 200));
for(i = 0; i < q; i++) {
f = (int) (25 - (Math.random() * 50));
g = (int) (25 - (Math.random() * 50));
pnt[(d * q) + i] = new Pnt(360 * ((double)i / (double)q), a - f, b - g, red - f, green - g, blue - g + f);
}
}
}
public void mouseClicked(MouseEvent e) {
SetItUpYo();
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}
import java.awt.Color;
public class Pnt {
int x, y, px, py;
int[] pastx, pasty;
int r, g, b;
int magnitude, shift, cycle, spd;
double angle, a;
double vx, vy, d;
boolean changedir, L;
public Pnt(double ang, int ex, int wy, int rr, int gg, int bb) {
x = px = ex;
y = py = wy;
r = Math.abs(Math.min(rr, 250));
g = Math.abs(Math.min(gg, 250));
b = Math.abs(Math.min(bb, 250));
spd = 6;
if(Math.random()>.5)
L = true;
else
L = false;
changedir = false;
cycle = Math.max(magnitude / 5, 10);
pastx = new int[100];
pasty = new int[100];
for(int a = 0; a < 100; a++){
pastx[a] = x;
pasty[a] = y;
}
resetvars(ang);
}
public void resetvars(double ang){
changedir = false;
magnitude = (int) (50 + (Math.random() * 200));
x = px;
y = py;
shift = 0;
if(ang!=.23)
angle = ang;
else if(x < 0)
angle = 315 + (Math.random() * 90);
else if(y < 0)
angle = 225 + (Math.random() * 90);
else if(x > 1200)
angle = 135 + (Math.random() * 90);
else if(y > 800)
angle = 45 + (Math.random() * 90);
else
angle += (45 - Math.random() * 90);
if(angle > 360)
angle -= 360;
else if(angle < 0)
angle += 360;
if(L)
L = false;
else
L = true;
setVel();
}
public void setVel() {
vx = spd * Math.cos(Math.toRadians(angle)) * .1;
vy = -1 * spd * Math.sin(Math.toRadians(angle)) * .1;
d = Math.sqrt(Math.pow((vx * magnitude), 2) + Math.pow((vy * magnitude), 2)) / 2;
}
public void update() {
if(shift > magnitude / 2)
cycle++;
else if(cycle > 10)
cycle--;
shift += cycle * .1;
if(shift >= magnitude) {
shift = magnitude;
changedir = true;
}
px = x + (int)(vx * shift);
py = y + (int)(vy * shift);
if(L)
a = angle - 90 + (((double)shift / (double)magnitude) * 180);
else
a = angle - 90 - (((double)shift / (double)magnitude) * 180);
pastx[0] = (int)((x + (vx * magnitude) / 2) + d * Math.sin(Math.toRadians(a)));
pasty[0] = (int)((y + (vy * magnitude) / 2) + d * Math.cos(Math.toRadians(a)));
}
public Color getColor(int t) {
return new Color((int) (r * t * .01), (int) (g * t * .01), (int) (b * t * .01));
}
public boolean Checkit(int cx, int cy, double ca){
if(x < 0 || x > 1200 || y < 0 || y > 800)
return false;
if(Math.abs(px - cx) < 150 && Math.abs(py - cy) < 150) {
if(Math.abs(angle - ca) < 90 || Math.abs(angle - ca) > 315)
return true;
}
return false;
}
}