Proyecto Semestral: Diseño y Desarrollo de Aplicaciones Interactivas Complejas
- Una variable local existe solo dentro del bloque o función donde se declara y no puede ser accedida desde fuera.
- Una variable global puede usarse desde cualquier parte del programa, pero aumenta el acoplamiento y el riesgo de errores por cambios inesperados.
- Los patrones de diseño son soluciones pequeñas y reutilizables a problemas específicos (ej. Observer, Singleton, State).
- La arquitectura de software define la estructura general del sistema y cómo se organizan sus partes (ej. MVC, ECS, cliente-servidor).
Los patrones viven dentro de la arquitectura.
- Arreglo: cuando el orden importa y se accede por índice (listas, colecciones secuenciales).
- Diccionario/objeto: cuando se accede por clave y se necesita búsqueda rápida o datos con propiedades nombradas.
Permite:
- Control de versiones
- Historial de cambios
- Trabajo colaborativo
- Revertir errores
- Manejo de ramas
Evita perder código o sobrescribir trabajo.
Patrón que separa responsabilidades:
- Model → datos/lógica
- View → interfaz
- Controller → interacción/flujo
Esquema:
Usuario → Controller → Model
↓
View
- Menor acoplamiento
- Mayor reutilización
- Mantenimiento más fácil
- Pruebas independientes
- Escalabilidad
Es el ciclo principal que se ejecuta constantemente durante el juego:
while (running):
procesar_input()
actualizar_estado()
renderizar()
Permite que el juego responda en tiempo real.
- Prototipo: explora ideas, puede ser incompleto o desechable.
- MVP: versión mínima funcional lista para usuarios reales.
El prototipo valida conceptos; el MVP valida mercado/uso.
Respuesta inmediata del sistema ante una acción del usuario para confirmar que ocurrió algo (sonido, animación, mensaje, cambio visual).
- Claridad visual
- Reglas simples
- Retroalimentación inmediata
- Onboarding /tutorial
- Consistencia en controles
class FinanceGame {
constructor() {
this.balance = 1000;
this.history = [];
}
addIncome(amount) {
this.balance += amount;
this.history.push({ type: "income", amount });
this.checkStatus();
}
addExpense(amount) {
this.balance -= amount;
this.history.push({ type: "expense", amount });
this.checkStatus();
}
checkStatus() {
console.log("Saldo:", this.balance);
if (this.balance < 0) {
console.log("⚠️ Deuda");
} else if (this.balance > 2000) {
console.log("🎉 Meta alcanzada");
}
}
}
// uso
const game = new FinanceGame();
game.addIncome(500);
game.addExpense(200);
game.addExpense(1500);class FinanceGame:
def __init__(self):
self.balance = 1000
self.history = []
def add_income(self, amount):
self.balance += amount
self.history.append(("income", amount))
self.check_status()
def add_expense(self, amount):
self.balance -= amount
self.history.append(("expense", amount))
self.check_status()
def check_status(self):
print("Saldo:", self.balance)
if self.balance < 0:
print("⚠️ Deuda")
elif self.balance > 2000:
print("🎉 Meta alcanzada")
game = FinanceGame()
game.add_income(600)
game.add_expense(400)crearJuego(balanceInicial):
balance = balanceInicial
historial = []
funcion ingreso(monto):
balance = balance + monto
agregar(historial, ("income", monto))
estado()
funcion gasto(monto):
balance = balance - monto
agregar(historial, ("expense", monto))
estado()
funcion estado():
imprimir(balance)
si balance < 0:
imprimir("deuda")
si balance > 2000:
imprimir("meta alcanzada")
retornar { ingreso, gasto }
juego = crearJuego(1000)
juego.ingreso(500)
juego.gasto(300)
🦾🤖
“Actúa como game designer. Diseña una mecánica central para una app educativa de finanzas personales donde el jugador aprenda a presupuestar. Incluye reglas, variables, sistema de recompensas, progresión y ejemplo de implementación en pseudocódigo.”
- Código incorrecto o inseguro
- Falta de comprensión
- Deuda técnica
- Soluciones genéricas
- Dependencia excesiva
- Problemas de licencias o privacidad
- Investigación/descubrimiento
- Diseño
- Prototipo
- Producción
- Pruebas
- Pulido
- Lanzamiento
- Mantenimiento
🧐😱
🎨💻