Code:
/*
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;
}
}*/