/*
Applet zum "Ziegenproblem" - J. Giesen 4.1.1998"
*/

import java.awt.*;
import java.applet.*;
import java.util.Date;
import java.util.Random;
import java.lang.Math;

public class ZiegenApplet extends Applet {

	int x0;
	int y0;
	int h=150;
	int b=100;
	int x1=30;
	int x2=180;
	int x3=320;
	int oben;
	int unten;
	int wahl;
	int zaehler;
	int OK;	
	int AnzahlSpiele;
	int gewonnen;	
	int umwahl;
	int mitUmwahlGewonnen;
	int ohneUmwahlGewonnen;
	int p;
	int q;
	int ersteWahl;
	
	boolean hit;
	Rectangle rect;
	MediaTracker tracker;
	Graphics g;
	Image picture;
			
	StringBuffer buffer;
	Date dat;
	Random r;
	int zufall;
	int moderator;
	Image Auto;
	Image Ziege;
	String bildname="Auto.gif";
	int x[] = new int[4];
	int z[] = new int[4];	
	
	public void init() {		
		oben=80;
		unten=oben+h;
		
		x[0]=0;		
		x[1]=30;
		x[2]=180;
		x[3]=320;
		
		wahl=0;
		Font f = new Font("Chicago", Font.PLAIN, 12);
    	setFont(f);
    	buffer = new StringBuffer();
    	
		moderator = 0;
		zaehler=0;
		AnzahlSpiele=1;
		gewonnen=0;
		mitUmwahlGewonnen=0;
		ohneUmwahlGewonnen=0;
			
		bildname = getParameter("Auto");
		Auto = getImage(getDocumentBase(),bildname);		
		rect = this.bounds();
		picture = createImage(rect.width,rect.height);
		g = picture.getGraphics();	
		resize( size().width, size().height );
		tracker = new MediaTracker(this);
		tracker.addImage(Auto,0);	
		try {tracker.waitForID(0);} catch(Exception e) { };			
		
		bildname = getParameter("Ziege");
		Ziege = getImage(getDocumentBase(),bildname);		
		rect = this.bounds();
		picture = createImage(rect.width,rect.height);
		g = picture.getGraphics();	
		resize( size().width, size().height );
		tracker = new MediaTracker(this);
		tracker.addImage(Ziege,0);	
		try {tracker.waitForID(0);} catch(Exception e) { };
												
		Panel panel = new Panel();
		add("Buttons", panel);
		panel.add(new Button("neues Spiel"));
		panel.add(new Button("loeschen"));
		
		dat = new Date();
		r = new Random(dat.getTime());
		zufall =  r.nextInt( ) % 3; 
		zufall = Math.abs(zufall);
		zufall = zufall +1;
		wahl=0;
		moderator=0;
		OK=1;
		z[0]=1;
		z[1]=0;
		z[2]=0;
		z[3]=0;
		z[zufall]=1;
		ersteWahl=0;
						
		resize(size().width,size().height);
		repaint();
	}
	
 	void AB(int a, int b) {
 		int x;
 		dat = new Date();
		r = new Random(dat.getTime());
		x =  r.nextInt( ) % 2; 
		x = Math.abs(x);
		if (x==0) {p=a;q=b;}
		if (x==1) {p=b;q=a;}
 		//System.out.println(a+" "+b+" "+p+" "+q);
 	
 	} 
//----------------------------------------------	
	public void paint( Graphics g ) {
	
		if (OK==0) {
		
			g.setColor(Color.white);
			g.fillRect(0, 0, size().width, size().height);
			
			g.setColor(Color.black);
			g.drawRect(1, 1, size().width-2, size().height-2);														
			buffer = new StringBuffer(AnzahlSpiele + " Spiele: gewonnen "+gewonnen);	
			g.drawString(buffer.toString(),50, unten+50);
			buffer = new StringBuffer(ohneUmwahlGewonnen + " Gewinne ohne Umwahl");	
			g.drawString(buffer.toString(),50, unten+65);
			buffer = new StringBuffer(mitUmwahlGewonnen + " Gewinne mit Umwahl");	
			g.drawString(buffer.toString(),50, unten+80);
			g.setColor(Color.red);
			buffer = new StringBuffer("Klicke die Taste 'neues Spiel'");
			g.drawString(buffer.toString(), 170, unten+100);						
		}
		
		if (OK==1) {
										
			g.setColor(Color.white);
			g.fillRect(0, 0, size().width, size().height);
		
			//3 Rahmen zeichnen
			g.setColor(Color.black);
			g.drawRect(1, 1, size().width-2, size().height-2);
			g.drawRect(x1, oben, b, h);
			g.drawRect(x2, oben, b, h);
			g.drawRect(x3,oben, b, h);
			g.setColor(Color.red);
			g.drawString("1",80,60);
			g.drawString("2",230,60);
			g.drawString("3",370,60);
			
			//3 schwarze Fuellungen zeichnen
			if (zaehler==0) {
				g.setColor(Color.black);		
				g.fillRect(x1+2, oben+2, b-3, h-3);
				g.fillRect(x2+2, oben+2, b-3, h-3);
				g.fillRect(x3+2, oben+2, b-3, h-3);			
				g.setColor(Color.red);				
				g.drawString("Waehle eine Tuer !",170,unten+30);
			}
			
			//Wahl und Modeator zeichnen		
													
			if (zaehler==1) {
			
				g.setColor(Color.green);			
				g.fillRect(x[wahl]+2, oben+2, b-3, h-3);	
			
				g.setColor(Color.green);
				g.drawString("bestaetigen ",160,unten+30);
				g.setColor(Color.black);
				g.drawString("oder umwaehlen",220,unten+30);				
				
				buffer = new StringBuffer(AnzahlSpiele + ". Spiel");	
				g.drawString(buffer.toString(),50, unten+50);													
			
				g.fillRect(x[umwahl]+2, oben+2, b-3, h-3);			
				g.setColor(Color.white);
				g.fillRect(x[moderator]+2, oben+2, b-3, h-3);
				g.setColor(Color.red);
				g.drawRect(x[moderator], oben, b, h);							
				g.drawImage(Ziege,x[moderator]+20,oben+70,this);											
			}	
				
			//2. Wahl
			if (zaehler==2) {
							
				g.setColor(Color.white);
				g.fillRect(140, 10, 300, 30);
				g.setColor(Color.red);								
								
				if (wahl==zufall) g.drawString("gewonnen !",x[wahl]+30,unten+25);
									
				if (wahl!=zufall) {
					g.drawString("verloren !",x[wahl]+30,unten+25);
					g.setColor(Color.black);
				}
								
				g.drawImage(Ziege,x[1]+20,oben+70,this);
				g.drawImage(Ziege,x[2]+20,oben+70,this);
				g.drawImage(Ziege,x[3]+20,oben+70,this);
				
				g.setColor(Color.red);
				g.drawRect(x[moderator], oben, b, h);	
				
				g.setColor(Color.white);
				g.fillRect(x[zufall]+2, oben+2, b-3, h-3);
				g.drawImage(Auto,x[zufall]+10,oben+70,this);
												
				g.setColor(Color.green);
				//if (wahl>0) {
					g.drawRect(x[ersteWahl], oben, b, h);
					g.drawRect(x[wahl], oben, b, h);
					g.drawRect(x[wahl]+1, oben+1, b-2, h-2);
					g.drawRect(x[wahl]+2, oben+2, b-4, h-4);
				//}
					
													
				g.setColor(Color.black);
								
				buffer = new StringBuffer(AnzahlSpiele + " Spiele: gewonnen "+gewonnen);	
				g.drawString(buffer.toString(),50, unten+50);
				buffer = new StringBuffer(ohneUmwahlGewonnen + " Gewinne ohne Umwahl");	
				g.drawString(buffer.toString(),50, unten+65);
				buffer = new StringBuffer(mitUmwahlGewonnen + " Gewinne mit Umwahl");	
				g.drawString(buffer.toString(),50, unten+80);
				g.setColor(Color.red);
				buffer = new StringBuffer("Klicke die Taste 'neues Spiel'");
				g.drawString(buffer.toString(), 170, unten+100);
				System.out.println(AnzahlSpiele+" Spiele  1="+z[1]+"  2="+z[2]+"  3="+z[3]);
			}
							
		}					
	}
//-------------------------------------------------
	public boolean mouseDown(Event event, int x, int y) {
											
		// Verarbeitung des 1. Klicks: Registrierung der 1. Wahl
		// und Festlegung der vom Moderator zu oeffnenden Tür
		if (zaehler==0) {	
			if ((x>x1) && (x<x1+b) && (y<unten) && (y>oben)) wahl=1;
			if ((x>x2) && (x<x2+b) && (y<unten) && (y>oben)) wahl=2;
			if ((x>x3) && (x<x3+b) && (y<unten) && (y>oben)) wahl=3;
				
			if (wahl==1) {			
				if (zufall==1) {AB(2,3);moderator=p;umwahl=q;ohneUmwahlGewonnen=ohneUmwahlGewonnen+1;}
				if (zufall==2) {moderator=3;umwahl=2;mitUmwahlGewonnen=mitUmwahlGewonnen+1;}
				if (zufall==3) {moderator=2;umwahl=3;mitUmwahlGewonnen=mitUmwahlGewonnen+1;}
				zaehler=zaehler+1;
				ersteWahl=1;
				repaint();			
				return true;			
			}					
			if (wahl==2) {			
				if (zufall==1) {moderator=3;umwahl=1;mitUmwahlGewonnen=mitUmwahlGewonnen+1;}
				if (zufall==2) {AB(1,3);moderator=p;umwahl=q;ohneUmwahlGewonnen=ohneUmwahlGewonnen+1;}
				if (zufall==3) {moderator=1;umwahl=3;mitUmwahlGewonnen=mitUmwahlGewonnen+1;}
				zaehler=zaehler+1;
				ersteWahl=2;
				repaint();			
				return true;			
			}				
			if (wahl==3) {			
				if (zufall==1) {moderator=2;umwahl=1;mitUmwahlGewonnen=mitUmwahlGewonnen+1;}
				if (zufall==2) {moderator=1;umwahl=2;mitUmwahlGewonnen=mitUmwahlGewonnen+1;}
				if (zufall==3) {AB(1,2);moderator=p;umwahl=q;ohneUmwahlGewonnen=ohneUmwahlGewonnen+1;}
				zaehler=zaehler+1;
				ersteWahl=3;
				repaint();			
				return true;			
			}										
		}
		
		
		if (zaehler==1) {
			hit=false;			
			if ((x>x1) && (x<x1+b) && (y<unten) && (y>oben)) {hit=true;wahl=1; if (wahl!=moderator) {zaehler=zaehler+1; repaint();}}
			if ((x>x2) && (x<x2+b) && (y<unten) && (y>oben)) {hit=true;wahl=2; if (wahl!=moderator) {zaehler=zaehler+1; repaint();}}
			if ((x>x3) && (x<x3+b) && (y<unten) && (y>oben)) {hit=true;wahl=3; if (wahl!=moderator) {zaehler=zaehler+1; repaint();}}
			if (hit==true) {
				if (wahl==zufall) gewonnen=gewonnen+1;
				return true;
				}							
		}
				
		if (zaehler==2) {	
			if ((x>x1) && (x<x1+b) && (y<unten) && (y>oben)) {zaehler=zaehler+1;repaint();OK=0;}
			if ((x>x2) && (x<x2+b) && (y<unten) && (y>oben)) {zaehler=zaehler+1;repaint();OK=0;}
			if ((x>x3) && (x<x3+b) && (y<unten) && (y>oben)) {zaehler=zaehler+1;repaint();OK=0;}						
			return true;		
		}
		return true;					
	}
//------------------------------------------------
	public boolean action(Event event, Object eventObject) {
		
		if (eventObject.equals("neues Spiel")) {
			
			//System.out.println("zaehler= "+zaehler);
			if (zaehler>1) {
					
				dat = new Date();
				r = new Random(dat.getTime());
				zufall =  r.nextInt( ) % 3; 
				zufall = Math.abs(zufall);
				zufall = zufall +1;
				wahl=0;
				moderator=0;			
				OK=1;			
				zaehler=0;				
				umwahl=0;
				ersteWahl=0;				
				AnzahlSpiele=AnzahlSpiele+1;
				z[0]=z[0]+1;
				z[zufall]=z[zufall]+1;								
				repaint();			
			}						
		}
				
		if (eventObject.equals("loeschen")) {
									
			dat = new Date();
			r = new Random(dat.getTime());
			zufall =  r.nextInt( ) % 3; 
			zufall = Math.abs(zufall);
			zufall = zufall +1;
			wahl=0;
			moderator=0;			
			OK=1;
			AnzahlSpiele=1;
			gewonnen=0;
			mitUmwahlGewonnen=0;
			ohneUmwahlGewonnen=0;
			zaehler=0;
			ersteWahl=0;
			z[0]=1;
			z[1]=0;
			z[2]=0;
			z[3]=0;
			z[zufall]=1;				
			repaint();
		}
		return true;		
	}
}

