introductionToProgramming/week7/Squares.java
Daniel Bulant 0f3bfa38b8
week7
2025-10-19 22:24:21 +02:00

56 lines
No EOL
1.7 KiB
Java

package week7;
import common.StdDraw;
class Squares {
public static void main(String[] args) {
StdDraw.enableDoubleBuffering();
StdDraw.setCanvasSize(512 * 4, 512);
StdDraw.setXscale(0, 4);
drawSquares(0.5, 0.5, .25, 4, 1);
drawSquares(1.5, 0.5, .25, 4, 2);
drawSquares(2.5, 0.5, .25, 4, 3);
drawSquares(3.5, 0.5, .25, 4, 4);
StdDraw.show();
}
public static void drawSquares(
double x,
double y,
double halfLength,
int limit,
int mode) {
var shouldRecurse = limit > 0;
limit--;
var newHalfLength = halfLength / 2.2;
if (mode == 3 || (mode > 1 && !shouldRecurse))
drawSingleSquare(x, y, halfLength);
if (shouldRecurse) {
int[][] offsets = { { 1, 1 }, { -1, 1 }, { -1, -1 }, { 1, -1 } };
for (var i = 0; i < 4; i++) {
if (mode == 2 && i == 3)
drawSingleSquare(x, y, halfLength);
if (mode == 4 && i == 2)
drawSingleSquare(x, y, halfLength);
drawSquares(
x + halfLength * offsets[i][0],
y + halfLength * offsets[i][1],
newHalfLength,
limit,
mode);
}
}
if (mode == 1)
drawSingleSquare(x, y, halfLength);
}
private static void drawSingleSquare(double x, double y, double halfLength) {
StdDraw.setPenColor(StdDraw.GRAY);
StdDraw.filledSquare(x, y, halfLength);
StdDraw.setPenColor();
StdDraw.square(x, y, halfLength);
}
}