81 lines
2.0 KiB
Java
81 lines
2.0 KiB
Java
/*
|
|
* File: USFlag.java
|
|
* ---------------------
|
|
* This program demonstrates the acm.graphics package by drawing a US flag.
|
|
*/
|
|
|
|
import acm.graphics.*;
|
|
import acm.program.*;
|
|
import java.awt.*;
|
|
|
|
/* Class: USFlag */
|
|
/**
|
|
* GraphicsProgram to draw a US flag. It uses a subsidiary
|
|
* GStar class to simplify the drawing.
|
|
*/
|
|
public class USFlag extends GraphicsProgram {
|
|
|
|
/** Runs the program */
|
|
public void run() {
|
|
getGCanvas().setAutoRepaintFlag(false);
|
|
addStripes(getWidth(), getHeight());
|
|
addField(FIELD_FRACTION * getWidth(), getHeight() * 7.0 / 13);
|
|
repaint();
|
|
}
|
|
|
|
/* Adds the stripes */
|
|
private void addStripes(double width, double height) {
|
|
double sHeight = height / 13;
|
|
for (int i = 12; i >= 0; i--) {
|
|
GRect stripe = new GRect(0, i * sHeight, width, sHeight);
|
|
stripe.setFilled(true);
|
|
stripe.setColor((i % 2 == 0) ? Color.RED : Color.WHITE);
|
|
add(stripe);
|
|
}
|
|
}
|
|
|
|
/* Adds the star field */
|
|
private void addField(double width, double height) {
|
|
GRect field = new GRect(0, 0, width, height);
|
|
field.setColor(Color.BLUE);
|
|
field.setFilled(true);
|
|
add(field);
|
|
double dx = width / 6;
|
|
double dy = height / 5;
|
|
double starSize = STAR_FRACTION * Math.min(dx, dy);
|
|
for (int row = 0; row < 5; row++) {
|
|
double y = (row + 0.5) * dy;
|
|
for (int col = 0; col < 6; col++) {
|
|
double x = (col + 0.5) * dx;
|
|
GStar star = new GStar(starSize);
|
|
star.setColor(Color.WHITE);
|
|
star.setFilled(true);
|
|
star.setLocation(x, y);
|
|
add(star);
|
|
}
|
|
}
|
|
for (int row = 0; row < 4; row++) {
|
|
double y = (row + 1) * dy;
|
|
for (int col = 0; col < 5; col++) {
|
|
double x = (col + 1) * dx;
|
|
GStar star = new GStar(starSize);
|
|
star.setColor(Color.WHITE);
|
|
star.setFilled(true);
|
|
star.setLocation(x, y);
|
|
add(star);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Private constants */
|
|
|
|
private static final double FIELD_FRACTION = 0.40;
|
|
private static final double STAR_FRACTION = 0.40;
|
|
|
|
/* Standard Java entry point */
|
|
/* This method can be eliminated in most Java environments */
|
|
public static void main(String[] args) {
|
|
new USFlag().start(args);
|
|
}
|
|
}
|