Czy moge jeszcze w tym temacie zadać pytanie? :) Kod ten implementuje kratke długości 8x8 za pomocą drawLines w Swingu. Chciałam dodać dodatkowe wyzwanie - więc dałam współrzedne randomowe. Problem jest w linijce squareSide, która definiuje długość boków całego kwadratu. Działa przy statycznej długości 240 (czyli x1+240=x2 w przypadku poziomych kresek i y1+240=y2 w przypadku pionowych). Potem w petlii robie x1 i x2+= 30 a w drugiej y1 i y1 += 30, ponieważ 240/8 = 30, równe kratki, wszystko sie zgadza wiadomo o co chodzi.Jednak wszystko sie rozkrzacza, gdy próbuje ustawić bok kwadratu jako randomowy int. Myslalam, że to może przez konwersje, więc rzutuje tam do double i flooruje/rounduje - nic jednak nie pomaga na podzielenie randomowego boku na 8 rownych kratek, nie wiem w sumie dlaczego. Oto kod
import javax.swing.*;
import java.awt.*;
import java.util.Random;
public class GridWithLines8x8 extends JPanel {
void drawLines(Graphics g, int x1, int y1, int x2, int y2) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawLine(x1, y1, x2, y2);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Random random = new Random();
int x1 = random.nextInt(600);
int y1=random.nextInt(600);
int x2 = x1;
int squareSide = random.nextInt(240);
int y2 = y1 + squareSide;
for (int i = 0; i < 8; i++) {
drawLines(g, x1, y1, x2, y2);
x1 += Math.round((double)squareSide/8);
x2 += Math.round((double)squareSide/8);
}
for (int j = 0; j < 9; j++) {
drawLines(g, x1 - squareSide, y1, x1 - (int)Math.round((double)squareSide/8), y1);
y1 += Math.round((double)squareSide/8);
y2 += Math.round((double)squareSide/8);
}
}
}
Oraz metoda main:
import javax.swing.*;
public class GridWithLines8x8Main {
public static void main(String[] args) {
JFrame frame = new JFrame("Grid 8x8 with lines");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(2000,1000);
GridWithLines8x8 grid = new GridWithLines8x8();
frame.add(grid);
frame.setVisible(true);
}
}
EDIT: teraz dziala, choc zdarzaja sie bledy, np wychodzi kwadrat wychodzi poza ramke, albo lekko rozkrzacza sie przy malych rozmiarach :)