/*
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 ZiegenApplet1 extends Applet {

	int x0;
	int y0;
	int h=150;
	int b=100;
	int x1=30;
	int x2=180;
	int x3=320;
	int oben, unten;
	int wahl;
	int zaehler;
	int OK;	
	int AnzahlSpiele;
	int gewonnen;	
	int umwahl;
	int ohneUmwahlGewonnen, mitUmwahlGewonnen;
	int p, q;
	int ersteWahl;
	
	
	boolean hit;
			
	StringBuffer buffer;
	Date dat;
	Random r;
	int zufall;
	int moderator;
	Image auto, ziege;
	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("Helvetica", Font.PLAIN, 12);
    	setFont(f);
    	buffer = new StringBuffer();
    	
		moderator = 0;
		zaehler=0;
		AnzahlSpiele=1;
		gewonnen=0;
		mitUmwahlGewonnen=0;
		ohneUmwahlGewonnen=0;
			
		auto = getImage(getCodeBase(), "carImage.gif");							
		ziege = getImage(getCodeBase(), "goatImage.gif");		
																
		add(new Button("neues Spiel"));
		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;} 		
 	} 
//----------------------------------------------	
	public void paint( Graphics g ) {
	
		if (OK==0) {
		
			g.setColor(Color.black);
			g.clearRect(0, 0, size().width, size().height);
			
			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.clearRect(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 ",120,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.clearRect(x[moderator]+2, oben+2, b-3, h-3);
				g.setColor(Color.red);
				g.drawRect(x[moderator], oben, b, h);
				//ziege = getImage(getDocumentBase(),"goatImage.gif");
				g.setColor(Color.black);							
				g.drawImage(ziege,x[moderator]+20,oben+70,this);														
			}	
				
			//2. Wahl
			if (zaehler==2) {
								
				g.setColor(Color.red);								
								
				if (wahl==zufall) g.drawString("gewonnen !",x[wahl]+30,unten+25);
				else g.drawString("verloren !",x[wahl]+30,unten+25);					

				g.drawRect(x[moderator], oben, b, h);	
				
				g.clearRect(x[zufall]+2, oben+2, b-3, h-3);
				g.setColor(Color.black);
				
				g.drawImage(auto,x[zufall]+10,oben+70,this);					
				for (int i=1; i<4; i++)
					if (i!=zufall) g.drawImage(ziege,x[i]+20,oben+70,this);
																					
				g.setColor(Color.green);
				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+" games  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;OK=0;;repaint();}
			if ((x>x2) && (x<x2+b) && (y<unten) && (y>oben)) {zaehler=zaehler+1;OK=0;;repaint();}
			if ((x>x3) && (x<x3+b) && (y<unten) && (y>oben)) {zaehler=zaehler+1;OK=0;;repaint();}						
			return true;		
		}
		
		
		return true;					
	}
//------------------------------------------------
	public boolean action(Event event, Object eventObject) {
		
		if (eventObject.equals("neues Spiel")) {
			
			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")) {
		
			/*Frame parentFrame = new Frame("Dialog");
						 		
			Dialog okDialog = new OKDialog(parentFrame,"Ales loeschen ?");
			parentFrame.resize(okDialog.size().width,okDialog.size().height);
			okDialog.show();*/
									
			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;//+++ 26.3.98}
		}
		repaint();
		return true;		
	}
	
}

//----------------
// Example 21.6 ­ OK Dialog class 

/*public class OKDialog extends Dialog {
 
	protected Button okButton; 
	protected static Frame createdFrame; 

		public OKDialog(Frame parent, String message){ 
			super(parent, true);

			GridBagLayout gridbag = new GridBagLayout(); 
			GridBagConstraints constraints = new GridBagConstraints();


			okButton = new Button("OK"); 
			Label messageLabel = new Label(message); 

			setLayout(gridbag); 

			constraints.fill = GridBagConstraints.NONE; 
			constraints.anchor = GridBagConstraints.CENTER; 
			constraints.ipadx = 20; 
			constraints.ipady = 20; 
			constraints.weightx = 1.0; 
			constraints.weighty = 1.0; 
			constraints.gridwidth = GridBagConstraints.REMAINDER; 
			constraints.gridheight = GridBagConstraints.RELATIVE; 
			gridbag.setConstraints(messageLabel, constraints); 
			add(messageLabel); 
			 

			constraints.ipadx = 0; 
			constraints.ipady = 0; 
			constraints.weightx = 0.0; 
			constraints.weighty = 0.0; 
			constraints.gridwidth = 1; 
			constraints.gridheight = GridBagConstraints.REMAINDER; 

			gridbag.setConstraints(okButton, constraints); 
			add(okButton); 

			pack(); 
		} 


	public boolean action(Event evt, Object whichAction) {

		if (evt.target == okButton){ 
			hide(); 
		if (createdFrame != null){ 
			createdFrame.hide(); 
			} 
		} 
		return true; 
	} 
	
}*/