// quallen.js, uja Vers.3.3.2006
// 5.3.06: sound-Handle

xmax=6; ymax=6; cmax=4;
zmax=xmax*ymax;

var i,aktiv,zeit,level,punkte,bonus,vorrat;
var timrec1,timrec2,medu_ptr,dx,dy;
var f=new Array();
var medusa=new Array(); for (i=0; i<zmax; i++) medusa[i]=new medu(-1,-1,-1);

// noch fehlende Objekte:
lbonus=new Array(12,10,8,6,10,8,6,8,6,4,8,6,4,6,4,2,6,4,2);
ima=new Array();      for (i=0; i<=cmax; i++) { ima[i]=new Image(); ima[i].src='qualle_'+i+'.gif'; }
leer=new Image();     leer.src='leer.gif';
medupic=new Image();  medupic.src='medusa.gif';
koralpic=new Image(); koralpic.src='koralle.gif';        // stoppt Medusen
roteqpic=new Image(); roteqpic.src='rote_qualle.gif';    // 4er-Qualle, nicht klickbar
algenpic=new Image(); algenpic.src='alge.gif';           // wandelt sich in Q2 um
futterpic=new Image(); futterpic.src='futter.gif';       // +5 Einheiten Vorrat, dannQ4


function mach_spielfeld()
{ var i,j,k=0,t='<table>';
  dx=spritesize; dy=spritesize;
  for (j=0; j<ymax; j++)
  { t=t+'<tr>';
    for (i=0; i<xmax; i++) 
    { t=t+'<td><a href="javascript:klick('+k+')">';
      t=t+'<img src="'+ima[cmax].src+'" width='+dx+' height='+dy+' alt="" name="i'+k+'" border=0>';
      t=t+'<\/a><\/td>';
      k++;
    }
    t=t+'<\/tr>';
  }
  t=t+'<\/table>';
  document.writeln(t);
}

function medu(id,nr,ri) { this.id=id; this.ri=ri; this.posi=nr; }

// =================================================================================================================================

function updat_level(nr)  { document.form1.level.value =nr; }
function updat_punkte(nr) { document.form1.punkte.value=nr; }
function updat_vorrat(nr) { document.form1.vorrat.value=nr; }

function zeige_feld(nr)
{ if (f[nr]==11)       document.images['i'+nr].src=futterpic.src;
  else if (f[nr]==10)  document.images['i'+nr].src=koralpic.src;
  else if (f[nr]==9)   document.images['i'+nr].src=roteqpic.src;
  else if (f[nr]==8)   document.images['i'+nr].src=algenpic.src;
  else if (f[nr]>cmax) document.images['i'+nr].src=ima[cmax].src;
  else if (f[nr]>0)    document.images['i'+nr].src=ima[f[nr]].src;
  else if (f[nr]==0)   document.images['i'+nr].src=leer.src;
  else                 document.images['i'+nr].src=ima[0].src;
}

function belegen()
{ var i,j,k;
  for (i=0; i<zmax; i++) f[i]=i%(cmax+1);                                                            // gleichmäßige Belegung
  for (i=0; i<zmax; i++)  { j=Math.floor(zmax*Math.random())%zmax; k=f[i]; f[i]=f[j]; f[j]=k; }      // mischen
  // Sonderchips:
  if (level>10) for (i=0; i<level; i++) 
  { k=Math.floor(zmax*Math.random())%zmax; 
    j=Math.random();
    if (j<0.33) f[k]=10; else if (j<0.67) f[k]=9; else f[k]=8;
  }
  else if (level>8)  for (i=0; i<level-6; i++) { k=Math.floor(zmax*Math.random())%zmax; f[k]=8; }                    // Alge
  else if (level==8) for (i=0; i<3; i++)       { k=Math.floor(zmax*Math.random())%zmax; f[k]=11; }                   // Futterdose
  else if (level>6) for (i=0; i<level; i++) { k=Math.floor(zmax*Math.random())%zmax; if (Math.random()<0.5) f[k]=10; else f[k]=9; }
  else if (level>4) for (i=0; i<level-2; i++) { k=Math.floor(zmax*Math.random())%zmax; f[k]=10; }                    // koralle
  else if (level>2) for (i=0; i<level-1; i++) { k=Math.floor(zmax*Math.random())%zmax; f[k]=9;  }                    // Feuerqualle
  else for (i=0; i<cmax-level; i++) { k=Math.floor(zmax*Math.random())%zmax; f[k]=cmax; }                            // Starthilfe
}

function neu()
{ level=0;
  punkte=0;
  vorrat=0;
  init_level();
}

function init_level()
{ var i=level;
  if (timrec1) clearTimeout(timrec1);
  if (timrec2) clearTimeout(timrec2);
  if (i>=lbonus.length) i=lbonus.length-1;
  vorrat=vorrat+lbonus[i];
  belegen();
  for (i=0; i<zmax; i++) zeige_feld(i);
  for (i=0; i<medusa.length; i++) medusa[i].id=-1;
  updat_level(level);
  updat_punkte(punkte);
  updat_vorrat(vorrat);
  aktiv=true;
  move_medusen();
}

// ===================================================================================================

function klick(nr)
{ var i,k;
  if (aktiv) 
  { zaund('pop');
    if (f[nr]<=cmax) // nur grüne Quallen und Leerfelder
    { vorrat--; updat_vorrat(vorrat); f[nr]++; zeige_feld(nr);
      if (f[nr]>cmax) { aktiv=false; bonus=1; medu_ptr=0; explo(nr); }
    }
    else if (f[nr]==9) 
    { alert("Du hast eine Feuerqualle berührt!\nIhr Gift ist für Dich tödlich.\nSchätze, das war's für diese Runde!");
      gameover();
    }
  }
}

function explo(nr)
{ setTimeout('zaund("pop")',20);
  f[nr]=0; punkte=punkte+5*bonus; updat_punkte(punkte); bonus++;
  for (var i=0; i<4; i++)  { medusa[medu_ptr]=new medu(medu_ptr,nr,i); medu_ptr++; }
}

function move_medusen()
{ var i,k=-1,moving=false,finito=false;
  for (i=0; i<medusa.length; i++) if (medusa[i].id>=0) with (medusa[i])
  { switch (ri)  // Randcheck
    { case 0: k=posi-xmax; if (k<0)      id=-1; break;
      case 1: k=posi+1;    if (k%xmax<1) id=-1; break;
      case 2: k=posi+xmax; if (k>=zmax)  id=-1; break;
      case 3: k=posi-1;    if (posi%xmax<1) id=-1; break;
      default: id=-1;
    }
    document.images['i'+posi].src=leer.src;
    if (id>=0)
    { moving=true;
      posi=k;
      if (f[posi]==11) { id=-1; f[posi]=4; zeige_feld(posi); vorrat=vorrat+5; updat_vorrat(vorrat); }  // Futterdose: M frisst sich satt
      else if (f[posi]==10)  id=-1;                // Koralle: frisst Medusen
      else if (f[posi]==9) { id=-1; explo(posi); } // rote Qualle platzt
      else if (f[posi]==8) { id=-1; f[posi]=2; zeige_feld(posi); } // Alge, wird zur Qualle Größe 1
      else if (f[posi]>0) { f[posi]++; zeige_feld(posi); id=-1; if (f[posi]>cmax) explo(posi); }
      else document.images['i'+posi].src=medupic.src;
    }
  }
  if (!moving) { aktiv=true; finito=check_ende(); }
  if (!finito) timrec2=setTimeout('move_medusen()',50);
}

function check_ende()
{ var i,fini=false;
  if (aktiv) 
  { fini=true;
    for (i=0; i<zmax; i++) if ((f[i]>0) && (f[i]<=cmax)) fini=false;
    if (fini) { alert('Alle Quallen sind weg!'); aktiv=false; level++; init_level(); }
    else if (vorrat<1) { fini=true; alert('Die Vorräte sind leer!'); gameover(); }
  }
  return fini;
}

function gameover() 
{ aktiv=false; 
  if (timrec1) clearTimeout(timrec1);
  if (timrec2) clearTimeout(timrec2);
  zaund('gameover'); 
  eintrag('form1');
}
// ===========================================================================================================================00

