/* jeu2PF1.java - 10/05/2003
 * modification et ajout de main() le 09/02/18
 */

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.Random;

public class jeu2PF1 extends java.applet.Applet implements ActionListener {
  static final long serialVersionUID = 180209L;
  Button ok, plus;
  Random rnd;
  Panel p;
  Centre c;
  TextField tproba, tn;
  int neuros, n, fortune, total;
  double proba;
  Font f;

  private Button ajoutb (String s)
  { Button b = new Button (s);
    b.setFont (f);
    b.addActionListener (this);
    p.add (b);
    return b;
  }

  private TextField ajouttf (String s)
  { Label lbl =new Label (s);
    lbl.setBackground (Color.lightGray);
    lbl.setFont (f);
    p.add (lbl);
    TextField tf = new TextField (5);
    tf.setFont (f);
    p.add (tf);
    return tf;
  }

  public void init ()
  { setLayout(new BorderLayout());
    p = new Panel ();
    p.setBackground (Color.lightGray);
    c = new Centre ();
    add (p, BorderLayout.NORTH);
    add (c, BorderLayout.CENTER);
    f = new Font ("Arial", Font.PLAIN, 10);
    tproba = ajouttf ("Je joue \"Pile\" avec la probabilité");
    proba = 1.0;
    tproba.setText (Double.toString(proba));
    tn = ajouttf ("; nombre de parties :");
    n = 0;
    tn.setText (Integer.toString(n));
    ok = ajoutb ("Ok");
    plus = ajoutb ("+");
    rnd = new Random ();
  }

  public void actionPerformed (ActionEvent e)
  { double pp = - 1.0;
    try { pp = new Double(tproba.getText ()).doubleValue(); }
    catch (NumberFormatException nfe) { }
    if (pp >= 0.0 && pp <= 1.1) proba = pp;
    int nn = -1;
    try { nn = Integer.parseInt (tn.getText ()); }
    catch (NumberFormatException nfe) { }
    if (nn >= 0) n = nn;
    tproba.setText (Double.toString(proba));
    tn.setText (Integer.toString(n));
    if (e.getSource () == ok) fortune = total = 0;
    if (c.retrace = ((e.getSource () == ok) || (e.getSource () == plus)))
     c.repaint ();
  }

protected class Centre extends Canvas {
  static final long serialVersionUID = 180209L;
  Image img;
  Graphics g;
  boolean retrace;
  int w, h;

  public void update (Graphics g1)
  { paint (g1); }

  public void paint (Graphics g1) {
    if (img == null || w != getSize().width || h != getSize().height) {
      w = getSize().width;
      h = getSize().height;
      img = createImage (w, h);
      g = img.getGraphics ();
      g.setColor (Color.white);
      g.fillRect (0, 0, w, h);
	  retrace = true;
    }
    if (retrace)
    { retrace = false;
      for (int i = 1; i <= n; i ++)
      { boolean b = (rnd.nextDouble() < 0.375); // b vrai l'ordi joue "Pile"
        boolean b1 = (rnd.nextDouble() < proba); // b vrai le joueur à travers l'ordi joue "Pile"
        g.setColor (Color.white);
        g.fillRect (0, 0, w, h);
        Color couleur = Color.gray;
        neuros = -2;
        if (b && b1 || ! b && ! b1)
        { couleur = Color.yellow;
          neuros = (b) ? 3 : 1;
        }
        fortune += neuros;
        int aneuros = Math.abs (neuros);
        for (int j = 0; j < aneuros; j ++) paintEuro (g, 10 + j * 50, 30, couleur);
        g.drawString ("fortune = " + fortune, 20, 100);
        g.drawString ("nombre de parties = " + (++ total), 20, 120);
        g.drawString ("gain moyen = " + ((double)(fortune) / (double)(total)), 20, 140);
        g1.drawImage (img, 0, 0, this);
      }
    }
    g1.drawImage (img, 0, 0, this);
  }

// dessin euro

  private void paintEuro (Graphics g, int x, int y, Color couleur)
//   int x = 10; int y = 80;
  { int diametre = 40;
    int rayon = diametre / 2;
    int rs2 = rayon / 2;
    g.setColor (couleur);
    g.fillOval (x, y, diametre, diametre);
    g.setColor (Color.black);
    g.drawArc (x + rs2, y + rs2, rayon, rayon, 80, 195);
    g.drawLine (x + rs2 - 3, y + rayon, x + rayon, y + rayon);
    g.drawLine (x + rs2 - 3, y + rayon + 3, x + rayon, y + rayon + 3);

  }

}

////////////////////////////////////////////////////////////////////////////////

	public static void main (String [] args) {
		jeu2PF1 a = new jeu2PF1();
		a.init();
		a.start();

		Frame f = new Frame ("jeu2PF1");
		f.addWindowListener (new fermer ());
		f.add (a);
		f.setSize (500, 200);
		f.setVisible (true);
    }

// Permet la fermeture de la fenêtre contenant l'applet
	protected static final class fermer extends WindowAdapter {
		public void windowClosing (WindowEvent e) {
			System.exit (0);
		}
	}
}
