
// Pisolo ringrazia Carlo "Sauron" Pelliccia, http://members.tripod.it/sauronsw

var nr = 15; // numero delle righe
var nc = 15; // numero delle colonne
var nm = 40; // numero delle mine

function Mina(mi,mj) {
  this.i = mi;
  this.j = mj;
}

// Posizionamento delle mine;
var cm = nm;
var sc = 0;
var ListaMine = new Array();
for (c=0;c<nm;c++) {
  do {
    var ai = Math.floor(Math.random() * nr);
    var aj = Math.floor(Math.random() * nc);
    var ctr = false;
    for (d=0;d<ListaMine.length;d++)
      if (ListaMine[d].i==ai && ListaMine[d].j==aj) ctr = true;
  } while (ctr);  
  ListaMine[c] = new Mina(ai,aj);
}

// Creazione griglia e status
var griglia = new Array(nr);
for (c=0;c<nr;c++) griglia[c] = new Array(nc);
var status = new Array(nr);
for (c=0;c<nr;c++) {
  status[c] = new Array(nc);
}

// Riempimento dello status
for (i=0;i<nr;i++)
  for (j=0;j<nc;j++)
    status[i][j] = 0;
    // -1 -> casella marcata come mina
    //  0 -> casella coperta
    //  1 -> casella scoperta

// Riempimento della griglia con mine
for (c=0;c<nm;c++)
  griglia[ListaMine[c].i][ListaMine[c].j] = -1;    

// Riempimento delle altre caselle
for (i=0;i<nr;i++)
  for (j=0;j<nc;j++)
    if (griglia[i][j]!=-1) {
      var conto = 0;
      if (i>0 && j>0) if (griglia[i-1][j-1]==-1) conto++;
      if (i>0) if (griglia[i-1][j]==-1) conto++;
      if (i>0 && j<nc-1) if (griglia[i-1][j+1]==-1) conto++;
      if (j>0) if (griglia[i][j-1]==-1) conto++;
      if (j<nc-1) if (griglia[i][j+1]==-1) conto++;
      if (i<nr-1 && j>0) if (griglia[i+1][j-1]==-1) conto++;
      if (i<nr-1) if (griglia[i+1][j]==-1) conto++;
      if (i<nr-1 && j<nc-1) if (griglia[i+1][j+1]==-1) conto++;
      griglia[i][j] = conto;
    }

// Incremento del tempo
var secondi = 0;
function scorri() {
  secondi++;
  document.console.tempo.value = secondi;
  if (!stop) var id = setTimeout("scorri()",1000);
}

// Funzione di utilità interna
function esiste(x,y) {
  return (x>-1 && y>-1 && x<nr && y<nc);
}

// Funzione di controllo su caselle da intorni vuoti
function pulisci() {
  var nuovo = false;
  for (i=0;i<nr;i++)
    for (j=0;j<nc;j++) 
      if (griglia[i][j]==0 && status[i][j]==1) {
        for (q=i-1;q<i+2;q++)
          for (w=j-1;w<j+2;w++)
            if (esiste(q,w) && status[q][w]==0) {
              status[q][w] = 1;
              sc++;
              document.images[(q * nc) + w].src = "cm_" + griglia[q][w] + ".gif";
              nuovo = true;
            }
      }
  if (nuovo) pulisci();
}

// Funzione vedi, attivata ad ogni clic su una casella
function vedi(vi,vj) {
  if (stop) return;
  if (!go) {
    go = true;
    scorri();
  }
  var stat = status[vi][vj];
  var number = (vi * nc) + vj;
  if (stat==1) return;
  if (stat==0) {
    status[vi][vj] = -1;
    document.images[number].src = "cm_b.gif";
    if (cm>0) cm--;
    document.console.mine.value = cm;
  }
  if (stat==-1) {
    status[vi][vj] = 1;
    cm++;
    sc++;
    document.console.mine.value = cm;
    var nome = "cm_" + griglia[vi][vj] + ".gif";
    if (nome!="cm_-1.gif") document.images[number].src = nome;
    else {
      for (i=0;i<nr;i++)
        for (j=0;j<nc;j++) {
          if (griglia[i][j]==-1) document.images[(i * nc) + j].src = "cm_m.gif";
          if (status[i][j]==-1 && griglia[i][j]!=-1) document.images[(i * nc) + j].src = "cm_x.gif";
        }
      alert("Hai perso!");
      stop = true;
    }
    if (nome=="cm_0.gif") pulisci();
  }
  if (sc==((nr*nc)-nm)) {
    stop = true;
    alert("Complimenti, hai vinto!"); 
  }
}


// Creazione dell'interfaccia
var code = "";
code += "<TABLE BORDER=3 CELLSPACING=0 CELLPADDING=0><TR><TD><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>";
for (i=0;i<nr;i++) {
  code += "<TR>";
  for (j=0;j<nc;j++) {
    code += "<TD ALIGN='center'>";
    code += '<A HREF="javascript:vedi(' + i + ',' + j + ')" ONMOUSEDOWN="document.console.bott.value=\'^¿^\'" ONMOUSEUP="document.console.bott.value=\'^_^\'">';
    code += '<IMG SRC="cm_c.gif" BORDER="0" WIDTH="15" HEIGHT="15" ALIGN="BOTTOM">';
    code += "</A>";
    code += "</TD>";
  }
  code += "</TR>";
}
code += "</TABLE></TD></TR></TABLE>";

code += "<BR><BR>";
code += "<FORM NAME='console'>";
code += "<INPUT TYPE='text' NAME='mine' SIZE='5'>  ";
code += "<INPUT TYPE='button' NAME='bott' ONCLICK='location.reload()' VALUE='^_^'>  ";
code += "<INPUT TYPE='text' NAME='tempo' SIZE='5'>";
code += "</FORM>";


document.write(code);
document.console.mine.value = cm;

//inizializzazioni
var go = false;
var stop = false;
