/* Fibonacci nim game
   fib.js
   Copyright (C) 2002-2005 Jean-Paul Davalan <jpdvl@wanadoo.fr>
   
   
*/

var Im=new Array(),ncols=10,nligs=5,maxi=ncols*nligs,bleu=maxi,pales=bleu,pions=maxi,alloues;
var nparties=0, npartiesg=0;
var commt="";
Im[0]=new Image();Im[0].src="qa.png";
Im[1]=new Image();Im[1].src="qb.png";
Im[2]=new Image();Im[2].src="qc.png";
var tb = new Array(), ordijoue=0;

var gfib = new Array(0,-1,-1,-1,1,-1,1,2,-1,1,   2,3,1,-1,1,2,3,1,5,1,   2,-1,1,2,3,1,5,1,2,8,   1,2,3,1,-1,1,2,3,1,5,  1,2,8,1,2,3,1,13,1,2,3,1,5,1,2,-1,1,2,3,1,5,1,2,8,1,2,3,1,13,1,2,3,1,5,1,2,21,1,2,3,1,5,1,2,8,1,2,3,1,-1,1,2,3,1,5,1,2,8,1,2,3,1,13,1,2,3,1,5,1,2,21,1,2,3,1,5,1,2,8,1,2,3,1,34,1,2,3,1,5,1,2,8,1,2,3,1,13,1,2,3,1,5,1,2,-1,1,2,3,1,5,1);

function wtable() {
var u;
document.writeln("<center>");
document.writeln("<table border=0 cellspacing=0 cellpadding=0>");
for(var i=nligs-1;i>=0;i--) {
document.writeln("<tr>");
for(var j=0; j<ncols; j++) {
if(i%2==0) u=i*ncols+j;
else u=i*ncols + ncols-j-1;
document.writeln("<td align=\"center\"><div class=game onmousedown=\"javascript:joue()\" " +
  "onmouseover=\"this.style.cursor='crosshair';pselect("+u+")\" " + 
  "onmouseout=\"this.style.cursor='default';\">" +
  "<img name=\"k"+u+"\" border=0 width=\"50\" height=\"50\" alt=\"\"></div></td>");
}
document.writeln("</tr>");
}
document.writeln("</table>\n" +
  "</center>\n<br /><br />\n" +
  "<center>\n" +
  "<table border=0 cellspacing=0 cellpadding=0>\n<tr>\n" +
  "<td align=\"center\">\n" +
  "<font size=\"-1\"><b>Parties&nbsp;jou&eacute;es</b>&nbsp;:&nbsp;</font>"+
  "<input type=\"text\" name=\"npart\" size=\"3\" value=\"0\"></td>\n" +
  "<td align=\"center\">\n"+
  "<font size=\"-1\"><b>&nbsp;&nbsp;Parties&nbsp;gagn&eacute;es</b>&nbsp;:&nbsp;</font>" +
  "<input type=\"text\" name=\"npartg\" size=\"3\" value=\"0\"></td>\n" +
  "</tr></table>\n" +
  "</center><br />");
}
function gram(x) {
  var s = "";
  if(x==1) s= "1 pion";
  else s = x+ " pions";
  return s;
}

function commence() {
var k, s="";
//document.frm.infos.value="";
document.getElementById("ici").innerHTML="";

 npions = Math.round(ncols+(maxi-ncols)*Math.random());
 pions = npions; bleu=pions; pales=pions; alloues=npions-1; trace(npions,npions);
 //document.frm.infos.value="Vous pouvez retirer "+ gram(alloues)+" parmi les "+pions;
	document.getElementById("ici").innerHTML="Vous pouvez retirer jusqu'&agrave; "+ gram(alloues)+" parmi les "+pions+"<br />"+
	"(s&eacute;lectionnez-les et cliquez)<br />"
}

function pselect(x) {
var v=x, u = pions-alloues;
if(v>pions) v=pions;
if(u>v) v=u;
trace(v,pions); bleu=v;
}

function aide() {
  var s="", u;
  if(pions==0) {
    s = "Commencez d'abord une nouvelle partie\n"+"<br />";
  } else {
    u = gfib[pions];
    if(u==-1)  s = pions +" est un nombre de Fibonacci\n"+"<br />";
    if(alloues>=pions) { 
      s += "Retirez tous les pions\n"+"<br />";
    } else { 
      if(u==-1 || u>alloues) s += "Vous ne pouvez pas gagner, retirez "+ gram(alloues)+ " au plus\n"+"<br />";
      else s="Je vous sugg&egrave;re de retirer "+ gram(u)+"\n"+"<br />";
    }
  }
  //document.frm.infos.value= s;
	document.getElementById("ici").innerHTML=s+"<br />";
}

function trace(x,y) {
  var i;
  if(y<x)y=x;
  for(i=0;i<x;i++) document.images["k"+i].src=Im[1].src;
  for(i=x;i<y;i++) document.images["k"+i].src=Im[2].src;
  for(i=y;i<maxi;i++) document.images["k"+i].src=Im[0].src;
}
function joue() {
 if(pions-bleu < 1) bleu=pions-1;
 if(pions-bleu > alloues) bleu = pions-alloues;
 var commt = "";
 commt = "Vous avez retir&eacute; " + gram(pions - bleu) + ", il en reste " + bleu + "\n"+"<br /><br />";
 alloues=2*(pions-bleu); pions=bleu; trace(bleu,bleu);
 if(bleu==0) {
 commt += "F&Eacute;LICITATIONS<br /><br />Vous avez gagn&eacute;.<br />\n"; 
 //document.frm.infos.value= commt;
 document.getElementById("ici").innerHTML="<br />"+commt+"<br />";
 nparties++; npartiesg++; 
 document.frm.npart.value= nparties; document.frm.npartg.value= npartiesg;
 } else {
   if(alloues>=bleu) {
     commt += "L\'ordinateur peut prendre jusqu'&agrave; "+ gram(alloues) +" parmi "+ bleu +"\n"+"<br />";
     commt += "L\'ordinateur retire tous les pions\n"+"<br />";
     t=bleu; bleu =0; pions=bleu; trace(bleu,bleu);
     commt += "<br />Vous semblez avoir perdu\n"+"<br /><br />"+"Vous pourrez vous rattraper &agrave; la prochaine partie.<br /> Pensez &agrave; utiliser l'aide propos&eacute;e ou &agrave; lire ces <a href=\"#EXPL\">explications sur le jeu</a>.<br />" 
	//document.frm.infos.value= commt;
	if(commt)
	document.getElementById("ici").innerHTML="<br />"+commt+"<br />";
     nparties++; document.frm.npart.value= nparties; document.frm.npartg.value= npartiesg;
   } else {
     t=gfib[bleu];
     if(t==-1 || t>alloues) { //t=1;
       var m =Math.floor(pions/3)
       t = Math.floor(alloues*Math.random())+1;
       if(m<t && m>0) t=m
     }
     commt += "L\'ordinateur retire "+ gram(t) +"\n"+"<br />";
     bleu -= t; alloues = 2*t; pions=bleu; trace(bleu,bleu);
     commt += "Vous pouvez retirer jusqu'&agrave; " + gram(alloues) + " parmi les " + pions + "\n";
     //document.frm.infos.value= commt;
	document.getElementById("ici").innerHTML=commt+"<br />";
   }
 }
}


