/*
Nom de l'application: Jeu de Nim
Adresse du site: http://jeudenim.free.fr
Application crée avec: kEdit (fichiers texte), The GIMP (images)
Auteur: Eric Leydet
Adresse électronique: Eric.Leydet@ac-bordeaux.fr
Date de création: mai 2002
Nom de ce fichier: fonctions.js
*/

// CREATION DES OBJETS

var jeu=new CL_jeu();
var tapis=new CL_tapis();
var combinaison=new CL_combinaison();
var commentaire=new CL_commentaire();

// PRECHARGEMENT DES IMAGES

var hermine=new Array();
for (var i=0;i<=3;i++) hermine[i]=new Image();
hermine[0].src="posee.gif";
hermine[1].src="montree.gif";
hermine[2].src="choisie.gif";
hermine[3].src="otee.gif";
var visage=new Array();
for (var i=0;i<=4;i++) visage[i]=new Image();
visage[0].src="debut.gif";
visage[1].src="a_vous.gif";
visage[2].src="a_moi.gif";
visage[3].src="perdu.gif";
visage[4].src="gagne.gif";

// FONCTIONS APPELEES DEPUIS LA PAGE jouer.html

function oter(r,a,type) {
  //Cette fonction ne peut être appelée que si c'est au tour du joueur de jouer.
  if (jeu.etat=="joueur joue") {
    if (type==1 && tapis.rangee[r].pion[a].etat=="posee") tapis.rangee[r].pion[a].etat="montree";
    if (type==2 && tapis.rangee[r].pion[a].etat=="montree") tapis.rangee[r].pion[a].etat="posee";
    if (type==3) {
      if (tapis.rangee[r].pion[a].etat=="montree") tapis.rangee[r].pion[a].etat="choisie";
      else if (tapis.rangee[r].pion[a].etat=="choisie") tapis.rangee[r].pion[a].etat="montree";
    }
    dessiner_pions();
  }
}

function jouer() {
  if (jeu.etat=="initial"||jeu.etat=="fini") {
    tapis.initialiser();
    dessiner_pions();
    if (jeu.commence=="joueur") joueur_jouer();
    if (jeu.commence=="ordinateur") ordinateur_jouer();
  }
  else if (jeu.etat=="joueur joue") {
    if (tapis.selection()=="correcte") {
      tapis.oter();
      dessiner_pions();
      if (tapis.verification()!=0) ordinateur_jouer();
      else if (tapis.verification()==0) terminer_jeu();
    }
    else if (tapis.selection()=="aucune") alert(commentaire.erreur(0));
    else if (tapis.selection()=="incorrecte") alert(commentaire.erreur(1));
  }
}

function option() {
  var ch='<BODY BACKGROUND="marbre.jpg">';
  ch+='<FONT SIZE=7 COLOR="#000080"><CENTER><B>OPTIONS</B></CENTER></FONT>';
  ch+='<HR><BR>';
  ch+='<FORM NAME="f">';
  ch+='  <FONT SIZE=4 COLOR="#000080">';
  ch+='    <B><U>NIVEAU:</U></B><BR><BR>';
  ch+='    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  ch+='    <INPUT NAME="niveau" TYPE="radio"><I>&nbsp;débutant</I><BR>';
  ch+='    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  ch+='    <INPUT NAME="niveau" TYPE="radio"><I>&nbsp;confirmé</I><BR>';
  ch+='    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  ch+='    <INPUT NAME="niveau" TYPE="radio"><I>&nbsp;expert</I><BR><BR>';
  ch+='    <B><U>QUI RETIRE LA DERNIERE HERMINE:</U></B><BR><BR>';
  ch+='    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  ch+='    <INPUT NAME="dernier" TYPE="radio"><I>&nbsp;perd la partie</I><BR>';
  ch+='    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  ch+='    <INPUT NAME="dernier" TYPE="radio"><I>&nbsp;gagne la partie</I><BR><BR>';
  ch+='    <B><U>QUI JOUE LE PREMIER ?:</U></B><BR><BR>';
  ch+='    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  ch+='    <INPUT NAME="commence" TYPE="radio"><I>&nbsp;Vous</I><BR>';
  ch+='    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  ch+='    <INPUT NAME="commence" TYPE="radio"><I>&nbsp;Moi</I>';
  ch+='    <BR><BR><HR><BR>';
  ch+='  </FONT>';
  ch+='  <TABLE WIDTH=100% BORDER=0><TR>';
  ch+='    <TD ALIGN="center"><FONT SIZE=4 COLOR="#000080">';
  ch+='      <INPUT TYPE="button" VALUE="APPLIQUER" ONCLICK="opener.appliquer()"style="background-color: #000080; color: #FFFFFF; font-weight: bold">';
  ch+='    </FONT></TD>';
  ch+='    <TD ALIGN="center"><FONT SIZE=4 COLOR="#000080">';
  ch+='      <INPUT TYPE="button" VALUE="ANNULER" ONCLICK="self.close()"style="background-color: #000080; color: #FFFFFF; font-weight: bold">';
  ch+='    </FONT></TD>';
  ch+='  </TR></TABLE>';
  ch+='</FORM>';
  ch+='</BODY>';
  var largeur=screen.width/2;
  var hauteur=screen.height/1.4;
  var pos_x=(screen.width-largeur)/2;
  var pos_y=(screen.height-hauteur)/2;
  var dimensions='width='+largeur+',height='+hauteur;
  var proprietes='menubar=no,toolbar=no,directories=no,location=no,status=no,scrollbars=yes';
  fen_options=window.open('','options',dimensions+proprietes);
  fen_options.moveTo(pos_x,pos_y);
  fen_options.document.open();
  fen_options.document.write(ch);
  fen_options.document.close();
  if (jeu.niveau=="debutant") fen_options.document.f.niveau[0].checked=true;
  if (jeu.niveau=="confirme") fen_options.document.f.niveau[1].checked=true;
  if (jeu.niveau=="expert") fen_options.document.f.niveau[2].checked=true;
  if (jeu.dernier=="perd") fen_options.document.f.dernier[0].checked=true;
  if (jeu.dernier=="gagne") fen_options.document.f.dernier[1].checked=true;
  if (jeu.commence=="joueur") fen_options.document.f.commence[0].checked=true;
  if (jeu.commence=="ordinateur") fen_options.document.f.commence[1].checked=true;
  fen_options.focus();
}

function score() {
  var ch='<BODY BACKGROUND="marbre.jpg">';
  ch+='<FONT SIZE=7 COLOR="#000080"><CENTER><B>SCORE</B></CENTER></FONT>';
  ch+='<HR><BR>';
  ch+='<TABLE ALIGN="center" BORDER=0><TR>';
  ch+='  <TD><FONT SIZE=4 COLOR="#000080">';
  ch+='    Nombre de parties jouées:<BR>';
  ch+='    Nombre de parties gagnées par vous:<BR>';
  ch+='    Nombre de parties gagnées par l\'ordinateur:<BR>';
  ch+='  </FONT></TD>';
  ch+='  <TD ALIGN="right"><FONT SIZE=4 COLOR="#000080">';
  ch+=jeu.parties+"<BR>"+jeu.gains+"<BR>"+(jeu.parties-jeu.gains)+"<BR>";
  ch+='  </FONT></TD>';
  ch+='</TR></TABLE>';
  ch+='<FONT SIZE=4 COLOR="#000080">';
  ch+='  <BR><HR><BR>';
  ch+='  <FORM><CENTER><INPUT TYPE="button" VALUE="QUITTER" ONCLICK="self.close()"style="background-color: #000080; color: #FFFFFF; font-weight: bold"></CENTER></FORM>';
  ch+='</FONT>';
  ch+='</BODY>';
  var largeur=screen.width/2;
  var hauteur=screen.height/2.5;
  var pos_x=(screen.width-largeur)/2;
  var pos_y=(screen.height-hauteur)/2;
  var dimensions='width='+largeur+',height='+hauteur;
  var proprietes='menubar=no,toolbar=no,directories=no,location=no,status=no,scrollbars=yes';
  fen_score=window.open('','score',dimensions+proprietes);
  fen_score.moveTo(pos_x,pos_y);
  fen_score.document.open();
  fen_score.document.write(ch);
  fen_score.document.close();
  fen_score.focus();
}

function aide() {
  var ch='<BODY BACKGROUND="marbre.jpg">';
  ch+='<FONT SIZE=7 COLOR="#000080"><CENTER><B>AIDE</B></CENTER></FONT>';
  ch+='<HR><BR>';
  ch+='<FONT SIZE=4 COLOR="#000080">';
  ch+='  <B><U>HISTORIQUE:</U></B><BR>';
  ch+='  <UL>';
  ch+='  <LI>Ce jeu, dont il existe plusieurs variantes, se joue avec des graines, des billes, des jetons,';
  ch+='    des allumettes... Son origine est probablement très ancienne.';
  ch+='    <LI>Les chinois l\'appellent: <I>fan-tan</I>.';
  ch+='    <LI>Il est connu en Afrique sous le nom <I>tiouk-tiouk</I>.';
  ch+='    <LI>Il fut nommé <I>jeu de Nim</I> par le mathématicien anglais Charles Leonard Bouton en 1901.';
  ch+='    <LI>Il a connu un regain d\'intérêt avec le film d\'Alain Resnais <I>L\'année dernière, à Marienbad</I>';
  ch+='    en 1961. Dans ce film, le héros gagne parties sur parties. Il prononce cette phrase à la porté';
  ch+='    symbolique: <I>Je puis perdre, mais je gagne toujours</I>... Depuis, ce jeu s\'appelle également:';
  ch+='    <I>jeu de Marienbad</I>.';
  ch+='  </UL>';
  ch+='  <HR><BR>';
  ch+='  <B><U>REGLES DU JEU:</U></B><BR>';
  ch+='  <UL>';
  ch+='    <LI>Le jeu se joue à deux, c\'est chacun à son tour de jouer.';
  ch+='    <LI>Le tapis comporte quatre rangées d\'hermines: la première en comporte 1, la deuxième 3,';
  ch+='    la troisième 5 et la dernière 7.';
  ch+='    <LI>Lorsque c\'est à votre tour de jouer, vous devez enlever des hermines dans une des rangées';
  ch+='    disponibles. Vous devez en retirer au moins une, mais vous pouvez toutes les retirer si vous';
  ch+='    le souhaitez.';
  ch+='    <LI>Selon l\'option du jeu choisie, celui qui retire la dernière hermine gagne ou perd la partie.';
  ch+='  </UL>';
  ch+='  <HR><BR>';
  ch+='  <B><U>INSTALLATION SUR VOTRE PC:</U></B><BR>';
  ch+='  <UL>';
  ch+='    <LI>Vous pouvez installer ce jeu sur votre PC, pour jouer sans être connecté à internet. Pour cela,';
  ch+='    téléchargez le fichier sur le site: http://jeudenim.free.fr puis en cliquant sur le lien : jeudenim.zip';
  ch+='    <LI>Une fois le téléchargement terminé, vous constatez, en cliquant dessus (<I>WinZip</I> doit être intallé';
  ch+='    sur votre PC), que le fichier <I>jeudenim.zip</I> regroupe plusieurs fichiers: <I>a_moi.gif</I>,';
  ch+='    <I>a_vous.gif</I>, <I>aide.html</I>, <I>choisie.gif</I>, <I>classes.js</I> etc. Placez tout ces fichiers';
  ch+='    dans un même dossier (ou répertoire).';
  ch+='    <LI>Pour jouer, cliquez sur le fichier <I>index.html</I>.';
  ch+='  </UL>';
  ch+='  <HR><BR>';
  ch+='  <B><U>PROGRAMMATION:</U></B><BR><BR>';
  ch+='  Ce jeu, disponible sur internet depuis mai 2002, est écrit intégralement en <I>HTML</I> et <I>JavaScript</I>';
  ch+='  (l\'option <I>JavaScript</I> de votre navigateur doit être activée). Il fonctionne avec des versions';
  ch+='  relativement anciennes de navigateurs: <I>Netscape Navigator 4.75</I> et <I>Internet Explorer 4.0</I>.';
  ch+='  Par conséquent:';
  ch+='  <UL>';
  ch+='    <LI>il ne peut pas introduire de virus sur votre PC,';
  ch+='    <LI>il est compatible avec la plupart des navigateurs et la grande majorité des systèmes';
  ch+='    d\'exploitation: <I>Windows</I>, <I>Linux</I> etc,';
  ch+='    <LI>le code source est à votre disposition, ces langages n\'étant pas compilés.';
  ch+='  </UL>';
  ch+='  Le programme commence par afficher le jeu, puis les actions du joueur avec la souris appellent des fonctions';
  ch+='  qui modifient l\'affichage.';
  ch+='  Ces fonctions utilisent un certain nombre d\'objets spécialisés, crées à partir de classes d\'objets,';
  ch+='  indépendants les uns des autres, pour que le programme reste facile à modifier:';
  ch+='  <UL>';
  ch+='    <LI>jeu,';
  ch+='    <LI>tapis (contient un tableau d\'objets rangee, chaque objet rangee contient un tableau d\'objets';
  ch+='    pion),';
  ch+='    <LI>combinaison,';
  ch+='    <LI>commentaire.';
  ch+='  </UL>';
  ch+='  Ces fonctions utilisent également des images préchargées (téléchargées à l\'avance) pour éviter toute';
  ch+='  attente lorsque le joueur joue. Les images sont des allumettes et le visage est emprunté au logiciel <I>Goto Dames</I> de la société';
  ch+='  <I>Goto Informatique</I>.';
  ch+='  <BR><BR>';
  ch+='  Si vos souhaitez conserver les images bretonnes contacter nous.';
  ch+='  <BR><BR><HR><BR>';
  ch+='  <FORM><CENTER><INPUT TYPE="button" VALUE="QUITTER" ONCLICK="self.close()"style="background-color: #000080; color: #FFFFFF; font-weight: bold"></CENTER></FORM>';
  ch+='</FONT>';
  ch+='</BODY>';
  var largeur=screen.width/1.1;
  var hauteur=screen.height/1.2;
  var pos_x=(screen.width-largeur)/2;
  var pos_y=(screen.height-hauteur)/2;
  var dimensions='width='+largeur+',height='+hauteur;
  var proprietes='menubar=no,toolbar=no,directories=no,location=no,status=no,scrollbars=yes';
  fen_aide=window.open('','aide',dimensions+proprietes);
  fen_aide.moveTo(pos_x,pos_y);
  fen_aide.document.open();
  fen_aide.document.write(ch);
  fen_aide.document.close();
  fen_aide.focus();
}

function quitter() {
  document.visage.src=visage[0].src;
  document.f.commentaire.value=commentaire.quitter();
  setTimeout('self.close()',2000);
}

// FONCTION APPELEE DEPUIS LA FENETRE OPTION

function appliquer() {
  //Les options ne peuvent pas être changées si l'ordinateur ou le joueur joue.
  if (jeu.etat=="joueur joue"||jeu.etat=="ordinateur joue") {
    alert("Attention, les options ne peuvent pas être modifiées au cours de la partie!");
  }
  else {
    if (fen_options.document.f.niveau[0].checked) jeu.niveau="debutant";
    if (fen_options.document.f.niveau[1].checked) jeu.niveau="confirme";
    if (fen_options.document.f.niveau[2].checked) jeu.niveau="expert";
    if (fen_options.document.f.dernier[0].checked) jeu.dernier="perd";
    if (fen_options.document.f.dernier[1].checked) jeu.dernier="gagne";
    if (fen_options.document.f.commence[0].checked) jeu.commence="joueur";
    if (fen_options.document.f.commence[1].checked) jeu.commence="ordinateur";
  }
  fen_options.close();
}

// FONCTIONS REPETITIVES

function ordinateur_jouer() {
  jeu.etat="ordinateur joue";
  document.visage.src=visage[2].src;
  document.f.commentaire.value=commentaire.ordinateur();
  document.f.bouton_jouer.value="PATIENTEZ";
  var r=new Array();
  r[0]=tapis.rangee[0].reste();
  r[1]=tapis.rangee[1].reste();
  r[2]=tapis.rangee[2].reste();
  r[3]=tapis.rangee[3].reste();
  combinaison.choisir(r,jeu);
  tapis.rangee[combinaison.rangee].choisir(combinaison.nombre);
  setTimeout('dessiner_pions()',700);
  setTimeout('ordinateur_jouer_suite()',1400);
}

function ordinateur_jouer_suite() {
  tapis.oter();
  dessiner_pions();
  if (tapis.verification()!=0) joueur_jouer();
  else terminer_jeu();
}

function joueur_jouer() {
  jeu.etat="joueur joue";
  document.visage.src=visage[1].src;
  document.f.commentaire.value=commentaire.joueur(tapis.verification());
  document.f.bouton_jouer.value="RETIRER";
}

function terminer_jeu() {
  if ((jeu.etat=="joueur joue"&&jeu.dernier=="gagne")||(jeu.etat=="ordinateur joue"&&jeu.dernier=="perd")) {
    document.visage.src=visage[3].src;
    document.f.commentaire.value=commentaire.fin("joueur");
    jeu.gains++;
  }
  if ((jeu.etat=="joueur joue"&&jeu.dernier=="perd")||(jeu.etat=="ordinateur joue"&&jeu.dernier=="gagne")) {
    document.visage.src=visage[4].src;
    document.f.commentaire.value=commentaire.fin("ordinateur");
  }
  jeu.etat="fini";
  jeu.parties++;
  document.f.bouton_jouer.value="REJOUER";
}

function dessiner_pions() {
  for (var j=0;j<4;j++) {
    for (var k=0;k<tapis.rangee[j].nombre;k++) {
      var nom="r"+j+"a"+k;
      if (tapis.rangee[j].pion[k].etat=="posee") document.images[nom].src=hermine[0].src;
      if (tapis.rangee[j].pion[k].etat=="montree") document.images[nom].src=hermine[1].src;
      if (tapis.rangee[j].pion[k].etat=="choisie") document.images[nom].src=hermine[2].src;
      if (tapis.rangee[j].pion[k].etat=="otee") document.images[nom].src=hermine[3].src;
    }
  }
}
