2026 semestre 2
En parejas o equipos de tres personas
Se les entrega un juego de Godot en C# que ya funciona, pero está mal organizado.
El taller no es hacer el juego. Es reorganizarlo aplicando correctamente los conceptos de POO, y extenderlo sin romper lo que ya anda.
Un vendedor de madera (Pawn) recorre el mapa. Hoy:
⬇ Descargar el diagrama (Draw.io) — es el mínimo. Lo que haga falta para limpiar el código va por encima.
Hoy Lancer.cs, Goblin.cs y Monk.cs tienen el mismo
bloque de código copiado tres veces: el campo _animator, el
_Ready() y un _Process() vacío.
NPC con lo comúnLancer, Goblin y Monk deben derivar de NPCEste es el corazón del taller. Hoy el vendedor pregunta por el tipo concreto:
// ANTES (Seller.cs)
if (_npc is Lancer lancer)
lancer.Buy(this);
// DESPUES
if (_npc is IBuyer buyer) buyer.Buy(this);
if (_npc is IThief thief) thief.Steal(this);
Crear IBuyer (Price, Buy) e IThief
(Steal), y que el Seller deje de conocer clases concretas.
El proyecto ya trae el sprite, la escena monk.tscn y un Monk.cs vacío.
Monk : NPC, IBuyerworld.tscn, porque todavía no está en el mapa
Prueba de fuego: si el refactor está bien hecho, el Seller no se toca para que esto
funcione.
Goblin : NPC, IThief con su método StealRegla concreta: si el vendedor no tiene madera, el Goblin no puede robar y no se descuenta nada.
Transaction con NPC y
TotalCounts como mínimo, y sus dos especializaciones:
Sale y Theft
Seller compone la lista: las crea, las posee y mueren con él
Una transacción por NPC: venderle dos veces al mismo Lancer
no crea dos instancias — incrementa el TotalCounts de la que ya
existe.
La tecla Z debe imprimir el historial de transacciones: qué NPC, qué tipo de transacción y cuánto acumula cada uno.
Ustedes deciden el formato y qué más guarda cada transacción. Justifíquenlo en la sustentación.
Debe seguir andando: moverse, animarse, el contador de madera, el contador de monedas, el indicador de "X para vender" y la venta al Lancer.
La regla debe salir del diseño, no de un condicional:
if (npc is Lancer) o cualquier chequeo de tipo concretoName, strings o tags para decidir si vende o le robanesComprador o esLadron_animator + _Ready() en cada NPCEsto se evalúa aparte:
_Process() no lleva lógica de negocio: orquesta y delega a métodos con
nombre[Export]El diagrama que entregan no es el que les di.
Espejo exacto. Si crearon una clase extra para limpiar algo, va al diagrama.
NPC y eliminación de la duplicaciónIBuyer / IThief y eliminación
del chequeo de tipo concretoMonk como segundo comprador con precio propioGoblin.Steal funcionandoSale / Theft) e historial
con ZEl taller no será evaluado si:
No hay excepciones.