Skip to content

MinorityMeaning/Stars-sky

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Stars-sky

I want develop one interesting thing. I given her name - stars sky, but it's not like the stars sky.
And I just started to learn java.


My project very very small.
The circles move in a line in random order. They are connected by lines if they are close enough to each other. I want the mouse cursor is also connected with the circles when you hover the mouse over the application window.

Class Stars

public class Stars {

    public static void main(String[] args) {
        new Stars().start();
    }

    void start() {

        Runnable background = new SkyThread();
        Thread skyThread = new Thread(background);
        skyThread.start();

        System.out.println("Конец");
    }
}

Class SkyThread

import javax.swing.*;

public class SkyThread implements Runnable {
    JFrame frame;
    @Override
    public void run() {
        frame = new JFrame();
        Sky sky = new Sky(80);
        frame.getContentPane().add(sky);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(700, 400);
        frame.setVisible(true);

        while (true) {  //Любое число итераций для проверки
            frame.repaint();
            sky.setStep();
            try {
                Thread.sleep(80);
            } catch (Exception a) {a.printStackTrace();}
        }
    }
}

Class Sky

import javax.swing.*;
import java.awt.*;

public class Sky extends JPanel {
    int[] x0; // Точки начала координат, и координаты прямой.
    int[] y0;
    int[] x, X;
    int[] y, Y;
    int[] k;     // Коэффициент функции прямой
    int[] randStep; // Флаг для Х
    private int quan;
    int[] diameter;

    public Sky(){
        this(2);  // Объект по-умолчанию
    }

    public Sky(int quantity){    //Не защищён от отр. значений
        quan = quantity;
        x0 = new int[quan];
        y0 = new int[quan];
        x = new int[quan];
        y = new int[quan];
        X = new int[quan];
        Y = new int[quan];
        k = new int[quan];
        randStep = new int[quan];
        diameter = new int[quan];

        for (int i=0; i<quan; i++) {
            x0[i] = (int) ((Math.random() * 650) + 30);
            y0[i] = (int) ((Math.random() * 350) + 30);  // Генерируем точку начала координат
            k[i] = (int) ((Math.random() * 10) - 5);    // C коэффициентом надо разобраться. Добиться попадания в [-10..10]
            //System.out.println(x0 + " " + k);
            randStep[i] = (int) (Math.random() * 2);
            diameter[i] = (int) (Math.random() * 10);
        }
    }

    public void paintComponent(Graphics a) {

        a.setColor(Color.orange);
        Graphics2D a2 = (Graphics2D) a;

        //Получаем X и Y - для удобства
        for (int i=0; i<quan; i++) {
            X[i] = x[i] + x0[i];
            Y[i] = y[i] + y0[i];
        }
        //Рисуем
        for (int i=0; i<quan; i++) {
            a.fillOval(X[i], Y[i], diameter[i], diameter[i]);  //Круг
            for (int j=0; j<quan; j++){
                double distance = Math.sqrt((X[j]-X[i])*(X[j]-X[i]) + (Y[j]-Y[i])*(Y[j] - Y[i])); // Расстояние отрезка
                if(distance < 100) {
                    if(distance > 90) a2.setStroke(new BasicStroke(1.0f));  // толщина равна 1,5
                    else if(distance > 70) a2.setStroke(new BasicStroke(1.1f));
                    else if(distance > 50) a2.setStroke(new BasicStroke(1.4f));
                    else if(distance > 30) a2.setStroke(new BasicStroke(1.6f));
                    else if(distance > 10) a2.setStroke(new BasicStroke(1.8f));
                    else if(distance >=0 ) a2.setStroke(new BasicStroke(2.0f));

                    a2.drawLine(X[i], Y[i], X[j], Y[j]);  //Линия
                }
            }
        }
    }

    //Движение звёздочки
    public void setStep() {
        for (int i=0; i<quan; i++){

               if (randStep[i] == 1) {
                   if ((Y[i] > 430) && (X[i] < 730)) {x0[i] = X[i]; x[i] = 0; y0[i] = 0; y[i] = 0;} //Сброс коорд. и смещение оси
                    else if ((Y[i] < 430) && (X[i] > 730)) {x0[i] = 0; x[i] = 0; y0[i] = Y[i]; y[i] = 0;}
                   // else if ((Y[i] > 430) && (X[i] > 730)) {x0[i] = 0; x[i] = 0; y0[i] = 0; y[i] = 0;}
                   x[i]++;
               } else {
                   if ((Y[i] < -30) && (X[i] < 730)) {x0[i] = X[i]; x[i] = 0; y0[i] = 430; y[i] = 0;}
                   else if ((Y[i] < 430) && (X[i] < -30)) {x0[i] = 730; x[i] = 0; y[0] = Y[i]; y[i] = 0;}
                   else if ((Y[i] > 430) && (X[i] > -30)) {x0[i] = X[i]; x[i] = 0; y0[i] = 0; y[i] = 0;}
                   x[i]--;
               }

            y[i] = k[i] * x[i];
            System.out.println(X[i] + " " + Y[i]);
        }
    } // Конец setStep
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages