Konrad-Adenauer-Gymnasium Langenfeld

Informatik Grundkurs Einführungsphase

strassenCanvas.java

import java.awt.*;
public class strassenCanvas extends Canvas
{
private int iBreite;
private int iHöhe;
private Image imBild;
private Graphics grGrafik;

//Konstruktor
public strassenCanvas(int iBreite, int iHöhe)
{
this.iBreite=iBreite;
this.iHöhe=iHöhe;
this.setSize(iBreite,iHöhe);
}

public void init()
{
imBild=createImage(iBreite,iHöhe);
grGrafik=imBild.getGraphics();
}

public void paint(Graphics g)
{
g.drawImage(imBild,0,0,this);
}

public void update(Graphics g)
{
paint(g);
}

private void StrasseZeichnen(int xPos, int yPos)
{
int iAbstand = 60;
grGrafik.drawLine(xPos,yPos,xPos+iBreite,yPos);
grGrafik.drawLine(xPos,yPos+iAbstand,xPos+iBreite,yPos+iAbstand);
}

private void KircheZeichnen(int xPos, int yPos)
{
int iTurmbreite;
int iTurmhöhe;
int iTurmDachhöhe;
int iTurmMitte;
int iSchiffbreite;
int iSchiffhöhe;
int iSchiffdachhöhe;
int iSchiffdachlänge;
int iTürbreite;
int iTürhöhe;

iTurmbreite = 50;
iTurmhöhe = 7*(int)(iTurmbreite/3);
iTurmDachhöhe = 2*(int)(iTurmbreite/5);
iTurmMitte = (int)(iTurmbreite/2);
iSchiffbreite = 5*(int)(iTurmbreite/2);
iSchiffhöhe = (int)(iTurmhöhe/2);
iSchiffdachhöhe = (int)(iSchiffhöhe/3);
iSchiffdachlänge = 4*(int)(iSchiffbreite/5);
iTürbreite = 4*(int)(iTurmbreite/25);
iTürhöhe = 4*iTürbreite;

// Turm zeichnen
grGrafik.drawRect(xPos,yPos,iTurmbreite,iTurmhöhe);
// Turmdach zeichnen
grGrafik.drawLine(xPos,yPos,xPos+iTurmMitte,yPos-iTurmDachhöhe);
grGrafik.drawLine(xPos+iTurmMitte,yPos-iTurmDachhöhe,xPos+iTurmbreite,yPos);
// Turmtür zeichnen
grGrafik.drawRect(xPos+iTurmMitte-iTürbreite,yPos+iTurmhöhe-iTürhöhe,iTürbreite,iTürhöhe);
grGrafik.drawRect(xPos+iTurmMitte,yPos+iTurmhöhe-iTürhöhe,iTürbreite,iTürhöhe);
grGrafik.drawArc(xPos+iTurmMitte-iTürbreite,yPos+iTurmhöhe-iTürhöhe-iTürbreite,2*iTürbreite,2*iTürbreite,180,-180);
//Turmuhr zeichnen
grGrafik.drawOval(xPos+iTurmMitte-iTürbreite,yPos+2*iTürbreite,2*iTürbreite,2*iTürbreite);
grGrafik.drawLine(xPos+iTurmMitte,yPos+3*iTürbreite,xPos+iTurmMitte,yPos+2*iTürbreite+2);
grGrafik.drawLine(xPos+iTurmMitte,yPos+3*iTürbreite,xPos+iTurmMitte+iTürbreite-2,yPos+3*iTürbreite);
//Schiff zeichnen
grGrafik.drawRect(xPos+iTurmbreite,yPos+iTurmhöhe-iSchiffhöhe,iSchiffbreite,iSchiffhöhe);
//Schiffdach zeichnen
grGrafik.drawLine(xPos+iTurmbreite,yPos+iTurmhöhe-iSchiffhöhe-iSchiffdachhöhe,xPos+iTurmbreite+iSchiffdachlänge,yPos+iTurmhöhe-iSchiffhöhe-iSchiffdachhöhe);
grGrafik.drawLine(xPos+iTurmbreite+iSchiffdachlänge,yPos+iTurmhöhe-iSchiffhöhe-iSchiffdachhöhe,xPos+iTurmbreite+iSchiffbreite,yPos+iTurmhöhe-iSchiffhöhe);
//Schifffenster zeichnen
for (int j=1;j<=7;j++)
grGrafik.drawRect(xPos+iTurmbreite+j*2*iTürbreite,yPos+iTurmhöhe-2*iTürbreite-iTürhöhe,iTürbreite,iTürhöhe);
}

private void HausZeichnen(int xPos, int yPos)
{
int iHausbreite;
int iHaushöhe;
int iDachhöhe;
int iHalbesHaus;
int iFensterbreite;
int iFensterhöhe;
int iTürhöhe;

iHausbreite=80;
iHaushöhe=iHausbreite;
iDachhöhe=(int)(iHausbreite/4);
iHalbesHaus=(int)(iHausbreite/2);
iFensterbreite =(int)(iHausbreite/10);
iFensterhöhe=9*(int)(iFensterbreite/5);
iTürhöhe=3*iFensterhöhe;

//Haus
grGrafik.drawRect(xPos,yPos,iHausbreite,iHaushöhe);
//Fenster
grGrafik.drawRect(xPos+2*iFensterbreite,yPos+2*iFensterbreite,iFensterbreite,iFensterhöhe);
grGrafik.drawRect(xPos+iHausbreite-3*iFensterbreite,yPos+2*iFensterbreite,iFensterbreite,iFensterhöhe);
grGrafik.drawRect(xPos+iHausbreite-3*iFensterbreite,yPos+iHaushöhe-3*iFensterhöhe,iFensterbreite,iFensterhöhe);
//Türen
grGrafik.drawRect(xPos+2*iFensterbreite,yPos+iHaushöhe-iTürhöhe,2*iFensterbreite,iTürhöhe);
//Dach
grGrafik.drawLine(xPos,yPos,xPos+iHalbesHaus,yPos-iDachhöhe);
grGrafik.drawLine(xPos+iHalbesHaus,yPos-iDachhöhe,xPos+iHausbreite,yPos);
}

private void ZaunZeichnen(int xPos, int yPos, int iLücke)
{
int iZaunhöhe = 10;
int iZaunbreite = 3;
int iZaunabstand = 5;
int iStart = xPos;

while (iStart < iLücke)
{
grGrafik.drawRect(iStart,yPos-iZaunhöhe,iZaunbreite,iZaunhöhe);
if ((iStart+iZaunbreite+iZaunabstand) < iLücke)
{
grGrafik.drawRect(iStart+iZaunbreite,yPos-iZaunhöhe+2,iZaunabstand,iZaunbreite);
grGrafik.drawRect(iStart+iZaunbreite,yPos-2-iZaunbreite,iZaunabstand,iZaunbreite);
}
iStart=iStart+iZaunbreite+iZaunabstand;
}
iStart = iLücke + 20;
while (iStart < iBreite)
{
grGrafik.drawRect(iStart,yPos-iZaunhöhe,iZaunbreite,iZaunhöhe);
grGrafik.drawRect(iStart+iZaunbreite,yPos-iZaunhöhe+2,iZaunabstand,iZaunbreite);
grGrafik.drawRect(iStart+iZaunbreite,yPos-2-iZaunbreite,iZaunabstand,iZaunbreite);
iStart=iStart+iZaunbreite+iZaunabstand;
}
}

private void MittelstreifenZeichnen(int xPos, int yPos)
{
int ixAbstand = 5;
int iStrichlänge = 12;
int iStrichbreite = 2;
int iyAbstand = 30;
int iStart = xPos + 5;

while (iStart < iBreite)
{
grGrafik.drawRect(iStart,yPos+iyAbstand-iStrichbreite,iStrichlänge,iStrichbreite);
iStart=iStart+ixAbstand+iStrichlänge;
}
}

private void ZebrastreifenZeichnen(int xPos, int yPos)
{
int iyAbstand = 5;
int iStrichlänge = 20;
int iStrichbreite = 5;
int iStart = yPos+8;

while (iStart < (yPos+60))
{
grGrafik.drawRect(xPos,iStart-iStrichbreite,iStrichlänge,iStrichbreite);
iStart=iStart+iyAbstand+iStrichbreite;
}
}

public void Zeichnen()
{
StrasseZeichnen(0,300);
HausZeichnen(60,150);
KircheZeichnen(150,100);
HausZeichnen(350,150);
HausZeichnen(450,150);
ZaunZeichnen(0,280,220);
MittelstreifenZeichnen(0,300);
ZebrastreifenZeichnen(220,300);
repaint();
}

public void Löschen()
{
grGrafik.setColor(Color.white);
grGrafik.fillRect(0,0,iBreite,iHöhe);
grGrafik.setColor(Color.black);
repaint();

}
}

© Ralph-Erich Hildebrandt, 24. September 2006