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