HusrekkeUtvidet.java [Last ned]

/*
 * Programmet tegner ut en husrekke slik som i læreboken,
 * men det er nå lagt til et lite takutstikk.
 */
import java.awt.*;
import java.applet.*;
import static java.lang.Double.*;
 
public class HusrekkeUtvidet extends EasyGraphics {
 
  public static void main (String[] args) {
    launch (args);
  }
 
  public void run() {
    makeWindow ("Husrekke",800,300);
 
    double f = parseDouble( getText("Høydeforhold:") );
    // f = forhold mellom høyden på husveggen og hele huset
    tegnHusrekke(5, 50, 100, 90, 80, 25, f);
  }
 
  private void tegnHusrekke(int antallHus,
                            int startX, int startY, int bredde,
                            int høyde, int avstand, double andel) {
    for (int husNr=1; husNr<=antallHus; husNr++) {
      tegnHus(startX, startY, bredde, høyde, andel);
      startX = startX + bredde + bredde/3 + avstand;
      // bredde/3 er tillegget pga takutstikket, se nedenfor
    }
  }
 
  private void tegnHus(int x, int y,
                       int bredde, int høyde, double andelHøyde) {
    int veggHøyde = (int)(høyde*andelHøyde);
    int takHøyde = høyde - veggHøyde;
    int toppVegg  = y - veggHøyde;
    drawRectangle(x, toppVegg, bredde, veggHøyde);
    // Takutstikket er valgt til 1/6 av bredden på huset.
    // Ett på hver side gjør til sammen grunnlinja i taket
    // 1/3 lengre enn bredden på huset.
    int ut = bredde/6;
    tegnTrekant(x-ut, toppVegg, bredde + 2*ut, takHøyde);
  }
 
  private void tegnTrekant(int x, int y, int bredde, int høyde) {
    drawLine(x, y, x+bredde, y);
    drawLine(x+bredde, y, x+bredde/2, y-høyde);
    drawLine(x+bredde/2, y-høyde, x, y);
  }
 
}
Kildekode blir vist ved hjelp av GeSHi.