/*
Auteur: Eric Leydet
Adresse électronique: Eric.Leydet@ac-bordeaux.fr
Application: Jeu de Nim
Adresse du site: jeudenim.free.fr
Nom de ce fichier: fonctions.js
Date de création: mai 2002


********************
* SCRIPT PRINCIPAL *
********************

PRINCIPE DE FONCTIONNEMENT DU SCRIPT

A la base une application interactive réagit à des événements.
Ce script commence par initialiser le jeu dans la page HTML,
puis le jeu est dirigé par les actions déclenchées par le joueur.

Le script est constitué d'un certain nombre d'objets spécialisés:
- jeu,
- tapis (contient un tableau d'objets rangee, chaque objet rangee
contient un tableau d'objets pion),
- combinaison,
- commentaire.

Ces objets, indépendants les uns des autres, ont chacun leur propre
logique et leur propre comportement. Le script fonctionne par
va-et-vient constants entre ces objets et le script principal,
constitué des fonctions ci-dessous.

En fait, les objets ont pour fonction d'assister le script principal
dans des tâches spécialisées. Ils offrent également l'avantage de
pouvoir modifier des comportements sans toucher aux autres objets
non concernés et surtout au script principal.
*/

//CREATION DES OBJETS

var jeu=new CL_jeu();
var tapis=new CL_tapis();
var combinaison=new CL_combinaison();
var commentaire=new CL_commentaire();

//CHARGEMENT DES IMAGES

var allumette=new Array();
allumette[0]=new Image();
allumette[1]=new Image();
allumette[2]=new Image();
allumette[3]=new Image();
allumette[0].src="posee.gif";
allumette[1].src="montree.gif";
allumette[2].src="choisie.gif";
allumette[3].src="otee.gif";
var visage=new Array();
visage[0]=new Image();
visage[1]=new Image();
visage[2]=new Image();
visage[3]=new Image();
visage[4]=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 PAR LES EVENEMENTS

function initialiser() {
  tapis.initialiser();
  dessiner_pions();
  jeu.initialiser();
  document.visage.src=visage[0].src;
  document.f.commentaire.value=commentaire.debut();
  document.f.bouton_valider.value="VALIDER";
}

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 avertir() {
  if (jeu.etat=="joueur joue"||jeu.etat=="ordinateur joue") {
    alert(commentaire.option());
    if (jeu.niveau=="debutant") document.f.niveau[0].checked=true;
    if (jeu.niveau=="confirme") document.f.niveau[1].checked=true;
    if (jeu.niveau=="expert") document.f.niveau[2].checked=true;
    if (jeu.option==1) document.f.jeu[0].checked=true;
    if (jeu.option==2) document.f.jeu[1].checked=true;
  }
}

function valider() {
  if (jeu.etat=="initial") {
    if (document.f.niveau[0].checked) jeu.niveau="debutant";
    if (document.f.niveau[1].checked) jeu.niveau="confirme";
    if (document.f.niveau[2].checked) jeu.niveau="expert";
    if (document.f.jeu[0].checked) jeu.option=1;
    if (document.f.jeu[1].checked) jeu.option=2;
    if (document.f.commencer[0].checked) joueur_jouer();
    if (document.f.commencer[1].checked) 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));
  }
  else if (jeu.etat=="fini") initialiser();
}

function aider() {
  open("aide.html","aide","toolbar=no,directories=no,menubar=no,scrollbars=yes");
}

function quitter() {
  alert(commentaire.quitter());
  self.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_valider.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_valider.value="RETIRER";
}

function terminer_jeu() {
  if ((jeu.etat=="joueur joue"&&document.f.jeu[1].checked)||(jeu.etat=="ordinateur joue"&&document.f.jeu[0].checked)) {
    document.visage.src=visage[3].src;
    document.f.commentaire.value=commentaire.fin("joueur");
    jeu.gains++;
    document.f.nombre_gains.value=jeu.gains;
  }
  if ((jeu.etat=="joueur joue"&&document.f.jeu[0].checked)||(jeu.etat=="ordinateur joue"&&document.f.jeu[1].checked)) {
    document.visage.src=visage[4].src;
    document.f.commentaire.value=commentaire.fin("ordinateur");
  }
  jeu.etat="fini";
  jeu.parties++;
  document.f.nombre_parties.value=jeu.parties;
  document.f.bouton_valider.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=allumette[0].src;
      if (tapis.rangee[j].pion[k].etat=="montree") document.images[nom].src=allumette[1].src;
      if (tapis.rangee[j].pion[k].etat=="choisie") document.images[nom].src=allumette[2].src;
      if (tapis.rangee[j].pion[k].etat=="otee") document.images[nom].src=allumette[3].src;
    }
  }
}
