Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save jonmircha/7427f4f3439cffc5d7c3eb4be8d89791 to your computer and use it in GitHub Desktop.

Select an option

Save jonmircha/7427f4f3439cffc5d7c3eb4be8d89791 to your computer and use it in GitHub Desktop.

Proyecto Semestral: Diseño y Desarrollo de Aplicaciones Interactivas Complejas

🔹 BLOQUE A — Fundamentos técnicos

Parte 1 — Programación

1. Diferencia entre variable local y global

  • 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.

2. Diferencia entre patrones de diseño y arquitectura de software

  • 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.


3. ¿Cuándo usar arreglo vs diccionario/objeto?

  • 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.

4. ¿Qué problema resuelve Git?

Permite:

  • Control de versiones
  • Historial de cambios
  • Trabajo colaborativo
  • Revertir errores
  • Manejo de ramas

Evita perder código o sobrescribir trabajo.


Parte 2 — Arquitectura

5. ¿Qué es MVC?

Patrón que separa responsabilidades:

  • Model → datos/lógica
  • View → interfaz
  • Controller → interacción/flujo

Esquema:

Usuario → Controller → Model
              ↓
            View

6. Ventajas de programar por componentes/módulos

  • Menor acoplamiento
  • Mayor reutilización
  • Mantenimiento más fácil
  • Pruebas independientes
  • Escalabilidad

7. ¿Qué es un game loop?

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.


8. Diferencia entre prototipo y MVP

  • 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.


Parte 3 — UX / Diseño

9. ¿Qué es feedback?

Respuesta inmediata del sistema ante una acción del usuario para confirmar que ocurrió algo (sonido, animación, mensaje, cambio visual).


10. Tres factores que facilitan el aprendizaje

  • Claridad visual
  • Reglas simples
  • Retroalimentación inmediata
  • Onboarding /tutorial
  • Consistencia en controles

🔹 BLOQUE B — Reto práctico


✅ Solución en JavaScript (consola / Node)

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);

✅ Solución en Python

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)

✅ Pseudocódigo funcional

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)

🔹 BLOQUE C — IA + criterio profesional

11. Herramientas de IA usadas

🦾🤖


12. Prompt ejemplo

“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.”


13. Riesgos de depender demasiado de IA

  • Código incorrecto o inseguro
  • Falta de comprensión
  • Deuda técnica
  • Soluciones genéricas
  • Dependencia excesiva
  • Problemas de licencias o privacidad

14. Fases del proyecto

  • Investigación/descubrimiento
  • Diseño
  • Prototipo
  • Producción
  • Pruebas
  • Pulido
  • Lanzamiento
  • Mantenimiento

15. Proyecto más complejo.

🧐😱

16. ¿Qué te cuesta más: diseño o código?

🎨💻

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment