Materia
Ejercicios


Tarea 2: Pydle

Objetivos de aprendizaje

Después de resolver la tarea 2, usted será capaz de:

  • Implementar un programa que requiera entradas y salidas.
  • Diseñar e implementar programas simples usando algunas sentencias elementales de Python (asignaciones, if, for y while).
  • Utilizar estructuras de datos (listas, tuplas, diccionarios, conjuntos) para almacenar y capturar datos.
  • Entender la lógica que hay detrás de un juego empleando el módulo de pygame.
  • Implementar un conjunto de funciones siguiendo ciertas instrucciones y utilizando un módulo externo (pygame).

Enunciado

Para esta tarea, usted y su equipo, deben completar el juego Pydle, que es un juego incremental de construcción. Los elementos principales de la tarea están implementados, pero ustedes deben programar las funcionalidades aquí descritas para que el juego funcione completamente. Para el desarrollo de la tarea necesita instalar el módulo pygame. Descargue el módulo.

Pydle consiste en producir dinero en base a construcción de edificios, los cuales producen una cantidad determinada de dinero o bonificación por cada uno de sus ciclos de producción. Los edificios poseen 2 tipos (Productores y Bonificadores) y 2 Colores (Azul y Rojo) y estos se pueden construir, demoler o mejorar según los precios determinados.

Los archivos base de la tarea deben ser descargados desde este enlace. Luego, su tarea es completar las funciones que estan definidas en el archivo funciones.py, éstas permiten jugar Pydle, construir/demoler edificios, recibir ganancias, mejorar edificios y adaptar los precios.

Nota

No es necesario estudiar el módulo pygame, usted sólo debe crear las funciones con los conocimientos que ya posee de python (if, for, while, funciones) y de las estructuras de datos que ha visto en clases, además puede documentarse leyendo el material en línea de listas, tuplas, conjuntos y diccionarios.

Representación

El juego se ve en una ventana de 800x600 pixeles. Abarcando un menu de 200x600 y un campo de construcción de 600x600. Este menú posee un botón de ayuda que muestra algunas caracteristicas del juego, los edificios, los botones de mejora, y el estado del cursor.

../../_images/2016-2_tarea2Ventana.png

Respecto al campo de juego, este consiste en celdas romboidales de diagonal 100px. Y están numeradas de la forma indicada en la siguiente imagen:

../../_images/2016-2_tarea2Campo.png

Además, para el desarrollo de la tarea se disponen de varias estructuras de datos, las cuales son recibidas por las distintas funciones como parámetro.

El diccionario BLOCKS almacena las información actual de las características de los bloques:

BLOCKS={
"BS":{"Pasos":4,"Ganancia":3,"Tipo":"S","Nivel":0,"Precio":100,"Mejora":50},
"RS":{"Pasos":4,"Ganancia":6000,"Tipo":"S","Nivel":0,"Precio":2000000,"Mejora":1000000},
"BDS":{"Pasos":4,"Ganancia":40,"Tipo":"S","Nivel":0,"Precio":1000,"Mejora":500},
"RDS":{"Pasos":4,"Ganancia":80000,"Tipo":"S","Nivel":0,"Precio":4000000,"Mejora":2000000},
"BB":{"Pasos":5,"Ganancia":1,"Tipo":"B","Nivel":0,"Precio":3000,"Mejora":1500},
"RB":{"Pasos":5,"Ganancia":25,"Tipo":"B","Nivel":0,"Precio":5000000,"Mejora":3000000},
"BMC":{"Pasos":7,"Ganancia":250,"Tipo":"S","Nivel":0,"Precio":7000,"Mejora":3500},
"RMC":{"Pasos":7,"Ganancia":250000,"Tipo":"S","Nivel":0,"Precio":14000000,"Mejora":7000000},
"BLB":{"Pasos":6,"Ganancia":3,"Tipo":"B","Nivel":0,"Precio":60000,"Mejora":30000},
"RLB":{"Pasos":6,"Ganancia":50,"Tipo":"B","Nivel":0,"Precio":70000000,"Mejora":35000000},
"NN":{"Pasos":1,"Tipo":"N"}
}
Los elementos de diccionario son:
  • Llave es el nombre del edificio, “NN” es bloque de pasto.
  • Pasos Es el numero de pasos para que el edificio produzca dinero o bonifique a la producción actual se representa por el numero de pasos de las imagenes para crear la animación.
  • Ganancia Es la cantidad de dinero que se gana por ciclo de funcionamiento.
  • Tipo Es un caracter “S”(Stomper) = Productor o “B”(Buffer) = Bonificador que representa el tipo de construcción.
  • Nivel Indica el nivel del edificio, este aumenta con las mejoras.
  • Precio Precio de compra de un edificio.
  • Mejora Precio de mejora de un edificio.

El diccionario STACKS almacena las información de los cambios de representación para el dinero del juego:

STACKS={
"": 10**0,
"K": 10**3,
"M": 10**6,
"KM": 10**9,
"B": 10**12,
"KB": 10**15,
"T": 10**18,
"KT": 10**21,
"Q": 10**24,
"KQ": 10**27,
"QT": 10**30,
"???": 10**33
}

Este diccionario posee como llaves la magnitud en letras y como valor la potencia de 10 correspondiente a esta magnitud, por ejemplo 1250 = 1.25K o 4313512 = 4.31M

La lista Campo almacena los bloques del campo de construcción:

Campo=[
[["Nombre_Bloque",Paso,Estado],["Nombre_Bloque",Paso,Estado],["Nombre_Bloque",Paso,Estado]... Son 6],
[["Nom",P,E],["Nom",P,E],["Nom",P,E] ... Son 5],
[["Nombre_Bloque",0,1]*6],
[["Nom",P,E]*5],
...
]
Esta lista posee los bloques del campo de construcción por filas(mediante listas) de 6 y 5 elementos intercaladas, y cada elemento de estas sub listas es una lista que tiene 3 elementos.
  • Nombre Es el nombre del edificio.
  • Paso El paso actual del edificio, (cual de las imagenes que se muestran).
  • Estado El estado del edificio, o subiendo o bajando. Tomar en consideración que el ciclo es desde una subida a bajada completa.
Los edificios del juego son los siguientes (indicados en la ayuda interna del juego):
  • BS / RS Productor Azul/Rojo
  • BB / RB Bonificador Azul/Rojo
  • BDS / RDS Productor dividido Azul/Rojo
  • BMC / RMC Es el nombre del edificio productor.
  • BLB / RLC Es el nombre del edificio bonificador.
  • NN Pasto
Además se tienen las siguientes variables como parámetros a las funciones:
  • Points: Dinero obtenido en el juego.
  • posicion: Tupla de forma (x,y) que indica posición del cursor.
  • edif: Nombre de un edificio.
  • tipo: Nombre de un edificio.

¿Qué hay que implementar?

Para el desarrollo de esta tarea, junto a su equipo deberán implementar las funciones que se encuentran declaradas en el archivo funciones.py. La descripción de las funciones, junto sus valores de retorno son las que se encuentra a continuación. Es importante señalar que los nombres y valores de retorno de las funciones deben ser iguales a los que se detallan en el archivo funciones.py

  • ProcesarCampo(Campo):Recibe la lista Campo y retorna el nuevo campo, y el puntaje ganado por el jugador avanzado en un tiempo, osea todos los edificios avanzaron a su paso siguiente, los edificios que concluyen un ciclo aportan su ganancia en forma de dinero y en el caso que un bonificador termine su ciclo, entonces esos puntos generados se multiplican por un factor, que se acumula en base a los bonificadores. Nota: ocupe la variable BLOCKS como variable global.
  • AdaptarPuntos(Puntos): Recibe los puntos y usa el diccionario STACK y entrega un string con forma numero+letra, este numero tiene 2 cifras decimales y la letra la determina el diccionario STACK, esto por ejemplo AdaptarPuntos(1420125) retorna 1.42M . Nota: ocupe la variable STACK como variable global.
  • SeleccionEdificio(posicion): Recibe una tupla posicion de forma (x,y) y retorna el numero del cuadro donde está el cursor segun la numeracion mostrada en la imagen de area de construccion.
  • PosibleConstruir(posicion,Campo): PosibleConstruir recibe la posicion del cursor y el campo de construccion, retornando un booleano True o False según se pueda o no construir un edicio en la posicion del mouse, se puede construir si y solo si el espacio está disponible osea hay pasto.
  • Demoler(posicion,campo,bloques): La función Demoler recibe la posicion del mouse, el campo de construccion, y el diccionario de bloques, demoliendo el edificio construido en la poscion del mouse, dejando el espacio disponible en forma de pasto, adicionalmente al eliminar un edificio el precio de este debe disminuír un 50%. La funcion retorna el nuevo campo y el diccionario bloques actualizado con el nuevo precio.
  • Construir(posicion,edif,campo,bloques,Puntos): Construir recibe la posición del mouse, el nombre del edificio a construir, la lista campo, el diccionario de bloques y los puntos del jugador, la función debe crear el edificio en la posicion del cursor, descontando el precio de este al total de dinero del jugador, adicionalmente al construir un edificio el precio de este aumenta un 150%. La función retorna el nuevo campo, el diccionario de bloques con el precio actualizado y los nuevos puntos del jugador.
  • Mejora(tipo,bloques,Puntos): La función Mejora, recibe el tipo de bloque a mejorar, el diccionario bloques, y los puntos del jugador, al mejorar un edificio se paga el costo de mejora actual, descontandolo del dinero del jugador, luego si el edificio es de produccion entonces el edificio producirá 100% más, si es bonificador entonces bonificará un 5% más, y el precio de la mejora del edificio elegido si es de produccion costará un 200% más y si es tipo bonificador un 100% más. La función retorna el nuevo diccionario de bloques y los nuevos puntos del jugador.

Entrega

La fecha límite de entrega es el Viernes 7 de Octubre a las 23:00hrs. La tarea debe ser resuelta en equipos de máximo tres personas. Sólo uno de los integrantes del equipo debe subir la tarea en la sección Tareas de la plataforma Aula, en el ramo de Programación IWI131.

Se debe entregar un archivo comprimido (.zip) que debe contener todos los archivos para hacer funcionar la tarea con el nombre tarea-2-RUT.zip, reemplazando RUT con el RUT del integrante que subirá la tarea. Sólo debe ir la parte del RUT hasta antes de la raya. Por ejemplo: tarea-2-18000123.zip.

Al principio del archivo funciones.py se debe poner un comentario indicando los RUT de los integrantes del equipo como en el siguiente ejemplo:

# Integrantes:
# 18000123-0 Perico Los Palotes
# 18000456-7 Fulanita de Tal
# 18000890-k Federico Santa Maria

No se puede subir ningún archivo adicional.

Evite dejar para última hora la entrega de la tarea. Cerca del plazo final, la plataforma seguramente estará sobrecargada.

Se recibirán tareas con un máximo de un día de retraso, pero serán sancionadas.

Los equipos no necesariamente tienen que ser los mismos de la tarea anterior.

Políticas de copia

Usted puede discutir la tarea con compañeros de otros grupos, pero bajo ningún motivo puede compartir o copiar el código de su tarea. Cada equipo debe escribir su propio código.

Las políticas de copia de la asignatura rigen para la tarea.

En caso de tener problemas con el desarrollo de la tarea, asista a las ayudantías o consulte en el grupo de facebook.