2013-12-19 19:05:28 +01:00

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);
}
}