-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
173 lines (145 loc) · 7.33 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
from gato import Gato
import datetime
import os
from graphviz import Digraph
def modulPet(): #módulo petmanager
# Limpiar la pantalla
os.system('cls' if os.name == 'nt' else 'clear')
print("--- Módulo PetManager ---")
print("1. Cargar Archivo")
print("2. Salir")
opcion = input("Seleccione una opción: ")
if opcion == "1":
leerArchivoPetManager()
elif opcion == "2":
menu()
else:
print("Opción incorrecta")
def salir():
print("Gracias por usar el programa")
input("Presione una tecla para continuar...")
def menu():
print("| LENGUAJES FORMALES Y DE PROGRAMACION |")
print("| SECCION: B- |")
print("| CARNET:20201367 |")
input("Presione Enter para continuar...")
while True:
print("\n--- Menú Principal ---")
print("1. Módulo PetManager")
print("2. Salir")
opcion = input("Seleccione una opción: ")
if opcion == "1":
modulPet()
elif opcion == "2":
salir()
break
else:
print("Opción incorrecta")
def procesarComandosPetManager(comandos):
gatos = {} # Diccionario para almacenar los gatos creados
with open("resultado.petworld_result", "w") as archivo_salida: # Abre un archivo de salida llamado "resultado.petworld_result" en modo de escritura
for comando in comandos:
partes = comando.split(':')
if partes[0] == "Crear_Gato": # Procesamiento de los Comandos:
nombre_gato = partes[1]
gatos[nombre_gato] = Gato(nombre_gato) # Crear un nuevo gato y almacenarlo en el diccionario
mensaje = f"[{datetime.datetime.now()}] Se creó el gato {nombre_gato}\n"
print(mensaje)
archivo_salida.write(mensaje)
elif partes[0] == "Dar_de_Comer":
nombre_gato = partes[1].split(',')[0] # Obtener el nombre del gato
if nombre_gato in gatos: # Verificar si el gato existe en el diccionario
gato = gatos[nombre_gato]
if gato.vivo:
peso_ratón = int(partes[1].split(',')[1])
gato.comer(peso_ratón)
mensaje = f"[{datetime.datetime.now()}] {nombre_gato}, Gracias por alimentarme. Ahora mi energía es {gato.energia}.\n"
print(mensaje)
archivo_salida.write(mensaje)
else:
mensaje = f"[{datetime.datetime.now()}] Muy tarde. Ya me morí.\n"
print(mensaje)
archivo_salida.write(mensaje)
else:
mensaje = f"[{datetime.datetime.now()}] Gato no encontrado: {nombre_gato}\n"
print(mensaje)
archivo_salida.write(mensaje)
elif partes[0] == "Jugar":
nombre_gato = partes[1].split(',')[0] # Obtener el nombre del gato
if nombre_gato in gatos: # Verificar si el gato existe en el diccionario
gato = gatos[nombre_gato]
if gato.vivo:
tiempo_juego = int(partes[1].split(',')[1])
gato.jugar(tiempo_juego)
mensaje = f"[{datetime.datetime.now()}] {nombre_gato}, Gracias por jugar conmigo. Ahora mi energía es {gato.energia}.\n"
print(mensaje)
archivo_salida.write(mensaje)
else:
mensaje = f"[{datetime.datetime.now()}] Ya me morí.\n"
print(mensaje)
archivo_salida.write(mensaje)
else:
mensaje = f"[{datetime.datetime.now()}] Gato no encontrado: {nombre_gato}\n"
print(mensaje)
archivo_salida.write(mensaje)
elif partes[0] == "Resumen_Mascota":
nombre_gato = partes[1]
if nombre_gato in gatos: # Verificar si el gato existe en el diccionario
gato = gatos[nombre_gato]
mensaje = f"[{datetime.datetime.now()}] {nombre_gato}, Energía: {gato.energia}, Tipo: Gato, Estado: {'Vivo' if gato.vivo else 'Muerto'}\n"
print(mensaje)
archivo_salida.write(mensaje)
# Generar el gráfico con la información del gato
generar_grafico(nombre_gato, gato.energia, 'Vivo' if gato.vivo else 'Muerto')
else:
mensaje = f"[{datetime.datetime.now()}] Gato no encontrado: {nombre_gato}\n"
print(mensaje)
archivo_salida.write(mensaje)
elif partes[0] == "Resumen_Global":
archivo_salida.write(f"[{datetime.datetime.now()}] {'-'*30} Resumen Global {'-'*30}\n")
for nombre_gato, gato in gatos.items():
mensaje = f"[{datetime.datetime.now()}] {nombre_gato}, Energía: {gato.energia}, Tipo: Gato, Estado: {'Vivo' if gato.vivo else 'Muerto'}\n"
print(mensaje)
archivo_salida.write(mensaje)
if not gatos: # Verificar si no hay gatos
mensaje = f"[{datetime.datetime.now()}] No hay gatos para resumir.\n"
print(mensaje)
archivo_salida.write(mensaje)
archivo_salida.write(f"[{datetime.datetime.now()}] {'-'*70}\n")
else:
mensaje = f"[{datetime.datetime.now()}] Comando desconocido: {partes[0]}\n"
print(mensaje)
archivo_salida.write(mensaje)
def leerArchivoPetManager():
print("\nHa seleccionado cargar archivo .petmanager\n")
ruta = input("Ingrese la ruta del archivo: ")
while True:
nombre, extension = os.path.splitext(ruta)
if extension == ".petmanager": # verifica que la extension se .petmanager
print("\nArchivo válido\n")
break
else:
print("\nArchivo inválido\n")
ruta = input("\nIngrese la ruta del archivo: ")
with open(ruta, "r") as archivo: # Abre el archivo en modo de lectura.
comandos_petmanager = [linea.strip() for linea in archivo] #Lee cada línea del archivo
#y elimina los espacios en blanco al inicio y al final de cada línea.
procesarComandosPetManager(comandos_petmanager) #Almacena los comandos del archivo en una lista
# Función para generar el gráfico
def generar_grafico(nombre_gato, energia, estado):
# Crear un objeto Digraph
dot = Digraph()
# Agregar el nodo principal (nombre del gato)
dot.node(nombre_gato, label=nombre_gato)
# Agregar nodos secundarios (energía y estado)
dot.node('energia', label=f'Energía: {energia}')
dot.node('tipo', label=f'Tipo: Gato')
dot.node('estado', label=f'Estado: {estado}')
# Agregar bordes desde el nodo principal a los nodos secundarios
dot.edge(nombre_gato, 'energia')
dot.edge(nombre_gato, 'tipo')
dot.edge(nombre_gato, 'estado')
# Renderizar y guardar el gráfico como un archivo PNG con un nombre único
nombre_archivo = f'grafico_{nombre_gato}'
dot.render(nombre_archivo, format='png', cleanup=True)
menu()