commit 441143482ac3f60e3ecc452fc950734afd5257eb Author: Mauro Vietri Date: Wed Apr 23 21:09:12 2025 -0300 Initial commit diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..855c76c --- /dev/null +++ b/Makefile @@ -0,0 +1,11 @@ +CC=gcc +CFLAGS=-Wall -Wextra -std=c99 +OBJ=main.o horno.o empanada.o utils.o + +all: horno_simulator + +horno_simulator: $(OBJ) + $(CC) $(CFLAGS) -o horno_simulator $(OBJ) + +clean: + rm -f *.o horno_simulator diff --git a/empanada.c b/empanada.c new file mode 100644 index 0000000..8218e38 --- /dev/null +++ b/empanada.c @@ -0,0 +1,48 @@ +#include "empanada.h" +#include +#include + +void inicializarEmpanada(Empanada* e, const char* relleno) { + strncpy(e->relleno, relleno, 29); + e->tiempo_coccion = 5 + rand() % 6; + e->tiempo_actual = 0; + e->activa = 1; + e->estado = CRUDA; + + int azar = rand() % 100; + if (azar < 5) { + e->estado = CUANTICA; + } else if (azar < 15) { + e->estado = SIN_RELLENO; + e->tiene_relleno = 0; + } else { + e->tiene_relleno = 1; + } +} + +void cocinar(Empanada* e) { + if (e->activa == 0) return; + if (e->estado == CUANTICA || e->estado == SIN_RELLENO || e->estado == QUEMADA) return; + + e->tiempo_actual++; + + if (e->tiempo_actual < e->tiempo_coccion) { + e->estado = EN_COCINA; + } else if (e->tiempo_actual == e->tiempo_coccion) { + e->estado = LISTA; + } else { + e->estado = QUEMADA; + } +} + +const char* estadoToString(Estado estado) { + switch (estado) { + case CRUDA: return "Cruda"; + case EN_COCINA: return "En cocina"; + case LISTA: return "Lista"; + case QUEMADA: return "Quemada"; + case CUANTICA: return "Cuantica"; + case SIN_RELLENO: return "Sin relleno"; + default: return "Desconocido"; + } +} diff --git a/empanada.h b/empanada.h new file mode 100644 index 0000000..68d15b5 --- /dev/null +++ b/empanada.h @@ -0,0 +1,26 @@ +#ifndef EMPANADA_H +#define EMPANADA_H + +typedef enum { + CRUDA, + EN_COCINA, + LISTA, + QUEMADA, + CUANTICA, + SIN_RELLENO +} Estado; + +typedef struct { + char relleno[30]; + int tiempo_coccion; + int tiempo_actual; + Estado estado; + int tiene_relleno; + int activa; +} Empanada; + +const char* estadoToString(Estado estado); +void cocinar(Empanada* e); +void inicializarEmpanada(Empanada* e, const char* relleno); + +#endif diff --git a/empanada.o b/empanada.o new file mode 100644 index 0000000..ead395d Binary files /dev/null and b/empanada.o differ diff --git a/horno.c b/horno.c new file mode 100644 index 0000000..c062893 --- /dev/null +++ b/horno.c @@ -0,0 +1,26 @@ +#include +#include "horno.h" + +void mostrarEmpanadas(Empanada horno[], int cantidad) { + int mostradas = 0; + for (int i = 0; i < cantidad; i++) { + if (horno[i].activa == 0) continue; + + printf("Empanada %d: %s - %s (%d/%d)", + i + 1, + horno[i].relleno, + estadoToString(horno[i].estado), + horno[i].tiempo_actual, + horno[i].tiempo_coccion + ); + if (horno[i].tiene_relleno == 0) printf(" [SIN RELLENO]"); + + printf("\n"); + mostradas++; + } + + if (mostradas == 0) { + printf("El horno está vacio!\n"); + } +} + diff --git a/horno.h b/horno.h new file mode 100644 index 0000000..1d24d00 --- /dev/null +++ b/horno.h @@ -0,0 +1,10 @@ +#ifndef HORNO_H +#define HORNO_H + +#include "empanada.h" + +#define MAX_EMPANADAS 10 + +void mostrarEmpanadas(Empanada horno[], int cantidad); + +#endif diff --git a/horno.o b/horno.o new file mode 100644 index 0000000..6be2bbb Binary files /dev/null and b/horno.o differ diff --git a/horno_simulator b/horno_simulator new file mode 100755 index 0000000..7914b1e Binary files /dev/null and b/horno_simulator differ diff --git a/main.c b/main.c new file mode 100644 index 0000000..5ced2c6 --- /dev/null +++ b/main.c @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include +#include "empanada.h" +#include "horno.h" +#include "utils.h" + +int main() { + Empanada horno[MAX_EMPANADAS]; + srand(time(NULL)); + + for (int i = 0; i < MAX_EMPANADAS; i++) { + horno[i].activa = 0; + } + + while (1) { + limpiarPantalla(); + imprimirHeader(); + printf("\n1. Agregar empanada\n2. Cocinar 1 segundo\n3. Mostrar horno\n4. Sacar empanada\n5. Salir\n> "); + int opcion; + scanf("%d", &opcion); + getchar(); + + switch (opcion) { + case 1: + char relleno[30]; + printf("Relleno: "); + fgets(relleno, sizeof(relleno), stdin); + relleno[strcspn(relleno, "\n")] = '\0'; + + int index = -1; + for (int i = 0; i < MAX_EMPANADAS; i++) { + if (horno[i].activa == 0) { + index = i; + break; + } + } + if (index != -1) { + inicializarEmpanada(&horno[index], relleno); + } + else { + printf("El horno está lleno.\n"); + } + break; + case 2: + for (int i = 0; i < MAX_EMPANADAS; i++) { + cocinar(&horno[i]); + } + printf("Cocinando...\n"); + sleep(1); + break; + case 3: + mostrarEmpanadas(horno, MAX_EMPANADAS); + pausar(); + break; + case 4: + int cual; + printf("¿Cual queré sacar? [1 a %d]?", MAX_EMPANADAS); + scanf("%d", &cual); + getchar(); + cual--; + + if (cual >= 0 && cual < MAX_EMPANADAS && horno[cual].activa == 1) { + printf("\nQue disfrutes tu empanada de '%s [%s]', campeón", horno[cual].relleno, estadoToString(horno[cual].estado)); + horno[cual].activa = 0; + } else { + printf("Ahi no hay nada!"); + } + pausar(); + break; + case 5: + exit(0); + } + } + + return 0; +} diff --git a/main.o b/main.o new file mode 100644 index 0000000..46509b1 Binary files /dev/null and b/main.o differ diff --git a/utils.c b/utils.c new file mode 100644 index 0000000..969431e --- /dev/null +++ b/utils.c @@ -0,0 +1,22 @@ +#include "utils.h" +#include +#include + +void limpiarPantalla() { + printf("\033[2J\033[H"); +} + +void pausar() { + printf("\nPresione ENTER para continuar..."); + getchar(); +} + +void imprimirHeader() { + printf("▗▄▄▄▖▗▖ ▗▖ ▗▄▄▖▗▄▄▄▖▗▄▄▖ ▗▄▖ ▗▄▄▖ ▗▄▄▖ ▗▄▄▖\n"); + printf("▐▌ ▐▛▚▖▐▌▐▌ ▐▌ ▐▌ ▐▌ ▐▌ ▐▌▐▌ ▐▌▐▌ ▐▌▐▌ \n"); + printf("▐▛▀▀▘▐▌ ▝▜▌▐▌▝▜▌▐▛▀▀▘▐▛▀▚▖ ▐▛▀▜▌▐▛▀▘ ▐▛▀▘ ▝▀▚▖\n"); + printf("▐▙▄▄▖▐▌ ▐▌▝▚▄▞▘▐▙▄▄▖▐▌ ▐▌ ▐▌ ▐▌▐▌ ▐▌ ▗▄▄▞▘\n"); + printf("\n"); + printf(" - Horno Simulator 2025 \n"); + printf("\n"); +} diff --git a/utils.h b/utils.h new file mode 100644 index 0000000..d8d313e --- /dev/null +++ b/utils.h @@ -0,0 +1,8 @@ +#ifndef UTILS_H +#define UTILS_H + +void limpiarPantalla(); +void pausar(); +void imprimirHeader(); + +#endif diff --git a/utils.o b/utils.o new file mode 100644 index 0000000..311cb3a Binary files /dev/null and b/utils.o differ