// JavaScript-Teil von Bomba2
//
// f[i]<9 keine Bombe; f[i]=9 Bombe; f[i]=Bomben in der Nachbarschaft;
// offen[i]=0 zu, nicht markiert; offen[i]=1; markiert; offen[i]=2 geoeffnet;
//
// -- Bildschirmdarstellungen und Kleinteile: ------------------------------------

function hilife(nr) { var hilfswin=window.open("hilife.htm",nr,"width=480,height=64,scrollbars=no,resizable=yes"); }
function hilfe()    { var win2=window.open("mhilfe.htm","MinenHilfe","width=592,height=376,scrollbars=yes,resizable=yes"); }
function getbmax()  { with (document.settings.bombas) var l=options[selectedIndex].value; return l; }

function fensterzu() { window.close(this); }
function vector(nr)     { this.length=nr; for (var i=0; i<nr; i++) this[i]=0; return this; }

function flagge() 
{ flag=(!flag); 
  if (flag) document.images['marke'].src='flag.gif'; 
  else document.images['marke'].src='zu.gif'; 
}

function mark(i)   
{ if (offen[i]==0) document.images[i].src='zu_a.gif'; 
  if (offen[i]==1) document.images[i].src='flag_a.gif';
}
function unmark(i) 
{ if (offen[i]==0) document.images[i].src='zu.gif';
  if (offen[i]==1) document.images[i].src='flag.gif';
}


function restbomben() { document.anzeige.rest.value=reste; }
  

// --- Spielverlauf: ------------------------------------------------------------------------------------------------------

function nachbarn(nr)
{ var i,j,x,y,k;
  x=nr%xmax; y=Math.floor(nr/xmax); k=0;
  for (i=-1; i<2; i++) for (j=-1; j<2; j++) if (((x+i)<xmax) && ((x+i)>=0) && ((y+j)<ymax) && ((y+j)>=0)) 
  if (f[(y+j)*xmax+x+i]==9) k++;
  return k;
}

function marken(nr)
{ var i,j,x,y,k;
  x=nr%xmax; y=Math.floor(nr/xmax); k=0;
  for (i=-1; i<2; i++) for (j=-1; j<2; j++) if (((x+i)<xmax) && ((x+i)>=0) && ((y+j)<ymax) && ((y+j)>=0)) 
  if (offen[(y+j)*xmax+x+i]==1) k++;
  return k;
}





  


function neu()
{ var i,k;
  // xmax=getxmax();
  // ymax=getymax();
  zmax=xmax*ymax;
  bmax=getbmax();
  for (var i=0; i<zmax; i++) { f[i]=0; offen[i]=0; document.images[i].src='zu.gif'; }
  i=0; while (i<bmax) { k=Math.floor(zmax*Math.random()); if (f[k]==0) { f[k]=1; i++; } } 
  for (var i=0; i<zmax; i++) fold[i]=f[i];
  reste=bmax;
  document.anzeige.rest.value=reste;
  flag=true; 
  flagge();
}

function alt()
{ for (var i=0; i<zmax; i++) { f[i]=fold[i]; offen[i]=0; document.images[i].src='zu.gif'; }
  reste=bmax;
  score=-zmax;
  document.anzeige.rest.value=reste;
  document.messi.src='leer.gif';
  flag=true;
  flagge();
}



function zeige(nr)
{ var i,j,k,k1,x,y;
  offen[nr]=2;
  k=-1;
  if (f[nr]>0)  document.images[nr].src='bomba.gif';
  else 
  {  k=0; x=nr%xmax; y=Math.floor(nr/xmax);
     for (i=-1; i<2; i++) for (j=-1; j<2; j++) if (((x+i)<xmax) && ((x+i)>=0) && ((y+j)<ymax) && ((y+j)>=0)) 
     { k1=(y+j)*xmax+x+i; if (f[k1]>0) k++; }
     document.images[nr].src='b'+k+'.gif';
  }
  if (k==0) 
  { for (i=-1; i<2; i++) for (j=-1; j<2; j++) if (((x+i)<xmax) && ((x+i)>=0) && ((y+j)<ymax) && ((y+j)>=0)) 
     { k1=(y+j)*xmax+x+i; auswerten(k1); }
  }
}


function auswerten(nr)
{ var i,j,k,k1,k2,x,y,oldflag;
  if (offen[nr]<2) 
  { if (flag) 
    { if (offen[nr]==0) 
      { offen[nr]=1; document.images[nr].src='flag.gif'; reste--; restbomben(); 
        if (reste==0) enderoutine();
      }
      else { offen[nr]=0; document.images[nr].src='zu.gif'; reste++; restbomben(); }
    }
    else { if (f[nr]>0) bomba(nr); else zeige(nr); }
  }
  else 
  { k1=0; k2=0; x=nr%xmax; y=Math.floor(nr/xmax);
    for (i=-1; i<2; i++) for (j=-1; j<2; j++) if (((x+i)<xmax) && ((x+i)>=0) && ((y+j)<ymax) && ((y+j)>=0)) 
    { k=(y+j)*xmax+x+i; if (f[k]>0) k1++;  if (offen[k]==1) k2++; }
    if (k1==k2)  for (i=-1; i<2; i++) for (j=-1; j<2; j++) if (((x+i)<xmax) && ((x+i)>=0) && ((y+j)<ymax) && ((y+j)>=0)) 
    { k=(y+j)*xmax+x+i; 
      if (offen[k]==0) { oldflag=(flag); flag=true; flagge(); auswerten(k); flag=(!oldflag); flagge(); } 
    }
  }
}


function bomba(nr)
{ for (var i=0; i<zmax; i++) zeige(i);  document.images[nr].src='explo.gif'; hilife(1); }

function enderoutine()
{ var i,k;
  k=0; for (i=0; i<zmax; i++) if ((offen[i]==0) && (f[i]==1)) { k++; bomba(i); }
  if (k==0) hilife(k);
}
 
