var ok = null;
var formCour = null;
var formNext = null;
var cases = new Array();
var formes = new Array();
var niveau = 1;
var point = 0;
var ligne = 0;
var pause = false;
var fin = true;
var coulForme = new Array("#81e7f5","#0eb16c","#404fff","#fcd836","#c681f5","#7ffd29","#ff0000");
formes[0] = new Array(-1,0,-1,1,0,1,0,2,-2,1,-1,1,-1,0,0,0,-1,0,-1,1,0,1,0,2,-2,1,-1,1,-1,0,0,0);
formes[1] = new Array(0,0,0,1,-1,1,-1,2,-2,0,-1,0,-1,1,0,1,0,0,0,1,-1,1,-1,2,-2,0,-1,0,-1,1,0,1);
formes[2] = new Array(-1,1,-1,2,0,1,0,2,-1,1,-1,2,0,1,0,2,-1,1,-1,2,0,1,0,2,-1,1,-1,2,0,1,0,2);
formes[3] = new Array(0,2,0,1,0,0,-1,0,0,1,-1,1,-2,1,-2,2,-1,0,-1,1,-1,2,0,2,-2,1,-1,1,0,1,0,0);
formes[4] = new Array(0,0,0,1,0,2,-1,2,-2,1,-1,1,0,1,0,2,-1,2,-1,1,-1,0,0,0,0,1,-1,1,-2,1,-2,0);
formes[5] = new Array(0,0,0,1,0,2,0,3,-3,1,-2,1,-1,1,0,1,0,0,0,1,0,2,0,3,-3,1,-2,1,-1,1,0,1);
formes[6] = new Array(-1,0,-1,1,-1,2,0,1,-2,1,-1,1,0,1,-1,0,0,2,0,1,0,0,-1,1,0,0,-1,0,-2,0,-1,1);
var tailleCase = 15;
var nbCaseX = 12;
var nbCaseY = 22;
var taille = tailleCase + (document.all?0:-2);
var rebord = (document.all)?0:2;
var posx,posy;
var formCour, formSuiv;
function cube(y,x,py,px,coul)
{
this.el = document.createElement("div");
this.el.style.position = "absolute";
this.el.style.top = ((taille+rebord)*(y+py))+"px";
this.el.style.left = ((taille+rebord)*(x+px))+"px";
this.el.style.display = (y+py>=0)?"block":"none";
this.el.style.width = taille+"px";
this.el.style.height = taille+"px";
this.el.style.backgroundColor = coul;
this.el.style.border="1px black solid";
this.el.style.fontSize = "0px";
}
function forme(no,py,px,leDiv)
{
var i,j;
this.cubes = new Array();
this.rotation = 0;
this.no = no;
for (i =0, j=0;i<8;i = i+2,j++)
{
this.cubes[j] = new cube(formes[no][i],formes[no][i+1],py,px,coulForme[no])
leDiv.appendChild(this.cubes[j].el);
}
}
function deplacerForme(nbY, nbX, plusRotation,py,px)
{
var i,j,x,y,rotation;
rotation = (formCour.rotation + plusRotation);
rotation = rotation<0?3:rotation>3?0:rotation;
for (i =rotation*8,j=0;i<(rotation*8)+8;i = i+2,j++)
{
y = formes[formCour.no][i] + py + nbY;
x = formes[formCour.no][i+1] + px + nbX;
if (x==-1 || y==nbCaseY || x==nbCaseX || (cases[y] && cases[y][x]!=null)) return false;
}
formCour.rotation = rotation;
py = py + nbY;
px = px + nbX;
for (i =rotation*8,j=0;i<(rotation*8)+8;i = i+2,j++)
{
y = (formes[formCour.no][i] + py);
formCour.cubes[j].el.style.display = (y>=0)?"block":"none";
formCour.cubes[j].el.style.top = ((taille+rebord) * y)+"px";
formCour.cubes[j].el.style.left = ((taille+rebord) * (formes[formCour.no][i+1] + px))+"px";
}
return true;
}
function initialiserJeux()
{
var tbl,tb,cols,rows,row,col;
bord = document.getElementById("jeux");
prochain = document.getElementById("next");
bord.style.width = tailleCase * nbCaseX;
bord.style.height = tailleCase * nbCaseY;
bord.style.backgroundColor = "#8f8f8f";
tbl = document.createElement("table");
tb= document.createElement("tbody");
tbl.appendChild(tb);
tbl.cellSpacing="0";
tbl.cellPadding="0";
tbl.width = tailleCase * nbCaseX;
tbl.height = tailleCase * nbCaseY;
for (rows=0;rows<nbCaseY;rows++)
{
row = document.createElement("TR");
for (cols=0;cols<nbCaseX;cols++)
{
col = document.createElement("td");
col.className="caseTB";
col.innerHTML="&nbsp;";
row.appendChild(col);
}
tbl.lastChild.appendChild(row);
}
bord.appendChild(tbl);
document.key.down.focus();
document.key.down.onkeydown = verifierActionJoueur;
}
function nouvellePartie()
{
var i;
initCases();
if (formCour && !fin)
{
for (i=0; i<4;i++)
bord.removeChild(formCour.cubes[i].el);
}
posx = ((nbCaseX / 2)-2);
posy = -1;
vitesse = 650;
niveau = 1;
point = 0;
ligne = 0;
fin = false;
formNext =new forme( Math.floor(Math.random()*formes.length),1,0,prochain);
formCour =new forme( Math.floor(Math.random()*formes.length),posy,posx,bord);
pts = setInterval("majPointage()",1000);
setTimeout("partieEnCour()",vitesse);
}
function partieEnCour()
{
var x,y,i,cols;
if (!deplacerForme(1,0,0,posy,posx))
{
point = point + niveau;
var Y = new Array();
for (i =formCour.rotation*8,j=0;i<(formCour.rotation*8)+8;i = i+2,j++)
{
prochain.removeChild(formNext.cubes[j].el);
y = formes[formCour.no][i] + posy;
Y[Y.length] = y;
x = formes[formCour.no][i+1] + posx;
if (y>=0)
{
cases[y][x] = formCour.cubes[j].el;
}
}
Y.sort();
for (i=0;i<Y.length;i++)
{
if (i==0 || ( i>0 && Y[i]!=Y[i-1]))
{
for (cols=0;cols<nbCaseX;cols++)
if (cases[Y[i]] && cases[Y[i]][cols]==null) break;
if (cols==nbCaseX) enleverLignePleine(Y[i]);
}
}
if (posy==-1)
{
fin = true;
clearTimeout(ok);
clearInterval(pts);
majPointage();
document.main.start.value = "COMMENCER";
alert("Partie Terminée!!!");
return;
}
posx = ((nbCaseX / 2)-2);
posy = -1;
formCour = new forme(formNext.no,posy,posx,bord);
formNext = new forme( Math.floor(Math.random()*formes.length),1,0,prochain);
}
else
{
posy++;
}
ok = setTimeout("partieEnCour()",vitesse);
}
function enleverLignePleine(y)
{
ligne++;
point = point + 100;
niveau = Math.floor(ligne/5)+1;
vitesse = 700 - (niveau * 65)
var rows,cols;
for (rows=y;rows>=0;rows--)
for (cols=0;cols<nbCaseX;cols++)
{
if (rows!=y)
{
if (cases[rows][cols]!=null)
cases[rows][cols].style.top = (cases[rows][cols].offsetTop + taille + rebord)+"px";
cases[rows+1][cols] = cases[rows][cols];
cases[rows][cols]= null;
}
else
bord.removeChild(cases[rows][cols]);
}
}
function initCases()
{
var rows,cols;
for (rows=0;rows<nbCaseY;rows++)
{
if (!cases[rows]) cases[rows] = new Array();
for (cols=0;cols<nbCaseX;cols++)
{
if (cases[rows][cols])
bord.removeChild(cases[rows][cols]);
cases[rows][cols] = null;
}
}
}
function verifierActionJoueur(ev)
{
if (pause) return;
var keyPress = document.all?event.keyCode:ev.which;
if (keyPress == 37)
if (deplacerForme(0,-1,0,posy,posx)) posx--;
if (keyPress == 39)
if(deplacerForme(0,1,0,posy,posx)) posx++;
if (keyPress == 38) deplacerForme(0,0,-1,posy,posx)
if (keyPress == 40) deplacerForme(0,0,1,posy,posx)
if (keyPress == 32) {while(deplacerForme(1,0,0,posy,posx)){posy++;point = point + niveau;}}
}
function majPointage()
{
document.main.points.value = point;
document.main.niveaux.value = niveau;
document.main.lignes.value = ligne;
}
function topElement(e)
{
return ((e && topElement != topElement.caller)?e.offsetTop:0) + ((e && e.offsetParent)?e.offsetParent.offsetTop + topElement(e.offsetParent):0);
}
function leftElement(e)
{
return ((e && leftElement != leftElement.caller)?e.offsetLeft:0) + ((e && e.offsetParent)?e.offsetParent.offsetLeft + leftElement(e.offsetParent):0);
}
function help()
{
var h = document.getElementById("aide");
var j = document.getElementById("posJeux");
h.style.top = topElement(j)
h.style.left = leftElement(j)
if (!pause && !fin) document.main.start.onclick();
h.style.display = "block"
}

