14.05.2013 Views

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 ‐

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!