¡Que va! el gotoxy() es de cobardes, creo recordar que solo usabamos stdio.h y time.h.
No lo recuerdo muy bien, pero si no me equivoco, lo primero que hacías era definir las constantes para los dibujo para la pieza, para la casilla vacía y los bordes del tablero con los caracteres ASCII.
Luego preparabas una función pieceFall() que intercambiaba cada casilla con las de abajo si estaban vacías, y que llamaba a grounded() cuando se encontraba con una casilla ocupada.
Desde grounded(), se hacían las comprobaciones y llamadas oportunas para ver si te habías salido de la pantalla (game over), para ver si habias hecho una linea, y blablabla, tampoco tenia mucho misterio una vez que aislabas los elementos.
Todo eso se hacía a base de bucles for y while, muy rudimentario, pero instructivo...
Supongo que en java, lo suyo sería crear la clase tetrimino() y que sea ella la que cargue con los métodos, no sabría decirte ahora mismo...
PD: #5 Y por si el tetris te parece poco, para esta semana estamos acabando una práctica de estructuras de computador que consiste en programar las rutinas de ensamblador de un Buscaminas... Eso si que da bastante mal rollo.