/*GK Informatik
Konrad-Adenauer-Gymnasium Langenfeld
12.1
September 1998
*/

import java.applet.*;
import java.awt.*;

public class Strasse extends Applet
{


	BorderLayout blHaupt = new BorderLayout();
	Panel pnNord = new Panel();
	Panel pnWest = new Panel();
	Panel pnSüd = new Panel();
	Panel pnEins = new Panel();
    Panel pnZwei = new Panel();
	StrasseCanvas cvZeichnung = new StrasseCanvas(640-pnWest.size().width,480-pnNord.size().height-pnSüd.size().height);
	Label lbHeader = new Label("Zeichnen eines Straßenzugs");
	Label lbCopyright = new Label("© Ralph-Erich Hildebrandt/September 1998");
	Font ftHFont = new Font("Arial",Font.BOLD,20);
	Font ftCFont = new Font("Arial",Font.PLAIN,10);
    Button btZeichnen = new Button("Zeichnen");
	Button btLöschen = new Button("Löschen");
	GridLayout glLinks = new GridLayout(5,1);

	public void init()
	{
    	resize(640, 400);
		setLayout(blHaupt);

		add("North",pnNord);
		pnNord.setBackground(Color.black);
		pnNord.add(lbHeader);
		lbHeader.setFont(ftHFont);
		lbHeader.setForeground(Color.white);

		add("West",pnWest);
		pnWest.setLayout(glLinks);
		pnWest.setBackground(Color.yellow);
		pnWest.add(pnEins);
		pnEins.add(btZeichnen);
		pnWest.add(pnZwei);
		pnZwei.add(btLöschen);

		add("South",pnSüd);
		pnSüd.setBackground(Color.black);
		pnSüd.add(lbCopyright);
		lbCopyright.setFont(ftCFont);
		lbCopyright.setForeground(Color.white);

		add("Center",cvZeichnung);
		cvZeichnung.setBackground(Color.white);
		cvZeichnung.init();


	}

	public void BtnZeichnenClick()
	{
		cvZeichnung.Kirche(20,50);
		for (int i=0;i<=2;i++)
		{
			cvZeichnung.Haus(250+i*100,98);
		}
		cvZeichnung.Fahrbahn(0,200);
		
	}

	public void BtnLöschenClick()
	{
		cvZeichnung.Löschen();
	}


	public boolean handleEvent(Event evt)
	{
		switch(evt.id)
		{
		case Event.ACTION_EVENT:
			if (evt.target == btZeichnen)
			{
        	    BtnZeichnenClick();
                return true;
			}
			if (evt.target == btLöschen)
			{
				BtnLöschenClick();
				return true;
			}
		}
		return false;
	}

}

class StrasseCanvas extends Canvas
{

	private int iBreite;
	private int iHöhe;
	private Image imBild;
	private Graphics grGrafik;


//Konstruktor    
	public StrasseCanvas(int iBreite, int iHöhe)
	{
		this.iBreite=iBreite;
		this.iHöhe=iHöhe;
		resize(iBreite,iHöhe);
	}

	public void init()
	{
		imBild=createImage(iBreite,iHöhe);
		grGrafik=imBild.getGraphics();
		grGrafik.setColor(Color.white);
		grGrafik.fillRect(1,1,iBreite-2,iHöhe-2);
		grGrafik.setColor(Color.black);
		grGrafik.drawRect(0,0,iBreite-1,iHöhe-1);
	}

	public void paint(Graphics g)
	{
		g.drawImage(imBild,0,0,this);
	}

	public void update(Graphics g)
	{
		paint(g);
	}

	public void Kirche(int x, int y)
	{
		int iHausbreite;
		int iHaushöhe,iHalbeHöhe,iViertelHöhe;
		int iDachhöhe;
		int iHalbesHaus,iViertelHaus;

		iHausbreite=50;
		iHaushöhe=9*(int)(iHausbreite/4);
		iHalbeHöhe=(int)(iHaushöhe/2);
		iViertelHöhe=(int)(iHaushöhe/4);
		iDachhöhe=(int)(iHausbreite/4);
		iHalbesHaus=(int)(iHausbreite/2);
		iViertelHaus=(int)(iHausbreite/4);

		//Haus
		grGrafik.drawRect(x,y,iHausbreite,iHaushöhe);
		//Dach
		grGrafik.drawLine(x,y,x+iHalbesHaus,y-iDachhöhe);
		grGrafik.drawLine(x+iHalbesHaus,y-iDachhöhe,x+iHausbreite,y);
        //Schiff
		grGrafik.drawRect(x+iHausbreite,y+iHalbeHöhe,3*iHausbreite,iHalbeHöhe);
		//Schiffdach
		grGrafik.drawLine(x+iHausbreite,y+iViertelHöhe,x+3*iHausbreite,y+iViertelHöhe);
		grGrafik.drawLine(x+3*iHausbreite,y+iViertelHöhe,x+4*iHausbreite,y+iHalbeHöhe);
		//Tür
		grGrafik.drawRect(x+iHalbesHaus-10,y+iHaushöhe-20,20,20);
		grGrafik.drawLine(x+iHalbesHaus,y+iHaushöhe-20,x+iHalbesHaus,y+iHaushöhe);
		grGrafik.drawArc(x+iHalbesHaus-10,y+iHaushöhe-25,20,10,0,180);
		//Uhr
		grGrafik.drawOval(x+iHalbesHaus-5,y+15,10,10);
		grGrafik.drawLine(x+iHalbesHaus,y+20,x+iHalbesHaus+3,y+20);
		grGrafik.drawLine(x+iHalbesHaus,y+20,x+iHalbesHaus,y+16);
		//Schifffenster
		for (int i=0;i<=8;i++)
		{
			grGrafik.fillRect(x+iHausbreite+10+i*15,y+iHalbeHöhe+10,10,25);
		}



	}

	public void Haus(int x, int y)
	{
        int iHausbreite;
		int iHaushöhe;
		int iDachhöhe;
		int iHalbesHaus,iViertelHaus;

		iHausbreite=50;
		iHaushöhe=5*(int)(iHausbreite/4);
		iDachhöhe=(int)(iHausbreite/4);
		iHalbesHaus=(int)(iHausbreite/2);
		iViertelHaus=(int)(iHausbreite/4);

		//Haus
		grGrafik.drawRect(x,y,iHausbreite,iHaushöhe);
		//Dach
		grGrafik.drawLine(x,y,x+iHalbesHaus,y-iDachhöhe);
		grGrafik.drawLine(x+iHalbesHaus,y-iDachhöhe,x+iHausbreite,y);
		//Tür
		grGrafik.drawRect(x+iHalbesHaus-5,y+iHaushöhe-15,10,15);
		//Fenster
		grGrafik.fillRect(x+iViertelHaus-3,y+iHaushöhe-15,7,7);
		grGrafik.fillRect(x+iHausbreite-iViertelHaus-3,y+iHaushöhe-15,7,7);
		grGrafik.fillRect(x+iViertelHaus-3,y+15,7,7);
		grGrafik.fillRect(x+iHalbesHaus-3,y+15,7,7);
		grGrafik.fillRect(x+iHausbreite-iViertelHaus-3,y+15,7,7);
		repaint();
	}

	public void Fahrbahn(int x, int y)
	{
		grGrafik.drawLine(x,y,iBreite,y);
		grGrafik.drawLine(x,y+1,iBreite,y+1);
		grGrafik.drawLine(x,y+45,iBreite,y+45);
		grGrafik.drawLine(x,y+46,iBreite,y+46);
	}

    public void Löschen()
	{
		grGrafik.setColor(Color.white);
		grGrafik.fillRect(1,1,iBreite-2,iHöhe-2);
		grGrafik.setColor(Color.black);
		repaint();
	}

}