import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Font;

public class JavaTwee extends Applet
{
    public void paint(Graphics pen)
    {
        int breedte, hoogte;
        int randAfstand = 5;

        // kleine auto's
        breedte = 144;
        hoogte  = 120;
        pen.setColor(Color.red);
        this.tekenAuto(pen, randAfstand, randAfstand, breedte, hoogte);
        this.tekenAuto(pen, 500 - breedte - randAfstand, randAfstand, breedte, hoogte);
        pen.setColor(Color.blue);
        this.tekenAuto(pen, randAfstand, 500 - hoogte - randAfstand, breedte, hoogte);
        this.tekenAuto(pen, 500 - 144 - randAfstand, 500 - hoogte - randAfstand, breedte, hoogte);

        // grote auto
        breedte = 348;
        hoogte  = 290;
        pen.setColor(Color.white);
        this.tekenAuto(pen, 500 / 2 - breedte / 2, 500 / 2 - hoogte / 2, breedte, hoogte);
    }

    private void tekenAuto(Graphics pen, int x, int y, int breedte, int hoogte)
    {
        /* multiBreedte en multiHoogte zijn de kleinste hoogte en breedte die
         * gebruikt gaan worden en als basis gaan dienen voor alle andere hoogtes
         * en breedten (de "multipliers").
         * De originele en aanbevolen verhouding (anders zijn de wielen niet meer
         * rond maar ovaal en past de tekst niet) is:
         * breedte : hoogte
         *       6 : 5
         */
        int multiBreedte = breedte / 12;
        int multiHoogte  = hoogte  / 10;

        // teken het bovenstuk
        pen.drawLine(x + multiBreedte * 5, y, x + multiBreedte * 3,  y + multiHoogte * 4);
        pen.drawLine(x + multiBreedte * 9, y, x + multiBreedte * 11, y + multiHoogte * 4);
        pen.drawRect(x + multiBreedte * 5, y, multiBreedte * 4, multiHoogte * 4);
        pen.fillRect(x, y + multiHoogte * 4, multiBreedte * 12, multiHoogte * 4);

        // bewaar de oude kleur om die later te kunnen herstellen
        Color oudeKleur = pen.getColor();

        // de auto krijgt het opschrift "JavaTwee"
        if (oudeKleur.equals(Color.white))
            pen.setColor(Color.black);
        else
            pen.setColor(Color.white);
        pen.setFont(new Font("SansSerif", 0, multiHoogte));
        pen.drawString("JavaTwee", x + multiBreedte * 4, y + multiHoogte * 6);

        pen.setColor(oudeKleur);

        // teken de wielen
        this.tekenWiel(pen, x + multiBreedte,     y + multiHoogte * 6, multiBreedte * 4, multiHoogte * 4);
        this.tekenWiel(pen, x + multiBreedte * 7, y + multiHoogte * 6, multiBreedte * 4, multiHoogte * 4);
    }

    private void tekenWiel(Graphics pen, int x, int y, int breedte, int hoogte)
    {
        // bewaar de oude kleur om die later te kunnen herstellen
        Color oudeKleur = pen.getColor();

        // buitenste cirkel
        pen.setColor(Color.black);
        pen.fillOval(x, y, breedte, hoogte);

        // binnenste cirkel
        pen.setColor(Color.white);
        pen.fillOval(x + breedte / 4, y + hoogte / 4, breedte / 2, hoogte / 2);

        pen.setColor(oudeKleur);
    }
}