/* sqc.js 
   Pions sur quadrillage (Solitaire)
   passer d'une forme à une autre

   idée d'après
   http://www.msri.org/publications/books/Book42/

   (C) 2002-2005 Jean-Paul Davalan jpdvl@wanadoo.fr

   site   http://perso.wanadoo.fr/jean-paul.davalan/index.html
   page   http://perso.wanadoo.fr/jean-paul.davalan/jeux/solitaires/sqc

*/
var Im=new Array();
Im[0]=new Image(); Im[0].src="p0.png";
Im[1]=new Image(); Im[1].src="p1.png";

function mktable(dim) {
  document.write("<center><table border=0 cellspacing=0 cellpadding=0>\n");
  for(var j=dim-1;j>=0;j--) {
    document.write("  <tr>\n    ");
    for(var i=0;i<dim;i++) {
      document.write("<td><a href='javascript:effect("+i+","+j+")'><img border=0 name='p"+i+"_"+j+"' src='p0.png' width=25 height=25 alt=''></a></td>");
    }
    document.write("  </tr>\n");
 }
  document.write("</table></center>\n");
}

function jeu(d) {
  var etat = new Array();
  var dim = d;
  var mode = 0;
  var score=0;
  var xsel, ysel;
  var xm, ym;
  var nmess=0;
  var geom = 0; 
  this.geom = geom;
  this.etat=etat; 
  this.dim=dim;
  this.xsel=xsel;
  this.ysel=ysel;
  this.mode=mode;
  this.score=score;
  
  for(var i=0;i<d;i++) {
    etat[i] = new Array();
  }

  function init() {
    for(var i=0;i<this.dim; i++) {
      for(var j=0;j<this.dim; j++) {
        etat[i][j] = 0
      }
    }
    geom = document.frm.geom.value;
    arrange();
    predef(geom);
    score=0;
    document.frm.score.value=0;
    nmess = nmess+1;
    document.frm.area.value = nmess+"> Réinitialisé "+geom+"\n"+document.frm.area.value;
  }
  this.init = init;

  function arrange() {
    for(var j=0;j<dim; j++) {
      for(var i=0;i<dim; i++) {
        document.images["p"+i+"_"+j].src=Im[etat[i][j]].src;
      }
    }
  }
  this.arrange = arrange;

  function click(i, j) {
    var place = document.frm.rad.checked;
    if(place==true) {
//      alert(i+" "+j+" "+etat[i][j]);
      var u = 1-etat[i][j];
      etat[i][j] = u;
      document.images["p"+i+"_"+j].src=Im[u].src;
      document.frm.score.value=0;
    } else {
      if(etat[i][j] == 1) {
         xsel = i; ysel = j
	 mode=1;
      } else {
        if(mode==1 && licite(i, j) == true) {   
          etat[i][j]=1;
 	  etat[xsel][ysel]=0;
	  document.images["p"+i+"_"+j].src=Im[1].src;
	  document.images["p"+xsel+"_"+ysel].src=Im[0].src;
          mode=0;
 	  score = score+1;
	  document.frm.score.value=score;
	  sol(0);
        }
      }
    }
  }
  this.click=click;

  function licite_b(i,j) {
      var u,  v, adj=0;
      for(u=i-1; u<=i+1; u++) {
        for(v=j-1;v<=j+1;v++) {
	  if(u>=0 && u<dim && v>=0 && v<dim && (u!=i || v!=j) && (u != xsel || v != ysel) && etat[u][v]==1 ) {
	  adj = adj+1;
	  if(adj>=2) return true;
	  }
	}
      }
      
      return false;
      
  }
  this.licite_b = licite_b;
  function licite(i,j) {
      var u,  v, adj=0;
      for(var k=0;k<4;k++) { 
        u = (k%2==0) ? i+k-1 : i;
        v = (k%2==0) ? j : j+k-2;
        if(u>=0 && u<dim && v>=0 && v<dim && (u!=i || v!=j) && (u != xsel || v != ysel) &&
etat[u][v]==1 ) {
          adj = adj+1;
          if(adj>=2) return true;
          
        }
      }
      return false;
  }
  this.licite = licite;
  
  function inv(a, b) {
    var u = 1-etat[a][b];
    etat[a][b] = u;
    document.images["p"+a+"_"+b].src=Im[u].src;
  }
  this.inv = inv;
  
  function predef(n) {
    switch(n) {
      case "0" :
        break;
      case "o" :
      case "O" :
        inv(5,7);inv(6,7);inv(7,7);
	inv(5,6);         inv(7,6);
	inv(5,5);inv(6,5);inv(7,5);
        break;
      case 4 :
      case "h":
      case "H":
        inv(5,8);                   inv(8,8);
        inv(5,7); inv(6,7);inv(7,7);inv(8,7);
	inv(5,6);                   inv(8,6);
        break;
      case 1 :
      case "i" :
      case "I" :
        inv(6,8);inv(7,8);inv(8,8);
                 inv(7,7);
                 inv(7,6);
        inv(6,5);inv(7,5);inv(8,5);
	break;
      case  5 :
      case "c" :
      case "C" :
         inv(6,8);inv(7,8);inv(8,8);
	 inv(6,7);
	 inv(6,6);
	 inv(6,5);inv(7,5);inv(8,5);
	 break;
      case 2:
      case "u" :
      case "U" :
         inv(5,7);                  inv(8,7);
	 inv(5,6);                  inv(8,6);
	 inv(5,5);inv(6,5);inv(7,5);inv(8,5);
         break;
      case 3 :
      case "d" :
      case "D" :
                           inv(6,6);
		  inv(5,5);         inv(7,5);
	 inv(4,4);inv(5,4);inv(6,4);inv(7,4);inv(8,4);
        break;
      case "?" :
                        inv(6,9);inv(7,9);inv(8,9);
			                  inv(8,8);
				 inv(7,7);inv(8,7);
				 inv(7,6);
				 inv(7,4);
         break;
      case "v":
      case "V" :
             inv(3,8);                      inv(10,8);
	         inv(4,7);               inv(9,7);
                     inv(5,6);       inv(8,6);
	                inv(6,5);inv(7,5);
	break;
      case "f":
      case "F":
             inv(5,8);inv(6,8);inv(7,8);
             inv(5,7);
             inv(5,6);inv(6,6);
             inv(5,5);
             inv(5,4);
        break;
      case "i":
      case "I" :
             inv(5,8);inv(6,8);inv(7,8);
                   inv(6,7);
                   inv(6,6);
             inv(5,5);inv(6,5);inv(7,5);
        break;
      case "m" :
      case "M" :
             inv(4,8);inv(5,8);inv(6,8);inv(7,8);
	     inv(4,7);                 inv(7,7);
	     inv(4,6);                 inv(7,6);
         break;
      case "n" :
      case "N" :
             inv(5,9);
	     inv(5,8);inv(6,8);inv(7,8);
	     inv(5,7);        inv(7,7);
	     inv(5,6);        inv(7,6);
        break;
      case "r" :
      case "R" :
             inv(5,9);inv(6,9);
             inv(5,8);        inv(7,8);
             inv(5,7);inv(6,7);
             inv(5,6);        inv(7,6);
        break;
      case "s" :
      case "S" :
             inv(5,9);inv(6,9);
                             inv(7,8);
                      inv(6,7);
             inv(5,6);
                      inv(6,5);inv(7,5);inv(8,5);
        break;
      case "2" :
             inv(5,9);inv(6,9);
                             inv(7,8);
                      inv(6,7);
             inv(5,6);
             inv(5,5);inv(6,5);inv(7,5);
        break;
      case "3" :
             inv(5,9);inv(6,9);
                             inv(7,8);
                      inv(6,7);
                             inv(7,6);
                             inv(7,5);
             inv(5,4);inv(6,4);
        break;

      default :
        break;
	     
    } 
  }
  this.predef = predef;

  function sol(k) {
    var trv=false;
    for(xm = 0; trv == false && xm < dim; xm++) {
      for(ym=0; trv == false && ym<dim; ym++) {
        if(etat[xm][ym]==1) trv=true;
      }
    }
    xm = xm-1;
    ym = ym-1;
    if(k==0)  {
      if( f(0,0)&& f(1,0)&&f(2,0)&&f(0,1)&&f(2,1)&&f(0,2)&&f(1,2)&&f(2,2) == true){
        nmess++;
        document.frm.area.value = nmess+"> forme 0 (cercle) score : "+score+"\n"+document.frm.area.value;
        return true;
      } else return false;
    }
    
  }
  this.sol=sol;
        
  function f(x,y) {
   if (etat[xm+x][ym+y]==1) return true;
   else return false;
  }
  this.f=f;
}


function effect(i, j) {
  G.click(i,j);
}

function alp(c) {
  document.frm.geom.value=c;
  G.init();
}
function efface() {
  document.frm.score.value=0;
}

