#1 Matěj Andrle
Chceš kritiku, máš ji mít No a jelikož jsme na programátorském fóru, tak se koukneme na kód. Zdroják je docela čitelný a hra bez problémů funguje. Následující výtky proto ber spíše jako rady do budoucna.
Trochu mi v kódu vadí spousta magických čísel, např.:
...
case 19:
case 80:
pause();
...
Je jasné, že jde o kódy kláves 'p' a 'pause', ale vždycky je lepší si to hodit jako konstanty. Trochu horší už je to tady:
...
for(var row = 3; row < 22; row++)
if(testRow(row))
{
removeRow(row);
...
Na první pohled není úplně jasné, proč procházíš zrovna řádky 3 - 22. Stejně tak není jasné, proč má být řádek smazán, protože testRow nic moc neříká o tom, co se ve funkci děje. Jestliže do této funkce nahlédnu...
function testRow(row)
{
var cells = canvas.rows[row].cells;
return cells[0].style.backgroundPosition && cells[1].style.backgroundPosition &&
cells[2].style.backgroundPosition && cells[3].style.backgroundPosition &&
cells[4].style.backgroundPosition && cells[5].style.backgroundPosition &&
cells[6].style.backgroundPosition && cells[7].style.backgroundPosition &&
cells[8].style.backgroundPosition && cells[9].style.backgroundPosition;
}
... tak pokud bych JS (případně CSS) moc neovládal, tak stejně nebudu vědět, proč v ní testuješ backgroundPosition na true. A i když JS ovládám (a vím, že převádí neprázdný řetězec na true), tak musím projít celý zdroják, abych pochopil, o co jde. A upřímně si stejně nejsem zcela jistý jestli rozumím správně tomu, že testuješ jestli je v každé buňce řádku kostka. Takže vhodnější název funkce a obalení toho checkování backgroundPosition do samostatné funkce (třeba s názvem isCellOccupied()) by rozhodně přispělo k větší čitelnosti.
V té funkci je ještě jedna věc, kterou bych vytkl - proč v ní nepoužít for cyklus? Je tam 10x to samé, jen s jiným indexem. Stejné je to třeba tady:
...
previewElement.rows[0].cells[0].style.backgroundPosition = tmpTetromino[0];
previewElement.rows[0].cells[1].style.backgroundPosition = tmpTetromino[1];
previewElement.rows[0].cells[2].style.backgroundPosition = tmpTetromino[2];
previewElement.rows[0].cells[3].style.backgroundPosition = tmpTetromino[3];
previewElement.rows[1].cells[0].style.backgroundPosition = tmpTetromino[4];
previewElement.rows[1].cells[1].style.backgroundPosition = tmpTetromino[5];
previewElement.rows[1].cells[2].style.backgroundPosition = tmpTetromino[6];
previewElement.rows[1].cells[3].style.backgroundPosition = tmpTetromino[7];
...
Je to jen část, celkem tam máš 16 takovýchto řádků, ve kterých se děje to stejné.
Ať ale jen nekritizuju, tak musím uznat, že použití tabulky na vykreslení hrací plochy je docela chytré. Věřím, že by spousta lidí použila canvas, protože ten je dnes v módě...