{\rtf1\ansi\deff0\nouicompat{\fonttbl{\f0\fnil\fcharset0 Calibri;}} {\*\generator Riched20 10.0.10586}\viewkind4\uc1 \pard\sa200\sl276\slmult1\b\f0\fs44\lang9 Tetris 3D\fs22\par \par \fs36 Description \fs22\par \b0\lang1033 Este es un juego de 3d Tetris en threejs. Hay una c\'e1mara orbital alrededor del centro y un \'e1rea c\'fabica en la cual caen los bloques formados diferentes y ocupan sub \'e1reas c\'fabicas. Cuando una capa est\'e1 completamente ocupada, los bloques de la capa desaparecen y la izquierda se reorganiza correctamente.\par \b\fs36 Game Structure\fs22\par \i Las estructuras del juego: \par \b0\i0\tab - GameBox\par \tab\tab El \'e1rea en la que tiene lugar el juego. Consiste en varios `Capas '.\par \tab - Layer\par \tab\tab Una matriz 2D de \'e1rea c\'fabica cu\'e1ntica.\par \tab - Quanto\par \tab\tab El \'e1rea c\'fabica m\'e1s peque\'f1a est\'e1 hecha de.\par \tab - Shape \par \tab\tab Clase abstracta para extender y crear algunos bloques dropables. Las propiedades son una matriz de posiciones (definici\'f3n de bloque), posici\'f3n, rotaci\'f3n y un material.\lang9\par \b\i Object Logic\b0\i0\par \tab\ul Quanto\par \ulnone\tab Quanto es una clase que tiene s\'f3lo un nodo threejs como propiedad y algunas variables auxiliares como flag ocupado.\par \tab\ul Shapes\par \ulnone\tab Habr\'e1 varias formas y su informaci\'f3n se almacenar\'e1 como un conjunto de posiciones relativas a su origen y con relaci\'f3n a su posici\'f3n y rotaci\'f3n. De acuerdo con la informaci\'f3n, se crear\'e1 una escena gr\'e1fica parcial para el bloque con la posici\'f3n y rotaci\'f3n correctas. Shape no tiene l\'f3gica sino la precomputaci\'f3n mientras se utiliza principalmente como una estructura para el almacenamiento de datos.\par \tab\ul Layers\par \ulnone\tab Capas consiste en una matriz 2D de Quanto que est\'e1n desocupados en el principio. Estos Quantos pueden ser ocupados por una forma.\par \tab\ul GameBox\par \ulnone\tab GameBox es la principal clase del juego que realiza toda la l\'f3gica. Tiene la funci\'f3n de progreso que mueve el juego un paso como en tetris normales, atravesando el conjunto de Capas hasta Quantos y reorganizando apropiadamente. En cada llamada de progreso la escena es manipulada por esta clase.\lang1033\par \par \b\lang9 Class Diagram\par \ul\b0 Quanto\par \ulnone - node : ThreeJS Entity\par - occupied : bool\par - temporary : bool\par \ul Layer\ulnone\par - quantos : Array [][]\par - isOccupied() : bool function \par - clear() : void\par \ul GameBox\par \ulnone - scene : ThreeJS Scene\par - layers : Array []\par - currentShape : Shape\par - checkState() : short // gamestate 0: in progress, 1: winning, -1:losing\par - progress() : void\par - isTime() : bool // returns whether STEPTIME has passed\par - setup( SizeX, SizeY ) : void \par - move(x,y) : void // moves current Shape \par - rotate(degrees) : void // rotates current Shape\par - checkColisions() : void // check collisions \par \ul Shape (abstract)\ulnone\par - geometry : array[positions]\par - position : Vector3\par - rotation : Degrees\par - node : ThreeJS Entity\par \b\fs28 Precomputing/Initializing\par \b0\fs22 - La inicializaci\'f3n se inicia en GameBox que inicializar\'e1 una matriz de instancias de capa que inicializar\'e1 una matriz de Quantos. \par - La c\'e1mara debe ser creada con controles orbitales\par - Creaci\'f3n de la escena con un avi\'f3n y un skybox\par - Evento de configuraci\'f3n Oyentes para jugar el juego\par - Inicializaci\'f3n de escena\par - Adjuntar Gamebox Scene a la escena principal\b\fs28\par Gameloop\par \b0\fs22 El gameloop es el siguiente: \par Every frame : \par \tab if box.isTime() then box.progress() // internal scene update\par On Event : \par \tab box.move(event) \par \tab or \par \tab box.rotate(event)\par \par }