Generator figur w losowych współrzędnych

Generator figur w losowych współrzędnych
S0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Hej chcę zrobić aplikację, która po uruchomieniu za każdym razem będzie wyświetlać mi określone figury geometryczne w losowym położeniu JFrame'a. Domyślam się, że kluczowy jest tu Random, jednak nie umiem go właściwie użyć. Mój kod:

Kopiuj
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;
import java.awt.*;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;

class Oval extends JPanel {

        Random random1 = new Random(100);

        int x1 = random1.nextInt();
        int x2 = random1.nextInt();
        int x3 = random1.nextInt();
        int x4 = random1.nextInt();

        protected void paintComponent(Graphics g) 
        {
            super.paintComponent(g);      

            //rectangle
            g.setColor(Color.red);
            g.fillRect(x1, x2, x3, x4);  
        }
 }

W efekcie cały JFrame "zamalowany jest moim prostokątem. Obstawiam, że Random wybiera liczby ustawiające prostokąt na większy niż mój JFrame. Jednak nawet gdy ustawię parametry szerokości i wysokości prostokąta na "sztywno", kod dalej nie działą jak powinien - prostokąta wtedy w ogóle nie widać. Jak uporać się z tym Randomem?

szweszwe
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1694
0

Ustaw sobie jakiegoś odpowiednio dużego JFrame'a i możesz zrobić tak, że losujesz pierwszy int z takiego przedziału żeby leżał w JFrame i będzie on dla Ciebie lewym dolnym rogiem. Następnie losujesz sobie wysokość tak aby prostokąt zawierał się JFrame oraz długość i na tej podstawie określasz pozostałe punkty.
W Internecie znajdziesz sporo przykładów jak wylosować inta z konkretnego przedziału. Filozofii nie ma - podajesz argument x i losujesz liczby z przedziału [0, x-1], więc do tego wystarczy dodać odpowiednią wartość aby przesunąć przedział.

S0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Dzięki. Jeszcze jedno pytanie: W ten sposób mam losowaną liczbę, ale za każdym uruchomieniem aplikacji jest ona taka sama. Czy tego Randoma trzeba jakoś "resetować"? Czy może jakoś go zapętlić?

szweszwe
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1694
0

Może spróbuj tak:

Kopiuj
Random rand = new Random();
bogdans
  • Rejestracja: dni
  • Ostatnio: dni
2

Warto dodać, że (w odróżnieniu np. od C++) konstruktor

Kopiuj
Random()

"ustawia ziarno" generatora liczb pseudolosowych na raczej niepowtarzalna liczbę.
W pewnym uproszczeniu:

  • pierwsze wywołanie Random() ustawia ziarno na 8682522807148012 XOR System.nanoTime(),
  • kolejne ustawia ziarno na (poprzednie*181783497276652981) XOR System.nanoTime().

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.