max=50;
i_off=1;
xmax=10; ymax=8; var zmax=xmax*ymax; var ncolors=5; var schub=3;
var liste=new Array(zmax);
var f=new Array(zmax);
var g=new Array(schub);
var i;
var aktiv=false;
var gewaehlt=0;
var punkte=0;
var kmax=5; // ab 5 wird gezaehlt

//--- Bilder vorladen:
var ima=new Array(); for (i=0; i<=ncolors; i++) { ima[i]=new Image(); ima[i].src='r'+i+'.gif'; }
var ima_a=new Array(); for (i=0; i<=ncolors; i++) { ima_a[i]=new Image(); ima_a[i].src='r'+i+'_a.gif'; }
 
// -------------------------------------------------------------------------------------------------------------------
function hilfe() { var win2=window.open("hilfe.htm","Hilfe"); }
function hilite(nr) { document.images['Chip'+nr].src=ima_a[f[nr]].src; }
function normal(nr) { document.images['Chip'+nr].src=ima[f[nr]].src; }
function loesche(nr) { document.images['Chip'+nr].src=ima[0].src; }
function zeigenext() { document.punkt1.src=ima[g[0]].src; document.punkt2.src=ima[g[1]].src; document.punkt3.src=ima[g[2]].src;}
function zeigepunkte(nr) { document.anzeige.wertung.value=nr; }

function redraw() { for (var i=0; i<zmax; i++) normal(i); }

function enderoutine()
{ document.form1.blabla.value='Rien ne va plus!';
  document.form1.punkte.value=punkte;
  eintrag('form1'); 
}

function tabellenbau(xmax,ymax)
{ var k=0; var temp;
  document.writeln('<table border=1 cellpadding=2 cellspacing=0>');
  var k=0;
  for (var j=0; j<ymax; j++) 
  { document.writeln('<tr>');
    for (var i=0; i<xmax; i++)
    { temp='Chip'+k;
      document.write('<td width=24 height=24 align=center valign=center>');
      document.write('<a href="javascript:if (aktiv) auswerten('+k+')">');
      document.write('<img src="leer.gif" width=24 height=24 border=0 alt="'+temp+'" name="'+temp+'">');
      document.writeln('</a></td>');
      f[k]=0;
      k++;
    } 
    document.writeln('</tr>');
  } 
  document.writeln('</table>');
}


function neu()
{ var i,j,k;
  for (i=0; i<zmax; i++) { f[i]=0; normal(i); }
  for (i=0; i<3; i++)
  { k=Math.floor(ncolors*Math.random())+1;
    g[i]=k;
  }
  zeigenext();
  nextwurf();
  gewaehlt=-1;
  punkte=0;
  zeigepunkte(punkte);
  aktiv=true;
  document.form1.blabla.value='Denn mann tau!';
}


function pfadfrei(von,nach)
{ var i,j,k;
  listefuellen(von);
  k=0;
  for (i=1; i<=liste[0]; i++) if (liste[i]==nach) k=i;
  return (k>0);
}


function nextwurf()
{ var i,j,k,l;
  for (i=0; i<schub; i++)
  { k=0; for (j=0; j<zmax; j++) if (f[j]==0) k++;
    if (k>0)
    { do j=Math.floor(zmax*Math.random()); while (f[j]>0);
      f[j]=g[i]; 
      normal(j);
      abraeumen(j);
    }
  }
  
  k=0; for (j=0; j<zmax; j++) if (f[j]==0) k++;
  if (k>0)
  { for (i=0; i<3; i++)
    { k=Math.floor(ncolors*Math.random())+1;
      g[i]=k;
    }
    zeigenext();
  }
  else 
  { for (i=0; i<3; i++) g[i]=0;
    zeigenext();
    enderoutine();
  }
}


function auswerten(nr)
{ if (aktiv)
 { aktiv=false;
  var i,j,k;
  if (f[nr]>0) 
  { if (gewaehlt>-1) normal(gewaehlt); 
    gewaehlt=nr; hilite(nr); 
  } 
  else if (gewaehlt>-1) 
  { if (pfadfrei(gewaehlt,nr)>0)
    { f[nr]=f[gewaehlt];
      f[gewaehlt]=0;
      loesche(gewaehlt);
      normal(nr);
      if (abraeumen(nr)<1) nextwurf();
      gewaehlt=-1;
    } 
    else alert('Da kann ich nicht hin!');
  }
 aktiv=true;
}
}


function listeloeschen()
{ if (liste[0]>0) for (var i=1; i<=liste[0]; i++) 
  { f[liste[i]]=0; 
    loesche(liste[i]);  
  }
  liste[0]=0;
}

function kassieren(anzahl)
{ var i; 
  var j=0;
  if (anzahl>=kmax) { for (i=kmax; i<=anzahl; i++) if (i<2*kmax) j=j+kmax; else j=j+100; } 
  return j;
}


function abraeumen(nr)
{ var i,x,y,z;
  var anzahl=0;
  var farbe=f[nr];

// horizontal:
  liste[0]=0; x=nr%xmax; y=(nr-x)/xmax; 
  do { x=x-1; z=0; if (x>=0) if (f[y*xmax+x]==farbe) z=1; } while (z>0); // linker Rand
  do { x=x+1; z=0; if (x<xmax) if (f[y*xmax+x]==farbe) { liste[0]++; liste[liste[0]]=y*xmax+x; z=1; } } while (z>0);
  if (liste[0]>=kmax) { anzahl=anzahl+liste[0]; listeloeschen(); }
  f[nr]=farbe;

// vertikal:
  liste[0]=0; x=nr%xmax; y=(nr-x)/xmax; 
  do { y=y-1; z=0; if (y>=0) if (f[y*xmax+x]==farbe) z=1; } while (z>0);
  do { y=y+1; z=0; if (y<ymax) if (f[y*xmax+x]==farbe) { liste[0]++; liste[liste[0]]=y*xmax+x; z=1; } } while (z>0);
  if (liste[0]>=kmax) { anzahl=anzahl+liste[0]; listeloeschen(); }
  f[nr]=farbe;

// diagonal1:
  liste[0]=0; x=nr%xmax; y=(nr-x)/xmax;
  do { y=y-1; x=x-1; z=0; if ((y>=0) && (x>=0)) if (f[y*xmax+x]==farbe) z=1; } while (z>0);
  do { y=y+1; x=x+1; z=0; if ((y<ymax) && (x<xmax)) if (f[y*xmax+x]==farbe) { liste[0]++; liste[liste[0]]=y*xmax+x; z=1; } } while (z>0);
  if (liste[0]>=kmax) { anzahl=anzahl+liste[0]; listeloeschen(); }
  f[nr]=farbe;

// diagonal2:
  liste[0]=0; x=nr%xmax; y=(nr-x)/xmax;
  do { y=y+1; x=x-1; z=0; if ((y<ymax) && (x>=0)) if (f[y*xmax+x]==farbe) z=1; } while (z>0);
  do { y=y-1; x=x+1; z=0; if ((y>=0) && (x<xmax)) if (f[y*xmax+x]==farbe) { liste[0]++; liste[liste[0]]=y*xmax+x; z=1; } } while (z>0);
  if (liste[0]>=kmax) { anzahl=anzahl+liste[0]; listeloeschen();  }

  if (anzahl>0) 
  { f[liste[1]]=0; 
    loesche(liste[1]);   
    punkte=punkte+kassieren(anzahl);
    zeigepunkte(punkte);
    f[nr]=0;
    liste[0]=0;
  }
  return anzahl; 
}



// --- (Rekursions-)Routinen fuer zu uebernehmende Liste: --------------------------------------------------------------

function inliste(nr)
// checkt, ob ein Element bereits in der Liste enthalten ist, liste[i] ist global
{ var i=0; var drin=false;
  while ((!drin) && (i<liste[0])) { i++; drin=(liste[i]==nr); }
  return drin;
}

function nachbar(z)
// sammelt Nachbarn mit Inhalt0:
{ var i,x;
  x=z%xmax;
  i=z-1;    if (x>0)        if (f[i]==0) if (!inliste(i)) { liste[0]++; liste[liste[0]]=i; }
  i=z+1;    if (x<(xmax-1)) if (f[i]==0) if (!inliste(i)) { liste[0]++; liste[liste[0]]=i; }
  i=z-xmax; if (i>=0)       if (f[i]==0) if (!inliste(i)) { liste[0]++; liste[liste[0]]=i; }
  i=z+xmax; if (i<zmax)     if (f[i]==0) if (!inliste(i)) { liste[0]++; liste[liste[0]]=i; }
}

function listefuellen(nr)
// sammenl noch nicht gecheckte Elemente (von index bis lmax), Abbruch, wenn index>lmax }
{ var i,index,lmax;
  liste[0]=1;
  liste[1]=nr;
  index=1;
  while (index<=liste[0]) { lmax=liste[0]; for (i=index; i<=lmax; i++) nachbar(liste[i]); index=lmax+1; }
}

// -------------------------------------------------------------------------------------------------------------------




