1ra Evaluación I Término 2015-2016. Julio, 2015 /FIEC
Tema 3. (45 puntos) En el juego de tablero acumula-tesoros, dos jugadores atraviezan un corredor de 50 metros de largo.
En cada turno, un jugador avanza lanzando un dado de 6 caras y avanza las casillas de 1 metro correspondiente.
En la nueva posición debe considerar si debe retroceder considerando la reglas de movimiento:
- Si la nueva posición no ha sido visitada aún, se queda en la casilla y el jugador puede recoger algún elemento siguiendo las reglas de tesoros.
- Si la nueva posición ya ha sido visitada por el otro jugador, debe retroceder 10 metros.
- En caso de retroceder, el jugador puede volver al inicio si su posición es menor de 10 metros. El jugador puede evitar retroceder deshaciéndose de un tesoro de los que haya recogido.
Al llegar a cada casilla o posición, a cada jugador se le asigna aleatoriamente uno de los estados mostrados en la tabla.
estado |
elemento |
fortaleza (-1) |
armas (1) |
hambre (-2) |
víveres (2) |
súper-héroe (-3) |
tesoros (3) |
Algunas casillas pueden tener asignado uno los elementos de la tabla. Las reglas de tesoro para recoger el elemento indica que:
- Para recoger armas, el jugador debe estar en el estado de fortaleza.
- Para recoger víveres, el jugador debe estar en el estado de hambre.
- Para recoger tesoros, el jugador debe estar en el estado de súper-héroe.
Al inicio del juego, se ubican los jugadores en la casilla 1. Luego se distribuyen aleatoriamente 8 armas, 8 víveres y 8 tesoros a lo largo del corredor, desde la posición 2 en adelante.
El juego termina cuando uno de los jugadores llega exactamente al final del corredor. Gana el jugador que acumula la mayor riqueza de elementos recogidos durante el juego, calculada como:
Riqueza = \frac{armas}{2}+1)100 + 0.5 víveres+ tesoros
Se requiere implementar las siguientes procedimientos y funciones:
- asignarPosicionElementos() que retorna una colección que contiene 3 listas, cada una representando las posiciones en el corredor de las 8 armas, víveres y tesoros, respectivamente.
- LanzarDado() que retorna aleatoriamente el valor de una de las caras del dado.
- generarEstado() que retorna aleatoriamente uno de los posibles estados.
- mostrarElemento(posicion, coleccion) que dada una posición y la colección de posiciones de los elementos imprime en pantalla el tipo de elemento que existe en esa posición.
- recogerElemento(estado, posicion,colección) que dada una posición, el estado de un jugador y la colección de posiciones de los elementos retorna el tipo de elemento que se ha recogido (1, 2 ó 3) o 0 si no ha sido posible.
- mostrarMensaje(jugador), la cual recibe como parámetro un jugador e muestra en pantalla el estado y posición del jugador.
- calcularRiqueza(armas,viveres,tesoreos) que dada una cantidad de armas, víveres y tesoros retorna la riqueza obtenida.
Realice un programa que simule el juego y que siguiendo las reglas del juego descritas, use las funciones implementadas anteriormente.
En cada turno se mostrarán por pantalla:
- El jugador al que corresponde el turno
- El resultado del lanzamiento del dado
- Si se avanza o retrocede
- la nueva posición del jugador
Al finalizar el juego, se debe declarar al ganador y la riqueza de cada uno.
Rúbrica: inicializar tablero con premios (5 puntos), uso de aleatorios, (5 puntos), control de posiciones (5 puntos), implementar reglas de movimiento (5 puntos), reglas de tesoros (5 puntos), control de fin de juego (5 puntos), seleccion de ganador y riqueza(5 puntos), funciones estructuradas (5 puntos), algoritmo estructurado(5 puntos).
Nota: Enunciado original editado y adaptado para taller en clases.