Hallo,
könnte bei diese Script mal jemand drüber schauen ob das so in ordnung gescriptet ist. Also ob irgendwo noch Buggefahr bzw. ob der Stile gut verständlich etc. ist:
Das Script macht eigendlich nichts besonderes sondern zeichnet eine zufällige Anzahl an Kreisen die sich bewegen und von den Frame Rändern abprallen.
Main.java
Zeichnen.java
Und hier zu runterladen: File-Upload.net - Fliegende-Kreise.zip
Vielen dank schon mal!
lg Murcer
könnte bei diese Script mal jemand drüber schauen ob das so in ordnung gescriptet ist. Also ob irgendwo noch Buggefahr bzw. ob der Stile gut verständlich etc. ist:
Das Script macht eigendlich nichts besonderes sondern zeichnet eine zufällige Anzahl an Kreisen die sich bewegen und von den Frame Rändern abprallen.
Main.java
Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
public class Main {
static Zeichnen panel; //Panel Variable wird Deklariert
public static void main(String[] args){
//Neuer Thread der später auf den EDT gelegt wird
Runnable startGUI = new Runnable() {
@Override
public void run() {
//Erstellung des Frames
JFrame frame = new JFrame("GUI Titel");
frame.setLayout(new BorderLayout());
panel = new Zeichnen();
frame.add(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
};
EventQueue.invokeLater(startGUI); //Thread wird auf den EDT gelegt
//neuer Thread in dem die Bewegung der Kreise angestoßen wird
new Thread(){
public void run(){
while(true){
EventQueue.invokeLater(new Runnable(){
@Override
public void run() {
panel.veränderPosi(); //Positionsveränderung wird angestoßen.
}
});
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
Zeichnen.java
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.util.Random;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Zeichnen extends JPanel {
private Random random = new Random();
private int[] x; //X-Positionen von dem jeweiligem Kreis
private int[] y; //X-Positionen von dem jeweiligem Kreis
private int[] stepX; //Schritt Bewegungen des jeweiligen Kreises entlang der X-Achse
private int[] stepY; //Schritt Bewegungen des jeweiligen Kreises entlang der Y-Achse
private int[] color; //Farbe des jeweiligen Kreises
private Color[] farben = new Color[8]; //eine Array mit 8 verschiedenen Farben
private int anzahlBall; //die Anzahl der Bälle
public Zeichnen(){
setPreferredSize(new Dimension(500,500)); //setzt die Größe des Panels auf 500x500
setBackground(Color.BLACK);
// Schleife die eine zufällige Anzahl von den Bällen zwischen 5 und 10 ermittelt
do{
anzahlBall = random.nextInt(11);
}while(anzahlBall < 5);
//der Array wird die Größe zugewiesen
x = new int[anzahlBall];
y = new int[anzahlBall];
stepX = new int[anzahlBall];
stepY = new int[anzahlBall];
color = new int[anzahlBall];
//Array mit Farben wird initialisiert
farben[0] = Color.GREEN;
farben[1] = Color.RED;
farben[2] = Color.BLUE;
farben[3] = Color.YELLOW;
farben[4] = Color.MAGENTA;
farben[5] = Color.PINK;
farben[6] = Color.CYAN;
farben[7] = Color.ORANGE;
//zufällige Start-Position, Farbe und Bewegungsgeschwindigkeit wird initialisiert
for(int i = 0; i < anzahlBall; i++){
x[i] = random.nextInt(401); //x wird ein wert zwischen 0 und 400 zugewiesen,
y[i] = random.nextInt(401); //weil das Panel 500 breit ist und der Kreis einen durchmesser von 100 hat
color[i] = random.nextInt(8); //Farben 0-7 werden festgelegt; später: farbe[color[i]]
//Bewegungsgeschwindigkeit wird festgelegt; zwischen 1 und 5
do{
stepX[i] = random.nextInt(6);
}while(stepX[i] < 1);
do{
stepY[i] = random.nextInt(6);
}while(stepY[i] < 1);
}
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g); //vorherige zeichnungen werden gelöscht
// AntiAnaliasing
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//Schleife in der ein alle Kreise(gefüllt) gezeichnet werden
for(int i = 0; i < anzahlBall; i++){
g2.setColor(farben[color[i]]);
g2.fillOval(x[i], y[i], 100, 100);
}
}
public void veränderPosi(){
//neue Position der Kreise werden berechnet
for(int i = 0; i < anzahlBall; i++){
x[i] = x[i] + stepX[i];
//Wenn der Kreis eine FensterSeite erreicht hat wird Bewegungsrichtung geändert
if (x[i] > 400){
stepX[i] = stepX[i] * -1;
}
else if(x[i] < 0){
stepX[i] = stepX[i] * -1;
}
y[i] = y[i] + stepY[i];
//Wenn der Kreis eine FensterSeite erreicht hat wird Bewegungsrichtung geändert
if (y[i] > 400){
stepY[i] = stepY[i] * -1;
}
else if(y[i] < 0){
stepY[i] = stepY[i] * -1;
}
}
repaint(); //Kreise werden neu gezeichnet
}
}
Und hier zu runterladen: File-Upload.net - Fliegende-Kreise.zip
Vielen dank schon mal!
lg Murcer
Zuletzt bearbeitet: