Práctica 1: Tetris en Modo Consola ‐ Comentarios y Consejos ‐
Práctica 1: Tetris en Modo Consola ‐ Comentarios y Consejos ‐
Práctica 1: Tetris en Modo Consola ‐ Comentarios y Consejos ‐
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Laboratorio de Programación de Sistemas<br />
<strong>Práctica</strong> 1: <strong>Tetris</strong> <strong>en</strong> <strong>Modo</strong> <strong>Consola</strong><br />
<strong>‐</strong> Com<strong>en</strong>tarios y <strong>Consejos</strong> <strong>‐</strong><br />
Profesor: Iván Martínez Ortiz<br />
Ing<strong>en</strong>iería Técnica <strong>en</strong> Informática de Sistemas<br />
Departam<strong>en</strong>to de Ing<strong>en</strong>iería del Software e Intelig<strong>en</strong>cia Artificial<br />
Curso 2009-2010<br />
Laboratorio de Programación de Sistemas<br />
Ing<strong>en</strong>iería Técnica <strong>en</strong> Informática de Sistemas<br />
¿Cómo leo la <strong>en</strong>trada del Usuario?<br />
Ti<strong>en</strong>es que utilizar la clase es.ucm.fdi.lps.console.Console que<br />
te proporciono.<br />
Ti<strong>en</strong>e métodos para leer/escribir caracteres y cad<strong>en</strong>as.<br />
¿Hay un mecanismo de más alto nivel? Sí<br />
Hay que configurar los flujos estándar System.setIn(),<br />
System.setOut(), System.setErr(), con instancias de las clases<br />
es.ucm.fdi.lps.console.InputStreamConsoleAdapter y<br />
es.ucm.lps.console.OutputStreamConsoleAdapter<br />
Y utilizar java.util.Scanner.<br />
Similar a la funcionalidad de las funciones de C scanf / printf.<br />
1.2<br />
Laboratorio de Programación de Sistemas<br />
Ing<strong>en</strong>iería Técnica <strong>en</strong> Informática de Sistemas<br />
Los terminales/<strong>Consola</strong>s y Java<br />
¿Cómo coloco el cursor <strong>en</strong> una posición de la consola utilizando la API<br />
estándar de Java?<br />
NO SE PUEDE<br />
¿Se puede interactuar con la <strong>Consola</strong> al estilo Pascal?<br />
Sí, pero hace falta utilizar el mecanismo de ext<strong>en</strong>sión nativa de JAVA<br />
utilizando C.<br />
¿Y, t<strong>en</strong>emos que hacerlo nosotros?<br />
NO, yo os proporcionoo una <strong>Consola</strong> de pruebas que simula el<br />
comportami<strong>en</strong>to real de una consola nativa.<br />
Puede que antes de <strong>en</strong>tregar la práctica os proporcione una versión nativa<br />
<strong>en</strong> windows XP para que probéis (no es un requisito para la práctica)<br />
¿Cómo se se puede "esperar un poco" <strong>en</strong> Java?<br />
Se puede utilizar el método Thread.sleep(long) que duerme el<br />
programa (hilo principal) un número específico de milisegundos.<br />
¿Cómo puedo medir instantes de tiempo <strong>en</strong> mi programa?<br />
Puedes utilizar System.curr<strong>en</strong>tTimeMillis() y System.nanoTime()<br />
(más preciso).<br />
long tiempoActual = 0;<br />
long tiempoViejo = 0;<br />
while(...){<br />
tiempoActual = System.nanoTime();<br />
if( (tiempoActual – tiempoViejo ) > INTERVALO_INTERESANTE ){<br />
hacerAlgo();<br />
tiempoViejo = oldTime;<br />
}<br />
...<br />
}<br />
Laboratorio de Programación de Sistemas<br />
Ing<strong>en</strong>iería Técnica <strong>en</strong> Informática de Sistemas<br />
1.1<br />
1.3
¿Cómo puedo gestionar las rotaciones de las piezas?<br />
Hay que utilizar una repres<strong>en</strong>tación intelig<strong>en</strong>te<br />
Un mino puede repres<strong>en</strong>tar el orig<strong>en</strong> de coord<strong>en</strong>adas<br />
El resto de mino se repres<strong>en</strong>tan respecto a ese mino orig<strong>en</strong>.<br />
La rotación de los minos se puede calcular con las ecuaciones de<br />
rotación de un punto respecto a otro punto.<br />
¿Realm<strong>en</strong>te hace falta rotar los minos siempre ?<br />
Una vez rotada la pieza si no cabe (horizontalm<strong>en</strong>te) hay que moverla<br />
hasta que quepa<br />
7<br />
1<br />
(5,2)<br />
(fila, col)<br />
1 5<br />
Laboratorio de Programación de Sistemas<br />
Ing<strong>en</strong>iería Técnica <strong>en</strong> Informática de Sistemas<br />
(-1,0)<br />
(fila, col)<br />
(0,0)<br />
(fila, col)<br />
Rota AH 90º<br />
(0,1)<br />
(fila, col)<br />
(-1,0)<br />
(fila, col)<br />
7<br />
1<br />
(6,3)<br />
(fila, col)<br />
1 5<br />
¿El diagrama de clases ti<strong>en</strong>e que ser muy detallado?<br />
Respuesta: No<br />
El propósito es <strong>en</strong>t<strong>en</strong>der el diseño de un vistazo<br />
Podéis omitir métodos privados (e indicadores de visibilidad)<br />
Podéis omitir atributos poco significativos<br />
Podéis omitir indicadores de cardinalidad (los no importantes)<br />
Agregación vs. Composición<br />
El diagrama debe ir acompañado de una descripción<br />
Laboratorio de Programación de Sistemas<br />
Ing<strong>en</strong>iería Técnica <strong>en</strong> Informática de Sistemas<br />
1.4<br />
1.6<br />
¿Podemos añadir métodos a las interfaces del <strong>en</strong>unciado?<br />
Respuesta: Sí<br />
Se pued<strong>en</strong> añadir métodos si sigu<strong>en</strong> criterios razonables de diseño<br />
Métodos necesarios para cualquier implem<strong>en</strong>tación<br />
Métodos desacoplados de la lógica<br />
Los métodos del <strong>en</strong>unciado, además están para dar pistas del diseño y<br />
la lógica pero no es la solución completa al problema.<br />
Laboratorio de Programación de Sistemas<br />
Ing<strong>en</strong>iería Técnica <strong>en</strong> Informática de Sistemas<br />
1.5