Tarea1 Elo320 2024 1 CSSJ
Tarea1 Elo320 2024 1 CSSJ
Tarea1 Elo320 2024 1 CSSJ
La compañı́a EDA Games está diseñando una nueva entrega de su famosa saga Harvest Pou, llamado SansaGotchi
Land. En este juego, el jugador es el criador de una granja de criaturas mı́ticas llamadas SansaGotchi, un tipo
de Pou muy conocido en Chile. El primer prototipo del juego considera el siguiente escenario:
• El juego contendrá una granja de SansaGotchis, criaturas que ingresan a ella mediante adopción, o son
retirados de la misma al momento de fallecer.
• Los SansaGotchis fallecidos son enterrados en un cementerio, en el cual se guardan los recuerdos de su
existencia y ası́ no son olvidados.
• Un SansaGotchi es un tipo de Pou que posee los siguientes atributos:
– Nivel de Felicidad: Valores entre cero (0) y diez (10), inclusive, indicando qué tan feliz es un SansaGotchi.
Donde, cero (0) es el nivel máximo de infelicidad, y diez (10), el nivel máximo de felicidad.
– Nivel de Alimentación: Valores entre cero (0) y diez (10), inclusive, indicando qué tan satisfecho está
un SansaGotchi. Donde, cero (0) es el nivel máximo de hambruna y diez (10) es el nivel máximo de
satisfacción.
– Acumulación de Suciedad: Cantidad de fecas, o plorts, que ha acumulado un SansaGotchi. Estas
pueden acumularse hasta un máximo de tres (3).
• El granjero puede interactuar con los SansaGotchi pudiendo:
– Acariciarlos.
– Alimentarlos.
– Limpiarlos.
– Llamarlos (para encontrarlos).
– Visitarlos (si está fallecido).
– Enterrarlos (si hay algún fallecido).
• Un SansaGotchi fallece por:
– Depresión: Si su Nivel de Felicidad alcanza el nivel cero (0).
– Inanición: Si su Nivel de Alimentación alcanza el nivel cero (0).
– Infección Terminal: Si su Acumulación de Suciedad alcanza tres (3) plorts.
• Cuando se cierra el juego, se guarda el último estado de la granja. Y cuando se vuelve a abrir, comienza
desde el último estado guardado.
EDA Games se ha contactado con los Profesores del curso ELO320 - Estructura de Datos y Algoritmos de la
UTFSM, para solicitar una recomendación de desarollador. Los profesores lo han recomendado a ud.; siendo
contratado por la empresa. EDA Games le solicita implementar la versión prototipo del juego. De esta forma, le
ha entregado dos insumos:
1. Un archivo .csv con el estado inicial de una granja. Este archivo contiene una lı́nea por cada SansaGotchi
que ha pasado por la granja. Cada lı́nea posee la siguiente información separada por punto y coma (;):
• Id. único del SansaGotchi.
• Nombre del SansaGotchi.
• Nivel de Felicidad del SansaGotchi.
• Nivel de Alimentación del SansaGotchi.
• Nivel de Suciedad del SansaGotchi.
• Status del SansaGotchi (vivo o muerto)
A continuación, se muestra un ejemplo con el archivo Initial SansaGotchi1.csv. Note que los puntos
suspensivos (...) indican que hay muchas más lı́neas que las que se muestran. Recuerde que su empleador
espera que este archivo se vaya actualizando constantemente a través de los usos del juego.
Initial SansaGotchi1.csv
...
3 ; SashaWaybright ; 7 ; 9 ; 1 ; vivo
4 ; Lady_Gaga ; 8 ; 0 ; 0 ; vivo
5 ; Wario ; 2 ; 7 ; 1 ; vivo
6 ; Fernanda ; 8 ; 4 ; 0 ; vivo
7 ; Karol_G ; 6 ; 5 ; 2 ; vivo
...
16; Ralph_Wiggum ; 0 ; 9 ; 0 ; vivo
1 7 ; M a t ı́ a s ; 1 ; 1 0 ; 2 ; v i v o
18; MaxTennyson ; 1 ; 4 ; 2 ; vivo
...
2. Un archivo cabecera, harvestPou.h, la cual contiene información base y obligatoria a ser usada en la tarea.
En este se encuentran bibliotecas estándar de C y tres (3) structs para poder desarrollar el prototipo del
juego:
• El struct SansaGotchi representa a una mascota y sus atributos.
• El struct plort representa una feca o plort de un SansaGotchi.
• El struct cementerio representa un conjunto de SansaGotchi que han fallecido.
Considere además que todo lo que está en los structs debe ser utilizado. Además, no podrá
eliminar elementos desde los structs, sólo agregar cosas nuevas a éstos.
Page 2
harvestPou.h
#i n c l u d e <s t d i o . h>
#i n c l u d e < s t r i n g . h>
#i n c l u d e < s t d l i b . h>
typedef s t r u c t plort {
struct plorts ∗ siguiente ; // Puntero p a r a a p u n t a r a l siguiente plort
} plort_t ;
(a) (10 puntos) Leer el archivo de configuración de los SansaGotchis que han pasado por la granja y cargarlos
en Estructuras de Datos (EDAs) independientes, encargadas de:
• Manejar la colección de SansaGotchis vivos, o granja.
• Manejar la colección de SansaGotchis muertos, o cementerio.
• Manejar la colección de plorts de cada Sansagotchi vivo.
Considere que el nombre del archivo de configuración inicial será obligatoriamente un parámetro
del ejecutable.
(b) (15 puntos) Crear un archivo, llamado granja.c, en donde implemente la interfaz de la Estructura de
Datos (EDA) escogida para almacenar la información de la granja (SansaGotchis vivos). Esta EDA debe
usar obligatoriamente el struct SansaGotchi como base. Considere que la interfaz debe ser capaz, al menos,
de:
• Añadir un nuevo SansaGotchi en la EDA.
• Traspasar un SansaGotchi de la EDA al cementerio.
• Buscar la ubicación de un SansaGotchi en la EDA.
• Imprimir la info de todos los elementos de la EDA.
• Mostrar un resumen del contenido en la EDA.
• Vaciar la EDA.
(c) (15 puntos) Crear un archivo, llamado plort.c, en donde implemente la interfaz de la Estructura de Datos
(EDA) escogida para manejar la cantidad de plorts que un SansaGotchi acumula. Esta EDA debe obliga-
toriamente usar el struct plort. Además, considere que la interfaz debe ser capaz, al menos, de:
• Añadir un plort en la EDA.
• Eliminar un plort de la EDA.
• Contar la cantidad de plorts en la EDA.
• vaciar la EDA.
(d) (15 puntos) Crear un archivo, llamado cementerio.c, en donde implemente la interfaz de la Estructura
de Datos (EDA) escogida para manejar la información del cementerio (SansaGotchis muertos). Esta EDA
debe obligatoriamente utilizar el struct cementerio. La interfaz debe incluir, al menos, las siguientes
funcionalidades:
Page 3
• Añadir un SansaGotchi fallecido a la EDA.
• Encontrar la tumba de un SansaGotchi.
• Mostrar la causa de muerte de un SansaGotchi.
• Mostrar una lista de los SansaGotchis fallecidos.
• Contar la cantidad de SansaGotchis fallecidos.
(e) (25 puntos) Crear un archivo, llamado acciones.c, en donde implemente las funciones que permitan al
Granjero interactuar con los diversos tipos de SansaGotchis. Las acciones mı́nimas esperadas son:
• Acariciar a un SansaGotchi: Esto aumenta el Nivel de Felicitdad de un SansaGotchi vivo en un número
aleatorio entre uno (1) y (3), inclusive.
• Alimentar a un SansaGotchi: Esto aumenta el Nivel de Alimentación de un SansaGotchi vivo en un
número aleatorio entre uno (1) y (3), inclusive.
• Limpiar a un SansaGotchi: Esto retira una cantidad aleatoria de plorts acumulados por un SansaGotchi
vivo, entre (1) y el máximo acumulado, inclusive.
• Llamar a un SansaGotchi: Buscar a un SansaGotchi vivo por su nombre.
• Funeral SansaGotchi: Enterrar a un SansaGotchi que acaba de fallecer.
• Visitar a un SansaGotchi: Visitar la tumba de un SansaGotchi muerto, a partir de su nombre.
(f) (20 puntos) Crear un programa, en el archivo main.c, que permita jugar Harvest Pou: SansaGotchi
Land. Este programa funcionará por turnos, donde cada turno es una interacción del granjero con alguno
de los SansaGotchis, ya sean vivos (en la granja) o muertos (en el cementerio). El programa debe mostrar
por pantalla, a través de un menú, la listas de acciones que el granjero puede efectuar y cuál SansaGotchi
será el destinatario de dicha acción. Recuerde que debe dar la opción de cerrar el juego y, cuando
esta sea seleccionada, actualizar el archivo de entrada con la información actual de todos los
SansaGotchis.
Además, cada cierta cantidad de turnos, ingresada como parámetro del ejecutable, se debe actualizar
los atributos de todos los SansaGotchis vivos:
• El Nivel de Felicidad debe bajar en al menos una unidad.
• El nivel de Alimentación debe bajar en al menos una unidad.
• La cantidad de plorts, debe aumentar en al menos uno.
• El status de vida debe actualizarse según las reglas de fallecimiento.
• El granjero deberá enterrar a todos los SansaGotchis que fallecieron.
Page 4
2 Reglas de entrega y Consideraciones Generales
• Este trabajo debe realizarse individualmente, vale decir, en grupos de un (1) estudiante. No se harán
excepciones.
• El programa debe ser desarrollado en lenguaje C, y compilado con la versión de gcc disponible en el servidor
Aragorn1 : gcc 4.8.5.
• No hay un lı́mite máximo de funciones a realizar, si ud. desea modularizar al máximo, tiene la libertad de
hacerlo.
• La tarea debe ser entregada en la plataforma AULA USM, el dı́a Viernes 31 de Mayo de 2024 hasta las
23:59:59 Hora de Chile Continental (UTC -4).
• Cada minuto de atraso, implicará un descuento siguiendo la sucesión de Fibonacci. Ası́, diez minutos de
atraso implicarı́an un descuento de cincuenta y cinco (55) puntos (f (10) = 55).
• La tarea debe incluirse en un archivo comprimido .tar.gz. El nombre del archivo debe seguir la siguiente es-
tructura: tarea1-eda-nombre-apellido-paralelo.tar.gz; e.g., tarea1-eda-oliver-atom-p200.tar.gz.
• El archivo comprimido debe incluir, al menos, lo siguiente:
– Cabecera(s) .h: Archivo cabecera en el cual se deben incluir todas las bibliotecas a usar en el pro-
grama, además de las definiciones de macros, variables globales, tipos de datos personalizados, struct
y prototipos de todas las funciones.
– Códigos .c: Código del programa solicitado. Considere que éste es un desafı́o de al menos tamaño me-
diano, por lo tanto es recomendable dividir el código en diferentes archivos agrupados por su finalidad.
– README: Archivo de texto plano en el cual se debe incluir: (1) una pequeña reseña del programa, (2)
las condiciones de compilación y ejecución, (3) las instrucciones de compilación y ejecución, y (4) la
información del creador del sistema.
– Makefile: Archivo de compilación automática del sistema. Una cápsula de video para su confección
se encontrará disponible en AULA USM.
• La revisión de los programas se hará utilizando diferentes archivos de tamaño variable. Por lo tanto, debe
programar de forma genérica para cualquier cantidad de información de entrada.
• Cada fuga de memoria será penalizada. Utilice valgrind para verificar la correcta asignación, uso y lib-
eración de memoria en la ejecución de su programa.
• Si su programa no compila, su nota será automáticamente un cero (0).
• La creatividad en la interfaz del juego, será premiada hasta con 10 puntos extra en la nota final de
la tarea.
• Se realizará un ranking, entre las tareas que hayan sido realizadas de forma completa, respecto a la utilización
de memoria entregada por valgrind. Los primeros 10 estudiantes en este ranking, tendrán un bono
entre 5 y 15 puntos de acuerdo al lugar obtenido, en la pregunta de manejo de memoria del
Certamen 1 de la asignatura.
• Cualquier atisbo de copia, será penalizada con máxima severidad.
• No deje la tarea para último momento, planifique bien sus tiempos y constrúyala paso a paso.
• Consulte sus dudas, lo más pronto posible, a través de los diversos medios de la asignatura.
Page 5