Crea el "Famoso" juego de el TETRIS

Asi va a quedar des pues de terminarlo

Obviamente que les dejaré los códigos...

Lo primero lo que haremos es crear un Archivo CSS y lo guardan con el nombre que quieran.

1°) Abrimos el BLOC DE NOTAS

2°) y copiamos este código:

body{ BACKGROUND: black; MARGIN: 0px }

td { WIDTH: 20px; HEIGHT: 20px }

#block_div { Z-INDEX: 1; WIDTH: 80px; POSITION: absolute }

#table_div { WIDTH: 320px; POSITION: absolute }

#nblock_div { Z-INDEX: 2; FONT: 48px system; COLOR: red; POSITION: absolute } #title_div { FONT-SIZE: 22px; LEFT: 326px; COLOR: white; POSITION: absolute; TOP: 7px}

#infobar_div { LEFT: 396px; POSITION: absolute; TOP: 416px}

#infobar2_div { FONT-SIZE: 14px; LEFT: 396px; COLOR: white; POSITION: absolute; TOP: 480px }

#infobar2_div A { COLOR: #99ccff; TEXT-DECORATION: none }


ahora en vamos a crear un archivo HTML y le dan un nombre "ejemplo: Index.html o tetris.html"

3°) Abrimos otro BLOC DE NOTAS.

4°) y copiamos este código:

<html>
<title>Tetris</title>
<link rel="stylesheet" href="Aca va el primer archivo que creamos CSS" type="text/css">
<head>
<SCRIPT language=javascript id=clientEventHandlersJS>
<!--
/*
Juego Tetris  by The Hacker 2013 (http://www.taringa.net/themastercard)
visita mi pagina http://themastercar3d.jimdo.com
*/

if (document.all){
var n_width = 800;
var n_height = 600;
var n_left = Math.round( screen.width/2 ) - n_width/2;
var n_top = Math.round( screen.height/2 ) - n_height/2;
var n_IncStep = 20;
var curBlcok,nextBlock;
var arr_curBlock = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
var curX,curY;
var speed=1;
var maxspeed=9;
var clr_per_line=18;
var pause=0;
var gameover=0;
                       /*Esto corresponde a los colores de las piezas*/
var colors = new Array("red","green","yellow","chocolate","darkred","coral","salmon","cyan"
                                /*Fin de los colores*/
);
var cid;
var ncid;
                        /*Esto corresponde a las formas de las piezas*/
var blocks = new Array("tt_O1","tt_T2","tt_Z1","tt_S1","tt_L1","tt_J1","tt_I2");
                                  /*Fin de las formas*/
var bid;
var killedlines=0;

var tt_O1 = new Array(0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0);
var tt_O2 = new Array(0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0);
var tt_O3 = new Array(0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0);
var tt_O4 = new Array(0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0);

var tt_T1 = new Array(0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0);
var tt_T2 = new Array(0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0);
var tt_T3 = new Array(0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0);
var tt_T4 = new Array(0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0);

var tt_Z1 = new Array(0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0);
var tt_Z2 = new Array(0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0);
var tt_Z3 = new Array(0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0);
var tt_Z4 = new Array(0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0);

var tt_S1 = new Array(0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0);
var tt_S2 = new Array(0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0);
var tt_S3 = new Array(0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0);
var tt_S4 = new Array(0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0);

var tt_L1 = new Array(0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0);
var tt_L2 = new Array(0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0);
var tt_L3 = new Array(0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0);
var tt_L4 = new Array(0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0);

var tt_J1 = new Array(0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0);
var tt_J2 = new Array(0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0);
var tt_J3 = new Array(0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0);
var tt_J4 = new Array(0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0);

var tt_I1 = new Array(0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0);
var tt_I2 = new Array(0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1);
var tt_I3 = new Array(0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0);
var tt_I4 = new Array(0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1);

var table = new Array( /*Esto va a ser el contenedor del juego el "0 representa el vacio" y el "1 representa las paredes"*/
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
        1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
                1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)

}
else
alert("Usted necesita Internet Explorer 4+ para jugar al TETRIS!")/*Este es el mesaje para que use un explorador APTO*/

function dimension2(row,col,num){
    var i = row * num + col;
    return (this[i]);
}
Array.prototype.getd = dimension2;

function ShowBlock(x,y,block_type,color){
    for (var i=0;i<block_tbl.rows.length;i++){
        for (var j=0;j<block_tbl.rows(i).cells.length;j++){        
            var d2 = i * 4 + j;
            if (block_type[d2]==1){
                block_tbl.rows(i).cells(j).style.background = color;
            }
            else{
                block_tbl.rows(i).cells(j).style.background = "";
            }
        }
    }
    block_div.style.pixelLeft=x;
    block_div.style.pixelTop=y;
}

function ShowBlock1(x,y,block_type,color,obj_tabID,obj_divID){
    for (var i=0;i<obj_tabID.rows.length;i++){
        for (var j=0;j<obj_tabID.rows(i).cells.length;j++){        
            var d2 = i * 4 + j;
            if (block_type[d2]==1){
                obj_tabID.rows(i).cells(j).style.background = color;
            }
            else{
                obj_tabID.rows(i).cells(j).style.background = "";
            }
        }
    }
    obj_divID.style.pixelLeft=x;
    obj_divID.style.pixelTop=y;
}

function Change(inc){
    var type = curBlock.substr(0,4);
    var num = curBlock.substr(curBlock.length-1);
    num = parseInt(num) + inc;
    if (num>4||num<1) num -= 4*inc;
    type += num;
    eval("arr_tmp = " + type + ";");
    if (CanMove(curX,curY,arr_tmp)){
        curBlock = type;
        eval("arr_curBlock = " + curBlock + ";");
        eval("ShowBlock(block_div.style.pixelLeft,block_div.style.pixelTop," + curBlock + ",colors[" + cid + "]);");
    }
}

function CanMove(x,y,block){
    for (i=0;i<4;i++){
        for (j=0;j<4;j++){
            if (block.getd(i,j,4)&table.getd(y/n_IncStep+i,x/n_IncStep+j,16)) return false;
        }
    }
    return true;
}

function NewBlock(){
    curBlock = nextBlock;
    cid = ncid;
    bid = Math.round(Math.random()*(blocks.length-1));
    ncid = Math.round(Math.random()*(colors.length-1));
    nextBlock = blocks[bid];
    eval("arr_curBlock = " + curBlock + ";");
    eval("ShowBlock(120,0," + curBlock + ",colors[" + cid + "]);");
    eval("arr_curBlock = " + curBlock + ";");
    eval("ShowBlock1(466,116," + nextBlock + ",colors[" + ncid + "],nblock_tbl,nblock_div);");
}

function SaveBlock(){
    for (i=0;i<4;i++){
        for (j=0;j<4;j++){
            table[(curY/n_IncStep+i)*16+curX/n_IncStep+j]|=arr_curBlock[i*4+j];
            if (arr_curBlock[i*4+j]==1)
                if ((curY/n_IncStep+i<21)&&(curX/n_IncStep+j>1)&&(curX/n_IncStep+j<14))
                    table_tbl.rows(curY/n_IncStep+i).cells(curX/n_IncStep+j).style.background = colors[cid];
            if (table[(curY/n_IncStep+i)*16+curX/n_IncStep+j]!=1)
                    table_tbl.rows(curY/n_IncStep+i).cells(curX/n_IncStep+j).style.background = "black";/*Este corresponde al color del fondo NEGRO*/
        }
    }
}

function DelLine(line){
    for(i=line;i>0;i--){
        for(j=2;j<14;j++){
            table[i*16+j]=table[(i-1)*16+j];
        }
    }
    table_tbl.deleteRow(line);
    table_tbl.insertRow(0);
    for (i=0;i<16;i++){
        table_tbl.rows(0).insertCell();
        if (i<2||i>13) table_tbl.rows(0).cells(i).style.background="navy"; /*Esto corresponde al BORDE del juego*/      
    }
    killedlines++;
    cll.innerText=parseInt(cll.innerText)+1;
}

function DelLines(){
    var c,d,i,j;
    d=0;
    curY=block_div.style.pixelTop;
    for(i=(curY/20+3);i>curY/20-1;i--){
        c=0;
        for(j=2;j<14;j++){
            if (isNaN(table[i*16+j])||i==21) break;
            c+=table[i*16+j];
        }
        if(c==12){
            DelLine(i);
            i++;
            d++;
        }
    }
    if (d>0)
        sco.innerText=parseInt(sco.innerText)+d*d*36;
}

function Lucifer(){
    for(var i=2;i<14;i++){
        if (table[16+i]==1) return true;
    }
    return false;
}

function GameOver(){
    gameover=1;
    clearInterval(gameInterval);
    block_div.innerHTML="";
    for (i=0;i<21;i++){
        for (j=2;j<14;j++){
            setTimeout("table_tbl.rows(" + i + ").cells(" + j + ").style.background = colors[Math.round(Math.random()*7)];",16*i*j);
        }
    }
    nblock_div.innerHTML = "Game Over"; /*Aca le das el mensaje que perdiste*/
}



function document_onkeydown() {
    if (gameover==1) return;
    with (block_div.style){
    curX = pixelLeft;
    curY = pixelTop;
    switch (event.keyCode){
        case 37:
            if (CanMove(curX-n_IncStep,curY,arr_curBlock))
                pixelLeft-=n_IncStep;
            break;
        case 38:
            Change(1);
            break;
        case 39:
            if (CanMove(curX+n_IncStep,curY,arr_curBlock))
                pixelLeft+=n_IncStep;
            break;
        case 40:
            if (CanMove(curX,curY+n_IncStep,arr_curBlock)){
                pixelTop+=n_IncStep;
            }
            else{
                SaveBlock();
                DelLines();
                if (Lucifer()){
                    GameOver();
                    return;
                }
                sco.innerText=parseInt(sco.innerText)+2;
                NewBlock();
            }
            break;
        case 32:
            if (pause==0){
                clearInterval(gameInterval);
                pause=1;
            }
            else{
                gameInterval=window.setInterval("Handle_Interval()",(maxspeed-speed+1)*60);
                pause=0;
            }
            break;
        case 90:        
            Change(1);
            break;
        case 88:    
            Change(-1);
            break;
        default:
    }
    }
}

function Handle_Interval(){
    curX = block_div.style.pixelLeft;
    curY = block_div.style.pixelTop;
    if (CanMove(curX,curY+n_IncStep,arr_curBlock)){
        block_div.style.pixelTop+=n_IncStep;
    }
    else{
        SaveBlock();
        DelLines();
        if (Lucifer()){
            GameOver();
            return;
        }
        sco.innerText=parseInt(sco.innerText)+2
        NewBlock();
    }
    if (killedlines>=clr_per_line){
        killedlines-=clr_per_line;
        if (speed<maxspeed)
            speed++;
        else
            speed=maxspeed;
        spd.innerText=speed;
        clearInterval(gameInterval);
        gameInterval=window.setInterval("Handle_Interval()",(maxspeed-speed+1)*60);
    }
}
//-->
</SCRIPT>

<SCRIPT language=javascript event=onkeydown for=document>
<!--
 if (document.all)
 document_onkeydown()
//-->
</SCRIPT>
</head>

<DIV id=block_div style="LEFT: 60px; TOP: 0px">
<TABLE id=block_tbl cellSpacing=0 cellPadding=0 border=0>
  <SCRIPT>
if (document.all){
for (var i=0;i<4;i++){
    document.write("<tr>");
    for (var j=0;j<4;j++){
        document.write("<td style=\"border:1 solid black;\"></td>");
    }
    document.write("</tr>");
}
}
</SCRIPT>

  <TBODY></TBODY></TABLE></DIV>
<DIV id=nblock_div>
<TABLE id=nblock_tbl cellSpacing=0 cellPadding=0 border=0>
  <SCRIPT>
if (document.all){
for (var i=0;i<4;i++){
    document.write("<tr>");
    for (var j=0;j<4;j++){
        document.write("<td style=\"height:40;width:40;border:1 outset black;\"></td>");
    }
    document.write("</tr>");
}
}
</SCRIPT>

  <TBODY></TBODY></TABLE></DIV>
<DIV id=table_div>
<TABLE id=table_tbl cellSpacing=0 cellPadding=0 border=0>
  <SCRIPT>
if (document.all){
for (var i=0;i<22;i++){
    document.write("<tr>");
    for (var j=0;j<16;j++){
        var d2 = i * 16 + j;
        if (table[d2]==1)
        document.write("<td bgcolor=navy></td>");
        else
        document.write("<td style=\"background:black;\"></td>");
    }
    document.write("</tr>");
}
}
</SCRIPT>
<body>

   <TBODY></TBODY></TABLE></DIV>
<DIV id=title_div noWrap>Por favor ingrese velocidad (1-9)para comenzar: <INPUT id=speedin
size=8>&nbsp;<BUTTON id=but onclick=begintet()>Cargar!</BUTTON></DIV>
<DIV id=infobar_div>
<TABLE borderColor=navy cellSpacing=0 cellPadding=0 border=1>
  <TBODY>
  <TR align=middle>
    <TD style="FONT: 12px system; WIDTH: 56px; COLOR: #99ccff">Velocidad:</TD>
    <TD id=spd style="FONT: 12px system; COLOR: red">1</TD>
    <TD style="FONT: 12px system; WIDTH: 86px; COLOR: #99ccff">Puntaje Total:</TD>
    <TD id=sco style="FONT: 12px system; COLOR: red">0</TD>
    <TD style="FONT: 12px system; WIDTH: 96px; COLOR: #99ccff">Cantidad de Lineas:</TD>
    <TD id=cll style="FONT: 12px system; COLOR: red">0</TD></TR></TBODY></TABLE></DIV>
    <div id="infobar2_div">Visita mi p&aacute;gina <a href="http://themastercar3d.jimdo.com" target="_blank">TheMasterCar3D.jimdo.com</a></div>
<SCRIPT language=javascript id=MainSection>
<!--
if (document.all){
ncid = Math.round(Math.random()*(colors.length-1));
bid = Math.round(Math.random()*(blocks.length-1));
nextBlock = blocks[bid];
NewBlock();
}
function begintet(){
document.all.speedin.disabled=true
document.all.but.disabled=true
speed=parseInt(document.all.speedin.value);
if (isNaN(speed)||speed==null||speed>maxspeed||speed<1) speed=1;
spd.innerText=speed;
gameInterval=window.setInterval("Handle_Interval()",(maxspeed-speed+1)*60);
}
//-->
</SCRIPT>

</body>
</html>

Si te gusta este tetris lo podes hacer si tienes ingenio mejor... HAZLO TÚ MISMO

Podes reemplazar la IMAGEN por otra que más te guste y cambiarle los colores

Si no queres hacerlo entonces lo puedes descargar... aca abajo esta el ARCHIVO

Descarga
Tetris.rar
Este es el mismo pero esta modificado
¿Que es lo que cambio?
el fondo, los bordes, el color de los bloques
Tetris.rar
Archivo comprimido 383.6 KB