Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencias de la Computación IIC1102 – Introducción a la Programación Jueves 03 Mayo de 2007 Tarea 1: Ludo 1. ENUNCIADO Ludo es un juego ampliamente conocido a nivel mundial, y el objetivo de esta tarea será implementarlo. Se juega entre cuatro jugadores, cada uno de los cuales tiene asociado un color: verde, rojo, azul y amarillo. El tablero sobre el que se desarrolla el juego puede verse a continuación: Cárcel Verde Partida Verde El tablero tiene 88 casilleros, aquí numerados desde el 0 al 87. Cada jugador posee una cárcel, donde comienza el juego con 4 fichas de su color. Además, cada cárcel tiene una salida propia, que es donde se coloca una ficha que escapa de la cárcel. Finalmente, antes de llegar a la meta hay una recta final. El jugador verde, por ejemplo, tiene una cárcel con los casilleros 72-75, una salida en el casillero 0 y una recta final en los casilleros 52-56. El caso para los demás jugadores es análogo. El objetivo del juego consiste en llevar las 4 fichas del jugador hasta la meta. Para ello, el jugador deberá sacar sus fichas de la cárcel y avanzar en el orden establecido por los números hasta dar una vuelta completa, entrando finalmente hasta la recta final. El recorrido efectuado por una pieza verde está marcado con flechas en el esquema. Nótese que una ficha verde nunca pasará por el casillero 51, ya que luego del 50 entra al 52, que corresponde a la entrada a su recta final. El caso de los demás jugadores es análogo, para lo que se considera que el casillero 51 va seguido por el casillero 0. Para saber qué jugador comienza el juego se lanza un dado de seis caras y se juega a partir del jugador que obtuvo el mayor dado, tras lo cual se juega en el orden de las agujas del reloj. Cada jugador comienza su turno lanzando un dado y, de acuerdo a lo que haya salido, eligiendo cuál de sus fichas mover (si no es posible mover ninguna de sus fichas, el jugador pasa), la ficha se mueve tantos casilleros como sea el valor obtenido en el dado, de acuerdo al recorrido especificado anteriormente. Si el dado tiene un valor de 1 o 6 el jugador también puede decidir mover una ficha que se encuentre en su cárcel hasta la salida, donde la ficha queda detenida (inclusive con un 6). Si la ficha queda en una posición previamente ocupada por una ficha de otro jugador, la ficha rival es enviada de vuelta a su cárcel correspondiente, por el contrario, no es posible mover una ficha si esta va a caer sobre una ficha propia. Esta regla es valida inclusive para fichas que vienen saliendo de la cárcel. Para llegar a la meta, es necesario llegar a ella como si fuera el casillero siguiente al último casillero de la recta final, pero es necesario llegar en forma justa o de lo contrario la ficha rebota tantos espacios hacia atrás de la recta final como sobraron para llegar a la meta. Por ejemplo, una ficha verde que se encuentre en la posición 54 requiere de un 3 en el dado para llegar a la meta, si por ejemplo el dado saliera un 5, la ficha avanzaría 3 espacios hacia la meta y luego retrocedería el resto hasta llegar finalmente al casillero 55. Un jugador que saca un 6 en el dado tiene derecho a repetir su turno. 2. LIBRERÍA Para el desarrollo de esta tarea se dispondrá del uso de una librería externa que encapsulará algunas funcionalidades del juego. Es obligatorio utilizar esta librería para todas las operaciones relevantes dado que son requeridas para la correcta corrección de la tarea. No está permitido, por ejemplo, lanzar un dado externamente mediante otra función de números aleatorios. La librería se llama Tarea2.jar y debe ser incorporada en el proyecto del alumno. La librería provee una instancia estática de la clase llamada “juego”, la cual provee las siguientes funcionalidades: /** * Pide al jugador que ingrese una pieza. */ public int elegirPieza() /** * Lanza un dado. * @return El numero obtenido. */ public int lanzarDado() 2 /** * Mueve una pieza * @param jugador Numero correspondiente al jugador (0-3) * @param pieza Numero correspondiente a la pieza (0-3) * @param posicion Posición en que se coloca la pieza (0-87) o 1 para sacarla del tablero. */ public void ponerPieza(int jugador, int pieza, int posicion) /** * Función que se encarga de la graficación del tablero. */ public void repaint() Para efectos de estas funciones se considera que el jugador verde corresponde al jugador 0, siguiéndoles los jugadores rojo, azul y amarillo respectivamente. Estas funciones no revisan la validez de los datos que reciben, por lo que es su responsabilidad asegurar que los datos con que las llaman sean los adecuados. 3. ENTREGA La tarea es estrictamente individual. El plazo de desarrollo de la tarea es hasta el día jueves 17 de mayo a las 23:59 hrs. El código de la tarea debe ser entregado por correo electrónico al ayudante ([email protected]) en un archivo con nombre loginpuc.zip o loginpuc.rar, donde loginpuc corresponde a su usuario en el mail de la universidad (por ejemplo, jmardonez.zip). El archivo deberá contener todo el código necesario para ejecutar la tarea (*.java). No es necesario adjuntar un informe para esta tarea, pero la documentación correcta del código deberá incorporar conceptos de diseño y todo aquello necesario para hacer que la tarea sea legible y completa. Se descontarán 5 décimas de la nota final por cada hora (o fracción) de atraso en la entrega de la tarea. 4. CONSIDERACIONES Por favor recuerden que la tarea es parte importante del promedio final del curso y que la detección de cualquier conducta fraudulenta o poco ética en esta será sancionada con suma severidad, de acuerdo a los criterios explicados previamente por el. Está prohibido utilizar cualquier materia no pasada en el curso hasta la fecha de publicación de este enunciado, en particular arreglos. La idea es que practiquen sus capacidades con el trasfondo de materia que existe hasta dicha fecha. Los otros contenidos serán evaluados en las siguientes tareas. Es responsabilidad de los alumnos asegurarse de que su tarea fue correctamente recibida por el ayudante. 3