Café y Código

POO Gamer · Clases & Asociación

🎮 40 Desafíos · Ruta Guiada

Desafíos de POO Game — Asociación y Combate por Turnos

Aprende a modelar asociación y composición pura entre clases (sin herencia) con temática de videojuegos. Empieza por los 20 retos nuevos ordenados por dificultad: asociación de 2 clases (1–10),3 clases sin usar listas (11–15) y 4 clases (16–20); después salta a los20 combates por turnos 1v1 (21–40) con armas, escudos, habilidades y listas de ítems consumibles.

Ruta canónica: /challenges/poo-game · Módulos relacionados: /challenges/poo (clases básicas), /challenges/inheritance (herencia) y /challenges/interface (interfaces).

🗺️ Ruta de aprendizaje — elige un nivel para filtrar

  • 🟢 Nivel 1 · Asociación básica10 retosUna clase principal asociada a una sola clase. Indicaciones de los métodos que puedes hacer.Desafíos 01 – 10
  • 🟡 Nivel 2 · Asociación intermedia5 retosTres clases conectadas entre sí, resolviendo la relación con atributos de referencia (sin usar List).Desafíos 11 – 15
  • 🟠 Nivel 3 · Asociación avanzada5 retosCuatro clases que forman un mini-motor de juego con cadena de asociaciones.Desafíos 16 – 20
  • 🔴 Nivel 4 · Combate por turnos20 retosCombates 1v1 completos con armas, escudos, listas de ítems y simulaciones por turnos.Desafíos 21 – 40

40 desafíos · Selecciona o expande para ver el diagrama de asociación UML y probar la lógica:

1. Pac-Man y los puntos del laberinto

🕹️ Pac-Man (clásico de arcade)🟢 2 clases
Clase Principal: Pacman · 2 clases en total · 1 conexiones (o-- / *--)
0 / 4
🕹️
Escenario de Juego:

Pac-Man recorre el laberinto celda a celda. Cada celda puede contener un punto con un valor de 10 puntos. Cuando Pac-Man pisa un punto, se lo come y suma su valor a su marcador; si vuelve a pasar por la misma celda, el punto ya no vale nada.

🎯 Misión POO: Crea la clase Punto (el objeto que está en el mapa) y la clase Pacman (el personaje). En el constructor de Pacman NO crees el punto: lo recibes como argumento en comer(punto). Completa todos los métodos del diagrama y prueba en Main que solo puede comer el punto que tiene debajo.

💡 Métodos que puedes implementar

  • Punto.estaComido(): devuelve true si el punto ya fue recolectado
  • Punto.comer(): cambia el punto a comido = true
  • Punto.coincide(fila, columna): compara la posición del punto con la del personaje
  • Pacman.mover(fila, columna, direccion): actualiza la posición actual
  • Pacman.estaEnPunto(punto): devuelve true si comparte celda con un punto sin comer
  • Pacman.comer(punto): si está encima del punto, lo marca como comido y suma el valor
UMLDiagrama de Asociación — Pac-Man y los puntos del laberinto
Pacman
-nombre: StringString nombrenombrenombre
-fila: intint filafilafila
-columna: intint columnacolumnacolumna
-direccion: StringString direcciondirecciondireccion
-puntosComidos: intint puntosComidospuntosComidospuntosComidos
-marcador: intint marcadormarcadormarcador
+mover(nuevaFila: int, nuevaColumna: int, nuevaDireccion: String)mover(nuevaFila: int, nuevaColumna: int, nuevaDireccion: String)mover(nuevaFila, nuevaColumna, nuevaDireccion)mover(nuevaFila, nuevaColumna, nuevaDireccion)
+estaEnPunto(punto: Punto)estaEnPunto(punto: Punto)estaEnPunto(punto)estaEnPunto(punto)
+comer(punto: Punto)comer(punto: Punto)comer(punto)comer(punto)
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◇Asociación (◇)come 1
Punto
-fila: intint filafilafila
-columna: intint columnacolumnacolumna
-valor: intint valorvalorvalor
-comido: booleanboolean comidocomidocomido
+comer()comer()comer()comer()
+estaComido()estaComido()estaComido()estaComido()
+coincide(fila: int, columna: int)coincide(fila: int, columna: int)coincide(fila, columna)coincide(fila, columna)
🔍 Clic para ampliar y hacer zoom

2. La pieza de Tetris que cae en el tablero

🧱 Tetris (clásico de bloques)🟢 2 clases
Clase Principal: Tablero · 2 clases en total · 1 conexiones (o-- / *--)
0 / 4
🧱
Escenario de Juego:

En Tetris el tablero tiene filas y columnas fijas y en todo momento hay una sola pieza activa cayendo. Cuando la pieza deja de bajar, se completa una línea y el tablero genera una pieza nueva automáticamente.

🎯 Misión POO: Crea la clase Pieza y la clase Tablero. Esta vez la relación es de COMPOSICIÓN: el Tablero crea la Pieza en su propio constructor (new Pieza(...)), por lo que nunca se le pasa una pieza desde afuera. Implementa soltarPieza() para que el tablero genere una pieza nueva cuando la anterior queda quieta.

💡 Métodos que puedes implementar

  • Pieza.moverAbajo(filasMaximas): baja una fila y devuelve false si toca el límite
  • Pieza.moverIzquierda() / moverDerecha(): desplazan la pieza y devuelven si sigue dentro del tablero
  • Pieza.estaQuieta(): true cuando la pieza ya no puede bajar más
  • Tablero.cabe(pieza): pregunta si la pieza sigue dentro de los límites del tablero
  • Tablero.soltarPieza(): si la pieza está quieta, cuenta la línea y genera una pieza nueva
UMLDiagrama de Asociación — La pieza de Tetris que cae en el tablero
Tablero
-filas: intint filasfilasfilas
-columnas: intint columnascolumnascolumnas
-piezaActiva: PiezaPieza piezaActivapiezaActivapiezaActiva
-lineasCompletadas: intint lineasCompletadaslineasCompletadaslineasCompletadas
+cabe(pieza: Pieza)cabe(pieza: Pieza)cabe(pieza)cabe(pieza)
+soltarPieza()soltarPieza()soltarPieza()soltarPieza()
+mostrar()mostrar()mostrar()mostrar()
◆Composición (◆)contiene 1 activa
Pieza
-forma: StringString formaformaforma
-fila: intint filafilafila
-columna: intint columnacolumnacolumna
-quieta: booleanboolean quietaquietaquieta
+moverAbajo(filasTablero: int)moverAbajo(filasTablero: int)moverAbajo(filasTablero)moverAbajo(filasTablero)
+moverIzquierda()moverIzquierda()moverIzquierda()moverIzquierda()
+moverDerecha()moverDerecha()moverDerecha()moverDerecha()
+estaQuieta()estaQuieta()estaQuieta()estaQuieta()
🔍 Clic para ampliar y hacer zoom

3. La rana que cruza los carriles

🐸 Frogger (clásico de arcade)🟢 2 clases
Clase Principal: Rana · 2 clases en total · 1 conexiones (o-- / *--)
0 / 4
🐸
Escenario de Juego:

Frogger es una rana que debe cruzar la calle. Cada carril tiene su propio coche que avanza a una velocidad distinta. Si el coche de ese carril alcanza la columna donde está la rana, pierde una vida.

🎯 Misión POO: Crea la clase Coche (un carril) y la clase Rana (el jugador). La rana recibe el coche como argumento en saltar(coche), no como atributo: la asociación se resuelve por parámetro. Implementa avanzar(), saltar() y estaViva().

💡 Métodos que puedes implementar

  • Coche.avanzar(): suma la velocidad a la columna y vuelve a 0 al salir de la pantalla
  • Coche.estaEn(columna): true si el coche sigue activo y ocupa esa columna
  • Coche.frenar(): desactiva el coche (coche parado en el semáforo)
  • Rana.avanzar(): sube un carril y suma puntos, hasta un máximo
  • Rana.saltar(coche): si el coche está en su columna pierde una vida, si no gana puntos
  • Rana.estaViva(): devuelve si todavía le quedan vidas
UMLDiagrama de Asociación — La rana que cruza los carriles
Rana
-nombre: StringString nombrenombrenombre
-carril: intint carrilcarrilcarril
-columna: intint columnacolumnacolumna
-vidas: intint vidasvidasvidas
-puntos: intint puntospuntospuntos
-carrilMaximo: intint carrilMaximocarrilMaximocarrilMaximo
+avanzar()avanzar()avanzar()avanzar()
+saltar(coche: Coche)saltar(coche: Coche)saltar(coche)saltar(coche)
+estaViva()estaViva()estaViva()estaViva()
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◇Asociación (◇)esquiva 1
Coche
-color: StringString colorcolorcolor
-carril: intint carrilcarrilcarril
-columna: intint columnacolumnacolumna
-velocidad: intint velocidadvelocidadvelocidad
-activo: booleanboolean activoactivoactivo
+avanzar()avanzar()avanzar()avanzar()
+estaEn(columna: int)estaEn(columna: int)estaEn(columna)estaEn(columna)
+frenar()frenar()frenar()frenar()
🔍 Clic para ampliar y hacer zoom

4. El rebote de la pelota en Pong

🏓 Pong (clásico de arcade)🟢 2 clases
Clase Principal: Jugador · 2 clases en total · 1 conexiones (o-- / *--)
0 / 4
🏓
Escenario de Juego:

En Pong la pelota rebota en las paredes y en la pala del jugador. El jugador mueve su pala con una velocidad y marca un punto cada vez que la pelota pasa de largo su lado del campo.

🎯 Misión POO: Crea la clase Pelota (x, y, velocidadX, velocidadY, rebotes) y la clase Jugador (nombre, posicionY, puntos, velocidad). La pelota llama a los métodos del jugador para comprobar el rebote: así una clase trabaja con la otra sin conocerla por dentro. Prueba un saque y dos rebotes.

💡 Métodos que puedes implementar

  • Pelota.mover(anchoCampo, altoCampo): avanza según su velocidad e invierte la vertical en los bordes
  • Pelota.rebotarEnJugador(jugador, anchoCampo): invierte la velocidad horizontal y centra la pelota en la pala
  • Pelota.superaJugador(jugador, anchoCampo): true si la pelota ya pasó la zona de la pala
  • Jugador.mover(delta): sube o baja la pala sin salirse del campo
  • Jugador.cubre(pelota, anchoCampo): true si la pala está a la altura de la pelota
  • Jugador.marcarPunto(): suma un punto y reinicia el saque
UMLDiagrama de Asociación — El rebote de la pelota en Pong
Jugador
-nombre: StringString nombrenombrenombre
-posicionY: intint posicionYposicionYposicionY
-puntos: intint puntospuntospuntos
-velocidad: intint velocidadvelocidadvelocidad
-alturaCampo: intint alturaCampoalturaCampoalturaCampo
+mover(delta: int)mover(delta: int)mover(delta)mover(delta)
+cubre(pelota: Pelota, anchoCampo: int)cubre(pelota: Pelota, anchoCampo: int)cubre(pelota, anchoCampo)cubre(pelota, anchoCampo)
+marcarPunto()marcarPunto()marcarPunto()marcarPunto()
◇Asociación (◇)rebota 1
Pelota
-posicionX: doubledouble posicionXposicionXposicionX
-posicionY: doubledouble posicionYposicionYposicionY
-velocidadX: doubledouble velocidadXvelocidadXvelocidadX
-velocidadY: doubledouble velocidadYvelocidadYvelocidadY
-rebotes: intint rebotesrebotesrebotes
+mover(anchoCampo: int, altoCampo: int)mover(anchoCampo: int, altoCampo: int)mover(anchoCampo, altoCampo)mover(anchoCampo, altoCampo)
+rebotarEnJugador(jugador: Jugador, anchoCampo: int)rebotarEnJugador(jugador: Jugador, anchoCampo: int)rebotarEnJugador(jugador, anchoCampo)rebotarEnJugador(jugador, anchoCampo)
+superaJugador(jugador: Jugador, anchoCampo: int)superaJugador(jugador: Jugador, anchoCampo: int)superaJugador(jugador, anchoCampo)superaJugador(jugador, anchoCampo)
🔍 Clic para ampliar y hacer zoom

5. La nave que dispara a los aliens

👾 Space Invaders (clásico de arcade)🟢 2 clases
Clase Principal: Nave · 2 clases en total · 1 conexiones (o-- / *--)
0 / 4
👾
Escenario de Juego:

Space Invaders tiene una nave que se desplaza de lado a lado y dispara proyectiles. Cada alien tiene un tipo, una posición y su propia vida, así que un mismo disparo puede destruir a un calamar pero solo rasguñar a un pulpo gigante.

🎯 Misión POO: Crea la clase Alien (tipo, posicionX, vida) y la clase Nave (nombre, posicionX, posicionY, puntos). Implementa disparar(alien) y recibirDisparo(danio). La nave gana puntos distintos según el tipo de alien que destruye.

💡 Métodos que puedes implementar

  • Alien.recibirDisparo(danio): descuenta vida y devuelve true si muere en ese impacto
  • Alien.getTipo() / getVida(): el tipo decide los puntos y la vida avisa si sigue vivo
  • Alien.mover(delta): desplaza la horda lateralmente
  • Nave.mover(delta): mueve la nave y no permite salir del campo
  • Nave.disparar(alien): llama a alien.recibirDisparo(...) y suma puntos según el tipo
  • Nave.estaViva() / mostrarEstado(): estado de la nave y marcador
UMLDiagrama de Asociación — La nave que dispara a los aliens
Nave
-nombre: StringString nombrenombrenombre
-posicionX: intint posicionXposicionXposicionX
-posicionY: intint posicionYposicionYposicionY
-puntos: intint puntospuntospuntos
-anchoCampo: intint anchoCampoanchoCampoanchoCampo
+mover(delta: int)mover(delta: int)mover(delta)mover(delta)
+disparar(alien: Alien)disparar(alien: Alien)disparar(alien)disparar(alien)
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◇Asociación (◇)dispara a 1
Alien
-tipo: StringString tipotipotipo
-posicionX: intint posicionXposicionXposicionX
-posicionY: intint posicionYposicionYposicionY
-vida: intint vidavidavida
-velocidad: intint velocidadvelocidadvelocidad
+recibirDisparo(danio: int)recibirDisparo(danio: int)recibirDisparo(danio)recibirDisparo(danio)
+estaVivo()estaVivo()estaVivo()estaVivo()
+mover(delta: int)mover(delta: int)mover(delta)mover(delta)
🔍 Clic para ampliar y hacer zoom

6. El vuelo de Flappy entre los tubos

🐦 Flappy Bird (móvil)🟢 2 clases
Clase Principal: Pajaro · 2 clases en total · 1 conexiones (o-- / *--)
0 / 4
🐦
Escenario de Juego:

El pájaro sube al tocar la pantalla y cae solo por gravedad. Los tubos son obstáculos: cada tubo tiene un hueco vertical por el que hay que pasar. Si el pájaro choca con un tubo o se sale del suelo, pierde.

🎯 Misión POO: Crea la clase Tubo (columna, huecoCentro, huecoTamano) y la clase Pajaro (nombre, altura, velocidad, vivo). Implementa caer(), volar() y choca(tubo). El Pajaro consulta al Tubo para saber si la columna ya pasó y si hubo colisión.

💡 Métodos que puedes implementar

  • Tubo.pasoSeguro(alturaPajaro): true si el pájaro está dentro del hueco o la columna aún no llegó
  • Tubo.alturaBordeSuperior(): límite de arriba que el pájaro no puede tocar
  • Tubo.alturaBordeInferior(): límite de abajo del hueco
  • Tubo.getColumna(): para saber si el tubo ya pasó y se puede eliminar
  • Pajaro.volar(): impulso hacia arriba
  • Pajaro.caer(): baja según la gravedad y detecta si toca el suelo
  • Pajaro.choca(tubo): usa los bordes del tubo para decidir si el vuelo termina
UMLDiagrama de Asociación — El vuelo de Flappy entre los tubos
Pajaro
-nombre: StringString nombrenombrenombre
-altura: intint alturaalturaaltura
-velocidad: intint velocidadvelocidadvelocidad
-gravedad: intint gravedadgravedadgravedad
-altoPantalla: intint altoPantallaaltoPantallaaltoPantalla
-vivo: booleanboolean vivovivovivo
+volar()volar()volar()volar()
+caer()caer()caer()caer()
+choca(tubo: Tubo)choca(tubo: Tubo)choca(tubo)choca(tubo)
+estaVivo()estaVivo()estaVivo()estaVivo()
◇Asociación (◇)evita 1
Tubo
-columna: intint columnacolumnacolumna
-huecoCentro: intint huecoCentrohuecoCentrohuecoCentro
-huecoTamano: intint huecoTamanohuecoTamanohuecoTamano
-altoPantalla: intint altoPantallaaltoPantallaaltoPantalla
+pasoSeguro(alturaPajaro: int)pasoSeguro(alturaPajaro: int)pasoSeguro(alturaPajaro)pasoSeguro(alturaPajaro)
+alturaBordeSuperior()alturaBordeSuperior()alturaBordeSuperior()alturaBordeSuperior()
+alturaBordeInferior()alturaBordeInferior()alturaBordeInferior()alturaBordeInferior()
+getColumna()getColumna()getColumna()getColumna()
🔍 Clic para ampliar y hacer zoom

7. El kart y su piloto

🏎️ Mario Kart🟢 2 clases
Clase Principal: Kart · 2 clases en total · 1 conexiones (o-- / *--)
0 / 4
🏎️
Escenario de Juego:

En Mario Kart el kart es el vehículo y el piloto es quien lo conduce. El kart guarda su velocidad, desgaste y color, y el piloto aporta su nombre, su equipo y su pericia al manejarlo.

🎯 Misión POO: Este es el ejemplo clásico de asociación: Vehículo tiene Piloto. Crea la clase Piloto (nombre, equipo, pericia) y la clase Kart (modelo, color, velocidad, piloto). El kart recibe al piloto en el constructor y expone asignarPiloto(piloto) para los cambios de equipo.

💡 Métodos que puedes implementar

  • Kart.acelerar(): sube la velocidad dentro del límite del motor
  • Kart.frenar(): baja la velocidad hasta 0
  • Kart.desgaste(puntos): consume la resistencia del kart
  • Kart.asignarPiloto(piloto): reemplaza al piloto que conduce (asociación por setter)
  • Kart.getNombrePiloto(): delega en el piloto para mostrar quién conduce
  • Piloto.getExperto(): el kart mejora su velocidad si el piloto es experto
UMLDiagrama de Asociación — El kart y su piloto
Kart
-modelo: StringString modelomodelomodelo
-color: StringString colorcolorcolor
-velocidad: intint velocidadvelocidadvelocidad
-velocidadMaxima: intint velocidadMaximavelocidadMaximavelocidadMaxima
-resistencia: intint resistenciaresistenciaresistencia
-piloto: PilotoPiloto pilotopilotopiloto
+acelerar()acelerar()acelerar()acelerar()
+frenar()frenar()frenar()frenar()
+asignarPiloto(piloto: Piloto)asignarPiloto(piloto: Piloto)asignarPiloto(piloto)asignarPiloto(piloto)
+desgaste(puntos: int)desgaste(puntos: int)desgaste(puntos)desgaste(puntos)
◇Asociación (◇)conduce 1
Piloto
-nombre: StringString nombrenombrenombre
-equipo: StringString equipoequipoequipo
-pericia: intint periciapericiapericia
-carrerasGanadas: intint carrerasGanadascarrerasGanadascarrerasGanadas
+getNombre()getNombre()getNombre()getNombre()
+getEquipo()getEquipo()getEquipo()getEquipo()
+esExperto()esExperto()esExperto()esExperto()
+ganarCarrera()ganarCarrera()ganarCarrera()ganarCarrera()
🔍 Clic para ampliar y hacer zoom

8. Sonic y los anillos que recoge

💍 Sonic the Hedgehog🟢 2 clases
Clase Principal: Sonic · 2 clases en total · 1 conexiones (o-- / *--)
0 / 4
💍
Escenario de Juego:

Sonic corre por el escenario y recoge anillos de oro. Cada anillo vale una cantidad distinta, y si Sonic ya recogió ese anillo no puede sumarlo otra vez. Además, correr mucho consume la energía de la rueda de la locomoción.

🎯 Misión POO: Crea la clase Anillo (valor, recogido) y la clase Sonic (nombre, anillos, velocidad, energia). El anillo se pasa por parámetro, nunca se guarda como atributo del personaje. Implementa correr(), recoger() y saltar si le queda energía.

💡 Métodos que puedes implementar

  • Anillo.recoger(): marca el anillo como recogido
  • Anillo.estaRecogido(): evita sumar dos veces el mismo anillo
  • Sonic.correr(distancia): consume energía proporcional a la distancia
  • Sonic.recoger(anillo): si el anillo está libre, lo marca y suma su valor
  • Sonic.puedeSaltar(): true si tiene energía suficiente para el salto
  • Sonic.getAnillos(): total de anillos acumulados
UMLDiagrama de Asociación — Sonic y los anillos que recoge
Sonic
-nombre: StringString nombrenombrenombre
-anillos: intint anillosanillosanillos
-velocidad: intint velocidadvelocidadvelocidad
-energia: intint energiaenergiaenergia
-distancia: intint distanciadistanciadistancia
+correr(distancia: int)correr(distancia: int)correr(distancia)correr(distancia)
+recoger(anillo: Anillo)recoger(anillo: Anillo)recoger(anillo)recoger(anillo)
+puedeSaltar()puedeSaltar()puedeSaltar()puedeSaltar()
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◇Asociación (◇)recoge 1
Anillo
-valor: intint valorvalorvalor
-recogido: booleanboolean recogidorecogidorecogido
-posicionX: intint posicionXposicionXposicionX
+recoger()recoger()recoger()recoger()
+estaRecogido()estaRecogido()estaRecogido()estaRecogido()
+getValor()getValor()getValor()getValor()
🔍 Clic para ampliar y hacer zoom

9. Mario esquivando los barriles de Donkey Kong

🍌 Donkey Kong (clásico de arcade)🟢 2 clases
Clase Principal: Mario · 2 clases en total · 1 conexiones (o-- / *--)
0 / 4
🍌
Escenario de Juego:

Donkey Kong lanza barriles por la escalera y Mario tiene que subir esquivándolos. Cada barril baja por una columna con una velocidad distinta; si coincide con la posición de Mario, Mario pierde una vida.

🎯 Misión POO: Crea la clase Barril (columna, velocidad, activo) y la clase Mario (nombre, posicionX, vidas, puntuacion). Implementa subir() y esquivar(barril). Piensa en quién llama a quién: Mario consulta al Barril para saber si le toca.

💡 Métodos que puedes implementar

  • Barril.caer(): baja una posición y se desactiva al llegar abajo
  • Barril.estaEn(posicionMario): true si el barril activo está en la misma columna
  • Mario.subir(pisos): sube en la escalera y suma puntuación
  • Mario.esquivar(barril): si el barril está en su columna pierde una vida
  • Mario.estaVivo(): true si todavía tiene vidas
  • Mario.mostrarEstado(): piso actual, vidas y puntos
UMLDiagrama de Asociación — Mario esquivando los barriles de Donkey Kong
Mario
-nombre: StringString nombrenombrenombre
-posicionX: intint posicionXposicionXposicionX
-piso: intint pisopisopiso
-vidas: intint vidasvidasvidas
-puntuacion: intint puntuacionpuntuacionpuntuacion
-pisoMaximo: intint pisoMaximopisoMaximopisoMaximo
+subir(pisos: int)subir(pisos: int)subir(pisos)subir(pisos)
+esquivar(barril: Barril)esquivar(barril: Barril)esquivar(barril)esquivar(barril)
+estaVivo()estaVivo()estaVivo()estaVivo()
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◇Asociación (◇)esquiva 1
Barril
-columna: intint columnacolumnacolumna
-velocidad: intint velocidadvelocidadvelocidad
-posicion: intint posicionposicionposicion
-activo: booleanboolean activoactivoactivo
+caer()caer()caer()caer()
+estaEn(posicionMario: int)estaEn(posicionMario: int)estaEn(posicionMario)estaEn(posicionMario)
+estaActivo()estaActivo()estaActivo()estaActivo()
🔍 Clic para ampliar y hacer zoom

10. El skater y su tabla en el skatepark

🛹 Tony Hawk’s Pro Skater🟢 2 clases
Clase Principal: Skater · 2 clases en total · 1 conexiones (o-- / *--)
0 / 4
🛹
Escenario de Juego:

En el skatepark el skater hace tricks sobre los rieles. La tabla tiene una vida útil: cada trick la desgasta, y cuando se rompe el skater deja de poder hacer piruetas.

🎯 Misión POO: Crea la clase Tabla (modelo,color, desgaste) y la clase Skater (nombre, tabla, trucoActual). Implementa hacerTruco(nombreTruco) y deslizarse(). La tabla limita los trucos: pásala siempre como atributo del skater.

💡 Métodos que puedes implementar

  • Tabla.desgastarse(factor): suma desgaste según la dificultad del truco
  • Tabla.estaRota(): true cuando el desgaste supera el 100 %
  • Tabla.getModelo(): para mostrar qué tabla usa el skater
  • Skater.hacerTruco(nombre): si la tabla no está rota, desgasta y sube el puntaje
  • Skater.deslizarse(distancia): avanza y consume desgaste mínimo
  • Skater.getTabla(): devuelve el objeto tabla para poder consultarlo desde afuera
UMLDiagrama de Asociación — El skater y su tabla en el skatepark
Skater
-nombre: StringString nombrenombrenombre
-tabla: TablaTabla tablatablatabla
-puntaje: intint puntajepuntajepuntaje
-trucoActual: StringString trucoActualtrucoActualtrucoActual
-distancia: intint distanciadistanciadistancia
+hacerTruco(nombreTruco: String, dificultad: int)hacerTruco(nombreTruco: String, dificultad: int)hacerTruco(nombreTruco, dificultad)hacerTruco(nombreTruco, dificultad)
+deslizarse(distancia: int)deslizarse(distancia: int)deslizarse(distancia)deslizarse(distancia)
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◇Asociación (◇)usa 1
Tabla
-modelo: StringString modelomodelomodelo
-color: StringString colorcolorcolor
-desgaste: intint desgastedesgastedesgaste
-nivel: StringString nivelnivelnivel
+desgastarse(factor: int)desgastarse(factor: int)desgastarse(factor)desgastarse(factor)
+estaRota()estaRota()estaRota()estaRota()
+getModelo()getModelo()getModelo()getModelo()
🔍 Clic para ampliar y hacer zoom

11. Kirby copia el poder de su enemigo

🍑 Kirby (Nintendo)🟡 3 clases
Clase Principal: Kirby · 3 clases en total · 2 conexiones (o-- / *--)
0 / 4
🍑
Escenario de Juego:

Kirby no tiene poderes propios: cuando derrota a un enemigo copia su habilidad y la guarda como un poder. El poder copiado determina el daño que hace y se puede usar varias veces antes de perderlo.

🎯 Misión POO: Crea las clases Poder (nombre, tipo, dano), Enemigo (nombre, tipo, vida, poderQueOtorga) y Kirby (nombre, vida, poderCopiado). SIN usar List: el poder copiado se guarda en un atributo simple. Implementa copiarPoder(enemigo) y usarPoder(objetivo).

💡 Métodos que puedes implementar

  • Poder.getDano(): el daño real depende del tipo (fuego, hielo, jet)
  • Enemigo.otorgarPoder(): devuelve el poder que deja al ser derrotado
  • Enemigo.recibirDanio(danio): descuenta vida y avisa si murió
  • Kirby.copiarPoder(enemigo): pide el poder al enemigo y lo guarda como atributo
  • Kirby.usarPoder(objetivo): usa el poder copiado contra un enemigo
  • Kirby.tienePoder(): false cuando todavía no copió nada
UMLDiagrama de Asociación — Kirby copia el poder de su enemigo
Kirby
-nombre: StringString nombrenombrenombre
-vida: intint vidavidavida
-poderCopiado: PoderPoder poderCopiadopoderCopiadopoderCopiado
-poderesUsados: intint poderesUsadospoderesUsadospoderesUsados
+copiarPoder(enemigo: Enemigo)copiarPoder(enemigo: Enemigo)copiarPoder(enemigo)copiarPoder(enemigo)
+usarPoder(objetivo: Enemigo)usarPoder(objetivo: Enemigo)usarPoder(objetivo)usarPoder(objetivo)
+tienePoder()tienePoder()tienePoder()tienePoder()
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◇Asociación (◇)derrota a 1
Enemigo
-nombre: StringString nombrenombrenombre
-vida: intint vidavidavida
-poderQueOtorga: StringString poderQueOtorgapoderQueOtorgapoderQueOtorga
-tipo: StringString tipotipotipo
+recibirDanio(danio: int)recibirDanio(danio: int)recibirDanio(danio)recibirDanio(danio)
+otorgarPoder()otorgarPoder()otorgarPoder()otorgarPoder()
◇Asociación (◇)copia 1
Poder
-nombre: StringString nombrenombrenombre
-tipo: StringString tipotipotipo
-dano: intint danodanodano
-usos: intint usosusosusos
+usar()usar()usar()usar()
+estaAgotado()estaAgotado()estaAgotado()estaAgotado()
🔍 Clic para ampliar y hacer zoom

12. Samus y su cañón de protones

🎮 Metroid (Nintendo)🟡 3 clases
Clase Principal: Samus · 3 clases en total · 2 conexiones (o-- / *--)
0 / 4
🎮
Escenario de Juego:

Samus explora la nave y dispara con un cañón de protones. Cada misil sale de la mochila con un daño y un radio de explosión, y los Metroides se dividen en dos si uno de tamaño grande recibe un golpe fuerte.

🎯 Misión POO: Crea las clases Misil (dano, radioExplosion), Metroide (tipo, vida, tamaño) y Samus (nombre, vida, municion). SIN List ni arrays: guarda un solo Misil como atributo. Implementa disparar(metroide) y Samus no puede disparar sin munición.

💡 Métodos que puedes implementar

  • Misil.explota(): devuelve el daño según el radio de explosión (radio grande = más daño)
  • Metroide.recibirDanio(danio): si es de tamaño grande y recibe un crítico, se parte en dos
  • Metroide.sePartio(): indica que el metroide se dividió
  • Samus.disparar(metroide): usa el misil de la mochila, resta munición y aplica el daño
  • Samus.tieneMunicion(): false cuando se quedó sin munición
  • Samus.mostrarEstado(): vida, munición y estado del misil
UMLDiagrama de Asociación — Samus y su cañón de protones
Samus
-nombre: StringString nombrenombrenombre
-vida: intint vidavidavida
-municion: intint municionmunicionmunicion
-misilActual: MisilMisil misilActualmisilActualmisilActual
-metroidesDerrotados: intint metroidesDerrotadosmetroidesDerrotadosmetroidesDerrotados
+disparar(metroide: Metroide)disparar(metroide: Metroide)disparar(metroide)disparar(metroide)
+tieneMunicion()tieneMunicion()tieneMunicion()tieneMunicion()
+recogerMisil(misil: Misil)recogerMisil(misil: Misil)recogerMisil(misil)recogerMisil(misil)
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◆Composición (◆)carga 1
Misil
-dano: intint danodanodano
-radioExplosion: intint radioExplosionradioExplosionradioExplosion
-usado: booleanboolean usadousadousado
+explota()explota()explota()explota()
+getDano()getDano()getDano()getDano()
+estaUsado()estaUsado()estaUsado()estaUsado()
◇Asociación (◇)dispara a 1
Metroide
-tipo: StringString tipotipotipo
-vida: intint vidavidavida
-tamano: StringString tamanotamanotamano
-sePartio: booleanboolean sePartiosePartiosePartio
+recibirDanio(danio: int)recibirDanio(danio: int)recibirDanio(danio)recibirDanio(danio)
+sePartio()sePartio()sePartio()sePartio()
🔍 Clic para ampliar y hacer zoom

13. El jardinero y sus plantas contra los zombis

🌻 Plants vs. Zombies🟡 3 clases
Clase Principal: Jardinero · 3 clases en total · 2 conexiones (o-- / *--)
0 / 4
🌻
Escenario de Juego:

El jugador planta defensas y cada planta tiene un coste, una vida y una cadencia de disparo. Los zombis avanzan por el jardín y, si llegan a la casa, el jardinero pierde. Aquí solo hay una planta activa y un zombi: es association simple sin colecciones.

🎯 Misión POO: Crea las clases Planta (tipo, vida, coste, dano), Zombi (nombre, vida, velocidad) y Jardinero (nombre, monedas, plantaActiva). SIN usar List: la planta activa y el zombi se guardan en atributos simples. Implementa plantar(), disparar(zombi) y defender().

💡 Métodos que puedes implementar

  • Planta.disparar(): devuelve el daño y avisa si la planta se queda sin recargas
  • Planta.recibirDanio(danio): la planta pierde vida y puede morir
  • Zombi.avanzar(): suma la velocidad a su posición de carril
  • Zombi.recibirDanio(danio): descuenta vida (el chador zombi aguanta más)
  • Jardinero.plantar(planta): paga el coste con las monedas disponibles
  • Jardinero.disparar(zombi): delega en la planta activa y muestra el resultado
UMLDiagrama de Asociación — El jardinero y sus plantas contra los zombis
Jardinero
-nombre: StringString nombrenombrenombre
-monedas: intint monedasmonedasmonedas
-plantaActiva: PlantaPlanta plantaActivaplantaActivaplantaActiva
-zombisDerrotados: intint zombisDerrotadoszombisDerrotadoszombisDerrotados
+plantar(planta: Planta)plantar(planta: Planta)plantar(planta)plantar(planta)
+disparar(zombi: Zombi)disparar(zombi: Zombi)disparar(zombi)disparar(zombi)
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◆Composición (◆)siembra 1
Planta
-tipo: StringString tipotipotipo
-vida: intint vidavidavida
-coste: intint costecostecoste
-dano: intint danodanodano
-recarga: intint recargarecargarecarga
+disparar()disparar()disparar()disparar()
+recibirDanio(danio: int)recibirDanio(danio: int)recibirDanio(danio)recibirDanio(danio)
+estaViva()estaViva()estaViva()estaViva()
◇Asociación (◇)frena 1
Zombi
-nombre: StringString nombrenombrenombre
-vida: intint vidavidavida
-velocidad: intint velocidadvelocidadvelocidad
-posX: intint posXposXposX
-tipo: StringString tipotipotipo
+avanzar()avanzar()avanzar()avanzar()
+recibirDanio(danio: int)recibirDanio(danio: int)recibirDanio(danio)recibirDanio(danio)
+llegoAlFinal()llegoAlFinal()llegoAlFinal()llegoAlFinal()
🔍 Clic para ampliar y hacer zoom

14. El aldeano, su cuartel y los muros

🏰 Clash of Clans🟡 3 clases
Clase Principal: Aldeano · 3 clases en total · 2 conexiones (o-- / *--)
0 / 4
🏰
Escenario de Juego:

En Clash of Clans el aldeano sube de nivel, improve su cuartel y coloca muros alrededor del pueblo. Cada muro tiene vida y tipo: si un muro cae, los enemigos entran más rápido. Aquí hay un solo aldeano, un cuartel y un muro activo.

🎯 Misión POO: Crea las clases Muro (tipo, vida), Cuartel (nivel, capacidadTropas, tropasFormadas) y Aldeano (nombre, nivel, oro, cuartel). SIN List ni arrays: cada Relationship se resuelve con un atributo. Implementa mejorar(), invocarTropas() y colocarMuro().

💡 Métodos que puedes implementar

  • Muro.recibirDanio(danio): baja la vida del muro y avisa si cayó
  • Muro.estaEnPie(): true mientras tenga vida
  • Cuartel.mejorar(nivel): sube el nivel y devuelve la nueva capacidad de tropas
  • Cuartel.puedeInvocar(): true si quedan plazas libres de tropa
  • Aldeano.invocarTropas(nombreTropa): pide una tropa al cuartel y gasta oro
  • Aldeano.colocarMuro(muro): asocia el muro al pueblo y repara el anterior
UMLDiagrama de Asociación — El aldeano, su cuartel y los muros
Aldeano
-nombre: StringString nombrenombrenombre
-nivel: intint nivelnivelnivel
-oro: intint oroorooro
-cuartel: CuartelCuartel cuartelcuartelcuartel
-muroPrincipal: MuroMuro muroPrincipalmuroPrincipalmuroPrincipal
-poblacion: intint poblacionpoblacionpoblacion
+mejorarCuartel()mejorarCuartel()mejorarCuartel()mejorarCuartel()
+invocarTropas(nombreTropa: String)invocarTropas(nombreTropa: String)invocarTropas(nombreTropa)invocarTropas(nombreTropa)
+colocarMuro(muro: Muro)colocarMuro(muro: Muro)colocarMuro(muro)colocarMuro(muro)
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◆Composición (◆)posee 1
Cuartel
-nivel: intint nivelnivelnivel
-capacidadTropas: intint capacidadTropascapacidadTropascapacidadTropas
-tropasFormadas: intint tropasFormadastropasFormadastropasFormadas
+mejorar()mejorar()mejorar()mejorar()
+invocarTropa(nombre: String)invocarTropa(nombre: String)invocarTropa(nombre)invocarTropa(nombre)
+getCapacidadTropas()getCapacidadTropas()getCapacidadTropas()getCapacidadTropas()
◇Asociación (◇)protege con 1
Muro
-tipo: StringString tipotipotipo
-vida: intint vidavidavida
-nivel: intint nivelnivelnivel
+recibirDanio(danio: int)recibirDanio(danio: int)recibirDanio(danio)recibirDanio(danio)
+estaEnPie()estaEnPie()estaEnPie()estaEnPie()
+getTipo()getTipo()getTipo()getTipo()
🔍 Clic para ampliar y hacer zoom

15. La partida de Candy Crush: ficha y azúcaritas

🍬 Candy Crush Saga🟡 3 clases
Clase Principal: Partida · 3 clases en total · 2 conexiones (o-- / *--)
0 / 4
🍬
Escenario de Juego:

En Candy Crush mueves fichas de colores en la pantalla. Al formar una línea de tres o más fichas del mismo color se forma una "azucarita" que desaparece y suma puntos. Aquí modelamos una sola ficha activa y una sola azucarita por combo.

🎯 Misión POO: Crea las clases Ficha (color, fila, columna), Azucarita (tipo, puntos) y Partida (jugador, movimientos, fichaSeleccionada). SIN List ni arrays: la ficha seleccionada se guarda en un atributo. Implementa seleccionar(), mover(), formarCombo() y jugadasRestantes().

💡 Métodos que puedes implementar

  • Ficha.mover(fila, columna): cambia la posición de la ficha
  • Ficha.mismoColor(otra): compara el color con otra ficha
  • Azucarita.generar(color, cantidad): crea una azucarita con los puntos de la combinación
  • Partida.seleccionar(ficha): guarda la ficha activa (atributo, no lista)
  • Partida.mover(ficha, fila, columna): mueve la ficha y consume un movimiento
  • Partida.formarCombo(cantidad): si hay 3 o más del mismo color, genera la azucarita y suma puntos
UMLDiagrama de Asociación — La partida de Candy Crush: ficha y azúcaritas
Partida
-jugador: StringString jugadorjugadorjugador
-movimientos: intint movimientosmovimientosmovimientos
-puntos: intint puntospuntospuntos
-fichaSeleccionada: FichaFicha fichaSeleccionadafichaSeleccionadafichaSeleccionada
-azucaritaCreada: AzucaritaAzucarita azucaritaCreadaazucaritaCreadaazucaritaCreada
+seleccionar(ficha: Ficha)seleccionar(ficha: Ficha)seleccionar(ficha)seleccionar(ficha)
+mover(ficha: Ficha, fila: int, columna: int)mover(ficha: Ficha, fila: int, columna: int)mover(ficha, fila, columna)mover(ficha, fila, columna)
+formarCombo(cantidad: int)formarCombo(cantidad: int)formarCombo(cantidad)formarCombo(cantidad)
+jugadasRestantes()jugadasRestantes()jugadasRestantes()jugadasRestantes()
◆Composición (◆)juega 1 activa
Ficha
-color: StringString colorcolorcolor
-fila: intint filafilafila
-columna: intint columnacolumnacolumna
-tipo: StringString tipotipotipo
+mover(fila: int, columna: int)mover(fila: int, columna: int)mover(fila, columna)mover(fila, columna)
+mismoColor(otra: Ficha)mismoColor(otra: Ficha)mismoColor(otra)mismoColor(otra)
◇Asociación (◇)forma 1
Azucarita
-tipo: StringString tipotipotipo
-puntos: intint puntospuntospuntos
-colorOrigen: StringString colorOrigencolorOrigencolorOrigen
+generar(color: String, cantidad: int)generar(color: String, cantidad: int)generar(color, cantidad)generar(color, cantidad)
+getPuntos()getPuntos()getPuntos()getPuntos()
🔍 Clic para ampliar y hacer zoom

16. Agente, arma, bala y bomba en una ronda

🎯 Counter-Strike 2🟠 4 clases
Clase Principal: Agente · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🎯
Escenario de Juego:

Una ronda de shooter táctico une cuatro piezas: el agente que juega, el arma que usa, la bala que dispara y la bomba que hay que plantar o defender. El arma decide cuántas balas quedan en el cargador y la bala decide el daño.

🎯 Misión POO: Crea las cuatro clases: Bala (dano, velocidad), Arma (nombre, cargador, precision), Bomba (tiempo, plantada) y Agente (nombre, rol, vida). Encadena la asociación completa: el agente tiene un arma, el arma crea la bala y el agente puede plantar una bomba.

💡 Métodos que puedes implementar

  • Bala.recorrer(distancia): suma el alcance y devuelve true si sale del mapa
  • Arma.disparar(): descuenta una bala del cargador y devuelve una Bala nueva
  • Arma.estaVacia(): true cuando se acabó el cargador
  • Bomba.plantar(): arranca la cuenta regresiva
  • Bomba.explota(): true si el tiempo llegó a cero
  • Agente.disparar(objetivo): pide el disparo al arma, mueve la bala y aplica el daño
  • Agente.plantarBomba(bomba): delega en la bomba y avisa si la ronda se gana
UMLDiagrama de Asociación — Agente, arma, bala y bomba en una ronda
Agente
-nombre: StringString nombrenombrenombre
-rol: StringString rolrolrol
-vida: intint vidavidavida
-arma: ArmaArma armaarmaarma
-baja: intint bajabajabaja
-bomba: BombaBomba bombabombabomba
+disparar(objetivo: Agente)disparar(objetivo: Agente)disparar(objetivo)disparar(objetivo)
+plantarBomba(posicion: String)plantarBomba(posicion: String)plantarBomba(posicion)plantarBomba(posicion)
+estaVivo()estaVivo()estaVivo()estaVivo()
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◆Composición (◆)usa 1
Arma
-nombre: StringString nombrenombrenombre
-dano: intint danodanodano
-cargador: intint cargadorcargadorcargador
-precision: intint precisionprecisionprecision
+disparar()disparar()disparar()disparar()
+estaVacia()estaVacia()estaVacia()estaVacia()
+recargar()recargar()recargar()recargar()
Arma →◆Composición (◆)crea 1
Bala
-dano: intint danodanodano
-velocidad: intint velocidadvelocidadvelocidad
-alcance: intint alcancealcancealcance
+recorrer(distancia: int)recorrer(distancia: int)recorrer(distancia)recorrer(distancia)
+impacto()impacto()impacto()impacto()
◇Asociación (◇)planta 1
Bomba
-tiempo: intint tiempotiempotiempo
-plantada: booleanboolean plantadaplantadaplantada
-posicion: StringString posicionposicionposicion
+plantar(posicion: String)plantar(posicion: String)plantar(posicion)plantar(posicion)
+pasarTiempo()pasarTiempo()pasarTiempo()pasarTiempo()
+explota()explota()explota()explota()
🔍 Clic para ampliar y hacer zoom

17. La granja de Stardew Valley

🌾 Stardew Valley🟠 4 clases
Clase Principal: Granjero · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🌾
Escenario de Juego:

En Stardew Valley el granjero cultiva, cuida las gallinas y vende su cosecha en el mercado de Pierre. Cada cosecha tarda días en crecer y el mercado paga un precio distinto según el producto y la calidad.

🎯 Misión POO: Crea Cultivo (tipo, diasParaCosechar, precioBase), Gallina (nombre, huevosPorDia), Mercado (nombre, multiplicador) y Granjero (nombre, energia, oro). Encadena la asociación: el granjero riega un cultivo, recoge la gallina y lleva la cosecha al mercado.

💡 Métodos que puedes implementar

  • Cultivo.regar(): suma un día de crecimiento y avisa si ya está listo
  • Cultivo.estaListo(): true cuando pasaron los días de crecimiento
  • Cultivo.cosechar(): devuelve el cultivo cosechado y lo deja listo para replantar
  • Gallina.recolectarHuevos(): suma huevos y consume comida
  • Mercado.vender(cultivo): multiplica el precio base del cultivo y devuelve el dinero
  • Granjero.cosechar(cultivo): pide la cosecha al cultivo y la lleva al mercado
UMLDiagrama de Asociación — La granja de Stardew Valley
Granjero
-nombre: StringString nombrenombrenombre
-energia: intint energiaenergiaenergia
-oro: intint oroorooro
-huevos: intint huevoshuevoshuevos
-nivelAgricola: intint nivelAgricolanivelAgricolanivelAgricola
-mercado: MercadoMercado mercadomercadomercado
+regar(cultivo: Cultivo)regar(cultivo: Cultivo)regar(cultivo)regar(cultivo)
+cosechar(cultivo: Cultivo)cosechar(cultivo: Cultivo)cosechar(cultivo)cosechar(cultivo)
+cuidarGallina(gallina: Gallina)cuidarGallina(gallina: Gallina)cuidarGallina(gallina)cuidarGallina(gallina)
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◇Asociación (◇)siembra 1
Cultivo
-tipo: StringString tipotipotipo
-diasCrecimiento: intint diasCrecimientodiasCrecimientodiasCrecimiento
-diasRegados: intint diasRegadosdiasRegadosdiasRegados
-precioBase: intint precioBaseprecioBaseprecioBase
-listo: booleanboolean listolistolisto
+regar()regar()regar()regar()
+estaListo()estaListo()estaListo()estaListo()
+cosechar()cosechar()cosechar()cosechar()
◇Asociación (◇)cuida 1
Gallina
-nombre: StringString nombrenombrenombre
-huevosPorDia: intint huevosPorDiahuevosPorDiahuevosPorDia
-alimentada: booleanboolean alimentadaalimentadaalimentada
+alimentar()alimentar()alimentar()alimentar()
+recolectarHuevos()recolectarHuevos()recolectarHuevos()recolectarHuevos()
◆Composición (◆)vende en 1
Mercado
-nombre: StringString nombrenombrenombre
-multiplicador: doubledouble multiplicadormultiplicadormultiplicador
-ventas: intint ventasventasventas
+vender(cultivo: String, precioBase: int)vender(cultivo: String, precioBase: int)vender(cultivo, precioBase)vender(cultivo, precioBase)
+getNombre()getNombre()getNombre()getNombre()
🔍 Clic para ampliar y hacer zoom

18. La vida de un Sim en su casa

🏡 The Sims🟠 4 clases
Clase Principal: Sim · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🏡
Escenario de Juego:

En The Sims cada personaje vive en una casa, usa muebles para cubrir necesidades y tiene una mascota que también necesita atención. Las necesidades bajan con el tiempo y se recuperan usando el mueble adecuado.

🎯 Misión POO: Crea Mueble (nombre, tipo, confort), Mascota (nombre, hambre, felicidad), Casa (direccion, dimensiones) y Sim (nombre, energia, higiene). Encadena la asociación completa: el Sim usa los muebles de su casa y cuida a su mascota.

💡 Métodos que puedes implementar

  • Mueble.usar(): sube la necesidad que cubre y gasta duración
  • Casa.buscarMueble(tipo): devuelve el mueble que coincide con la necesidad
  • Casa.agregarMueble(mueble): coloca el mueble dentro de la casa
  • Mascota.comer(alimento): baja el hambre de la mascota
  • Mascota.jugar(): sube la felicidad de la mascota
  • Sim.usarMueble(mueble): delega en el mueble y recupera energía o higiene
  • Sim.cuidarMascota(mascota): alimentar y jugar con la mascota de la casa
UMLDiagrama de Asociación — La vida de un Sim en su casa
Sim
-nombre: StringString nombrenombrenombre
-energia: intint energiaenergiaenergia
-higiene: intint higienehigienehigiene
-dinero: intint dinerodinerodinero
-casa: CasaCasa casacasacasa
-mascota: MascotaMascota mascotamascotamascota
+usarMueble(mueble: Mueble)usarMueble(mueble: Mueble)usarMueble(mueble)usarMueble(mueble)
+comprarMueble(mueble: Mueble)comprarMueble(mueble: Mueble)comprarMueble(mueble)comprarMueble(mueble)
+cuidarMascota()cuidarMascota()cuidarMascota()cuidarMascota()
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◆Composición (◆)vive en 1
Casa
-direccion: StringString direcciondirecciondireccion
-dimensiones: intint dimensionesdimensionesdimensiones
-contadorMuebles: intint contadorMueblescontadorMueblescontadorMuebles
+agregarMueble(mueble: Mueble)agregarMueble(mueble: Mueble)agregarMueble(mueble)agregarMueble(mueble)
+getMuebles()getMuebles()getMuebles()getMuebles()
Casa →◆Composición (◆)contiene *
Mueble
-nombre: StringString nombrenombrenombre
-tipo: StringString tipotipotipo
-confort: intint confortconfortconfort
-precio: intint precioprecioprecio
-durabilidad: intint durabilidaddurabilidaddurabilidad
+usar()usar()usar()usar()
+estaRoto()estaRoto()estaRoto()estaRoto()
+getTipo()getTipo()getTipo()getTipo()
◇Asociación (◇)cuida 1
Mascota
-nombre: StringString nombrenombrenombre
-hambre: intint hambrehambrehambre
-felicidad: intint felicidadfelicidadfelicidad
-especie: StringString especieespecieespecie
+comer(alimento: String)comer(alimento: String)comer(alimento)comer(alimento)
+jugar()jugar()jugar()jugar()
🔍 Clic para ampliar y hacer zoom

19. El arquero de Skyrim y su equipo

🏹 The Elder Scrolls: Skyrim🟠 4 clases
Clase Principal: Arquero · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🏹
Escenario de Juego:

Un arquero de Skyrim lleva un arco con una tension concreta, dispara flechas con daño y puntería diferentes y practica contra dianas a distintas distancias. Un arco de gran Premio hace más daño pero pesa más y cansa antes.

🎯 Misión POO: Crea Diana (distancia, tipo), Flecha (dano, punteria) y Arco (nombre, tension, peso) y Arquero (nombre, vida, arquitectura, arco, ultimaDiana). Modela la cadena completa: el arquero carga el arco, apunta a una diana y la flecha se clava según la distancia.

💡 Métodos que puedes implementar

  • Diana.getFactorDistancia(): cerca = 1.0, media = 0.8, lejos = 0.6
  • Flecha.clavar(diana): daño real = dano * punteria * factorDistancia
  • Arco.disparar(flecha): el arco aplica su tensión como bonus y se desgasta
  • Arco.puedeDisparar(): false si el peso cansa al arquero
  • Arquero.apuntar(diana): guarda la diana objetivo y calcula la dificultad
  • Arquero.disparar(flecha, diana): encadena arco → flecha → diana y muestra el resultado
UMLDiagrama de Asociación — El arquero de Skyrim y su equipo
Arquero
-nombre: StringString nombrenombrenombre
-vida: intint vidavidavida
-arquitectura: intint arquitecturaarquitecturaarquitectura
-arco: ArcoArco arcoarcoarco
-ultimaDiana: DianaDiana ultimaDianaultimaDianaultimaDiana
-flechasClavadas: intint flechasClavadasflechasClavadasflechasClavadas
+apuntar(diana: Diana)apuntar(diana: Diana)apuntar(diana)apuntar(diana)
+disparar(flecha: Flecha)disparar(flecha: Flecha)disparar(flecha)disparar(flecha)
+getPunteria()getPunteria()getPunteria()getPunteria()
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◆Composición (◆)usa 1
Arco
-nombre: StringString nombrenombrenombre
-tension: intint tensiontensiontension
-peso: intint pesopesopeso
-desgaste: intint desgastedesgastedesgaste
+puedeDisparar()puedeDisparar()puedeDisparar()puedeDisparar()
+aplicarTension(flecha: Flecha)aplicarTension(flecha: Flecha)aplicarTension(flecha)aplicarTension(flecha)
+getNombre()getNombre()getNombre()getNombre()
◇Asociación (◇)dispara 1
Flecha
-dano: intint danodanodano
-punteria: intint punteriapunteriapunteria
-clavada: booleanboolean clavadaclavadaclavada
+clavar(diana: Diana)clavar(diana: Diana)clavar(diana)clavar(diana)
+estaClavada()estaClavada()estaClavada()estaClavada()
Flecha →◇Asociación (◇)impacta 1
Diana
-distancia: intint distanciadistanciadistancia
-tipo: StringString tipotipotipo
-dificultad: intint dificultaddificultaddificultad
+getFactorDistancia()getFactorDistancia()getFactorDistancia()getFactorDistancia()
+getTipo()getTipo()getTipo()getTipo()
🔍 Clic para ampliar y hacer zoom

20. Aventura espacial: nave, planeta y mineral

🌌 Starfield🟠 4 clases
Clase Principal: Astronauta · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🌌
Escenario de Juego:

En una aventura espacial el astronauta pilota una nave, aterriza en planetas y recoge minerales para mejorar el combustible. Cada planeta tiene su propio tipo de mineral y su dificultad de extracción, y la nave consume combustible en cada salto.

🎯 Misión POO: Es el reto final: crea Nave (modelo, combustible, velocidad), Mineral (tipo, valor, rareza), Planeta (nombre, dificultad, atmosfera) y Astronauta (nombre, vida, nave, mochilaOro). Encadena la asociación completa y simula un viaje con dos planetas.

💡 Métodos que puedes implementar

  • Mineral.extraer(dificultad): el valor final depende de la rareza y de la dificultad del planeta
  • Planeta.explorar(): devuelve un mineral propio del planeta
  • Planeta.esPeligroso(): true si su atmósfera es hostil
  • Nave.viajar(planeta): consume combustible según la distancia y avisa si no alcanza
  • Nave.recargar(menaje): suma combustible con la energía del mineral
  • Astronauta.explorar(planeta): pide el mineral al planeta y lo guarda en la mochila
  • Astronauta.mostrarEstado(): inventario, combustible y vida
UMLDiagrama de Asociación — Aventura espacial: nave, planeta y mineral
Astronauta
-nombre: StringString nombrenombrenombre
-vida: intint vidavidavida
-nave: NaveNave navenavenave
-oro: intint oroorooro
-mineralesRecolectados: intint mineralesRecolectadosmineralesRecolectadosmineralesRecolectados
-destino: PlanetaPlaneta destinodestinodestino
+viajar(planeta: Planeta)viajar(planeta: Planeta)viajar(planeta)viajar(planeta)
+explorar(planeta: Planeta)explorar(planeta: Planeta)explorar(planeta)explorar(planeta)
+recargarNave()recargarNave()recargarNave()recargarNave()
+mostrarEstado()mostrarEstado()mostrarEstado()mostrarEstado()
◆Composición (◆)pilota 1
Nave
-modelo: StringString modelomodelomodelo
-combustible: intint combustiblecombustiblecombustible
-velocidad: intint velocidadvelocidadvelocidad
-capacidadTanque: intint capacidadTanquecapacidadTanquecapacidadTanque
+viajar(planeta: Planeta)viajar(planeta: Planeta)viajar(planeta)viajar(planeta)
+recargar(menaje: Mineral)recargar(menaje: Mineral)recargar(menaje)recargar(menaje)
+getCombustible()getCombustible()getCombustible()getCombustible()
◇Asociación (◇)explora 1
Planeta
-nombre: StringString nombrenombrenombre
-distancia: intint distanciadistanciadistancia
-dificultad: intint dificultaddificultaddificultad
-atmosfera: StringString atmosferaatmosferaatmosfera
+explorar()explorar()explorar()explorar()
+esPeligroso()esPeligroso()esPeligroso()esPeligroso()
+getNombre()getNombre()getNombre()getNombre()
Planeta →◆Composición (◆)contiene 1
Mineral
-tipo: StringString tipotipotipo
-valor: intint valorvalorvalor
-rareza: StringString rarezararezarareza
-energia: intint energiaenergiaenergia
+extraer(dificultad: int)extraer(dificultad: int)extraer(dificultad)extraer(dificultad)
+getTipo()getTipo()getTipo()getTipo()
+getEnergia()getEnergia()getEnergia()getEnergia()
🔍 Clic para ampliar y hacer zoom

21. Gladiadores Medievales en la Arena

⚔️ RPG Medieval / Gladiadores🔴 experto
Clase Principal: Luchador · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
⚔️
Escenario de Batalla:

Dos luchadores combaten por turnos en una arena medieval. Cada luchador posee una Espada que calcula el daño con probabilidad de crítico, un Escudo que mitiga impactos consumiendo durabilidad, y una lista de Pociones curativas en su mochila.

🎯 Misión POO: Crea las clases Espada, Escudo, Pocion y Luchador. Modela la asociación entre el Luchador y su equipamiento. En el método ejecutarTurno(rival), el luchador decide si atacar con su espada o consumir una poción si su vida baja de 30.

UMLDiagrama de Asociación — Gladiadores Medievales en la Arena
Luchador
-nombre: StringString nombrenombrenombre
-vida: intint vidavidavida
-energia: intint energiaenergiaenergia
-arma: EspadaEspada armaarmaarma
-escudo: EscudoEscudo escudoescudoescudo
-pociones: List~Pocion~List~Pocion~ pocionespocionespociones
+atacar(rival: Luchador)atacar(rival: Luchador)atacar(rival)atacar(rival)
+recibirDanio(danioEntrante: int)recibirDanio(danioEntrante: int)recibirDanio(danioEntrante)recibirDanio(danioEntrante)
+usarPocion(indice: int)usarPocion(indice: int)usarPocion(indice)usarPocion(indice)
+estaVivo()estaVivo()estaVivo()estaVivo()
◇Asociación (◇)equipa 1
Espada
-nombre: StringString nombrenombrenombre
-danioBase: intint danioBasedanioBasedanioBase
-probCritico: doubledouble probCriticoprobCriticoprobCritico
+calcularDanio()calcularDanio()calcularDanio()calcularDanio()
◇Asociación (◇)equipa 1
Escudo
-nombre: StringString nombrenombrenombre
-defensa: intint defensadefensadefensa
-durabilidad: intint durabilidaddurabilidaddurabilidad
+mitigarDanio(danio: int)mitigarDanio(danio: int)mitigarDanio(danio)mitigarDanio(danio)
◆Composición (◆)almacena *
Pocion
-nombre: StringString nombrenombrenombre
-puntosCuracion: intint puntosCuracionpuntosCuracionpuntosCuracion
-usada: booleanboolean usadausadausada
+aplicar(objetivo: Luchador)aplicar(objetivo: Luchador)aplicar(objetivo)aplicar(objetivo)
🔍 Clic para ampliar y hacer zoom

22. Duelo de Entrenadores Pokémon

⚡ Pokémon🔴 experto
Clase Principal: Entrenador · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
⚡
Escenario de Batalla:

Dos entrenadores se enfrentan en la liga. El Entrenador comanda un Pokémon activo y lleva en su mochila una lista de Items de Curación. El Pokémon posee una lista de 4 Movimientos con tipo, potencia y PP.

🎯 Misión POO: Modela Entrenador, Pokemon, Movimiento e ItemCura. En cada turno, el entrenador ordena ejecutar un movimiento por slot de su Pokémon contra el rival o aplica una Poción de su mochila.

UMLDiagrama de Asociación — Duelo de Entrenadores Pokémon
Entrenador
-nombre: StringString nombrenombrenombre
-pokemonActivo: PokemonPokemon pokemonActivopokemonActivopokemonActivo
-mochila: List~ItemCura~List~ItemCura~ mochilamochilamochila
+ordenarAtaque(rival: Entrenador, slot: int)ordenarAtaque(rival: Entrenador, slot: int)ordenarAtaque(rival, slot)ordenarAtaque(rival, slot)
+usarItemMochila(indiceItem: int)usarItemMochila(indiceItem: int)usarItemMochila(indiceItem)usarItemMochila(indiceItem)
+tienePokemonVivo()tienePokemonVivo()tienePokemonVivo()tienePokemonVivo()
◇Asociación (◇)comanda 1
Pokemon
-especie: StringString especieespecieespecie
-tipo: StringString tipotipotipo
-hpMax: intint hpMaxhpMaxhpMax
-hpActual: intint hpActualhpActualhpActual
-movimientos: List~Movimiento~List~Movimiento~ movimientosmovimientosmovimientos
+recibirDanio(danio: int)recibirDanio(danio: int)recibirDanio(danio)recibirDanio(danio)
+ejecutarMovimiento(slot: int)ejecutarMovimiento(slot: int)ejecutarMovimiento(slot)ejecutarMovimiento(slot)
+curar(hp: int)curar(hp: int)curar(hp)curar(hp)
Pokemon →◆Composición (◆)conoce *
Movimiento
-nombre: StringString nombrenombrenombre
-tipoElemento: StringString tipoElementotipoElementotipoElemento
-potencia: intint potenciapotenciapotencia
-ppActuales: intint ppActualesppActualesppActuales
+consumirPP()consumirPP()consumirPP()consumirPP()
+getPotencia()getPotencia()getPotencia()getPotencia()
◆Composición (◆)lleva *
ItemCura
-nombre: StringString nombrenombrenombre
-puntosRestaurados: intint puntosRestauradospuntosRestauradospuntosRestaurados
-cantidad: intint cantidadcantidadcantidad
+consumir()consumir()consumir()consumir()
🔍 Clic para ampliar y hacer zoom

23. Duelo de Cartas TCG (Yu-Gi-Oh!)

🎴 Yu-Gi-Oh! / TCG🔴 experto
Clase Principal: Duelista · 3 clases en total · 3 conexiones (o-- / *--)
0 / 4
🎴
Escenario de Batalla:

Dos duelistas se baten en duelo con 4000 LP. Cada duelista invoca un Monstruo en su zona de batalla, activa Cartas Mágicas de potenciación y envía cartas destruidas al Cementerio.

🎯 Misión POO: Implementa Duelista, CartaMonstruo, CartaMagica y ZonaDuelo. El duelista declara ataque entre su monstruo y el monstruo rival; la diferencia de ATK se resta a los LP del perdedor.

UMLDiagrama de Asociación — Duelo de Cartas TCG (Yu-Gi-Oh!)
Duelista
-nombre: StringString nombrenombrenombre
-puntosVidaLP: intint puntosVidaLPpuntosVidaLPpuntosVidaLP
-monstruoCampo: CartaMonstruoCartaMonstruo monstruoCampomonstruoCampomonstruoCampo
-magicaActiva: CartaMagicaCartaMagica magicaActivamagicaActivamagicaActiva
-cementerio: List~CartaMonstruo~List~CartaMonstruo~ cementeriocementeriocementerio
+invocarMonstruo(m: CartaMonstruo)invocarMonstruo(m: CartaMonstruo)invocarMonstruo(m)invocarMonstruo(m)
+activarMagia(magia: CartaMagica)activarMagia(magia: CartaMagica)activarMagia(magia)activarMagia(magia)
+declararAtaque(rival: Duelista)declararAtaque(rival: Duelista)declararAtaque(rival)declararAtaque(rival)
+estaDerrotado()estaDerrotado()estaDerrotado()estaDerrotado()
◇Asociación (◇)controla 1
CartaMonstruo
-nombre: StringString nombrenombrenombre
-estrellas: intint estrellasestrellasestrellas
-ataqueATK: intint ataqueATKataqueATKataqueATK
-defensaDEF: intint defensaDEFdefensaDEFdefensaDEF
-modoAtaque: booleanboolean modoAtaquemodoAtaquemodoAtaque
+potenciarATK(bonus: int)potenciarATK(bonus: int)potenciarATK(bonus)potenciarATK(bonus)
+getAtaqueATK()getAtaqueATK()getAtaqueATK()getAtaqueATK()
◇Asociación (◇)activa 1
CartaMagica
-nombre: StringString nombrenombrenombre
-bonusATK: intint bonusATKbonusATKbonusATK
-fueUsada: booleanboolean fueUsadafueUsadafueUsada
+aplicarEfecto(objetivo: CartaMonstruo)aplicarEfecto(objetivo: CartaMonstruo)aplicarEfecto(objetivo)aplicarEfecto(objetivo)
🔍 Clic para ampliar y hacer zoom

24. Combate PvP en Arena de Bloques

⛏️ Minecraft🔴 experto
Clase Principal: JugadorSteve · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
⛏️
Escenario de Batalla:

Dos jugadores en un servidor PvP de Minecraft combaten con Espadas de Diamante encantadas, Pecheras que absorben daño según su durabilidad y Manzanas Doradas de regeneración.

🎯 Misión POO: Modela JugadorSteve, EspadaDiamante, ArmaduraPechera y ManzanaDorada. En cada turno se calcula el golpe crítico con probabilidad y el consumo de manzanas si la salud está crítica.

UMLDiagrama de Asociación — Combate PvP en Arena de Bloques
JugadorSteve
-apodo: StringString apodoapodoapodo
-corazonesVida: doubledouble corazonesVidacorazonesVidacorazonesVida
-armaPrincipal: EspadaDiamanteEspadaDiamante armaPrincipalarmaPrincipalarmaPrincipal
-pechera: ArmaduraPecheraArmaduraPechera pecherapecherapechera
-inventarioManzanas: List~ManzanaDorada~List~ManzanaDorada~ inventarioManzanasinventarioManzanasinventarioManzanas
+golpear(enemigo: JugadorSteve)golpear(enemigo: JugadorSteve)golpear(enemigo)golpear(enemigo)
+recibirImpacto(danioFisico: double)recibirImpacto(danioFisico: double)recibirImpacto(danioFisico)recibirImpacto(danioFisico)
+comerManzana(indice: int)comerManzana(indice: int)comerManzana(indice)comerManzana(indice)
+estaMuerto()estaMuerto()estaMuerto()estaMuerto()
◇Asociación (◇)empuña 1
EspadaDiamante
-nivelFilo: intint nivelFilonivelFilonivelFilo
-danioBase: doubledouble danioBasedanioBasedanioBase
+calcularGolpe()calcularGolpe()calcularGolpe()calcularGolpe()
◇Asociación (◇)viste 1
ArmaduraPechera
-proteccionPuntos: intint proteccionPuntosproteccionPuntosproteccionPuntos
-durabilidad: intint durabilidaddurabilidaddurabilidad
+mitigarDanio(danio: double)mitigarDanio(danio: double)mitigarDanio(danio)mitigarDanio(danio)
◆Composición (◆)guarda *
ManzanaDorada
-corazonesRegeneracion: doubledouble corazonesRegeneracioncorazonesRegeneracioncorazonesRegeneracion
-esEncantada: booleanboolean esEncantadaesEncantadaesEncantada
-consumida: booleanboolean consumidaconsumidaconsumida
+consumir()consumir()consumir()consumir()
🔍 Clic para ampliar y hacer zoom

25. Duelo 1v1 Battle Royale (Fortnite)

🎯 Fortnite / Battle Royale🔴 experto
Clase Principal: JugadorBR · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🎯
Escenario de Batalla:

Dos supervivientes en el círculo final intercambian disparos de escopeta Pump, erigen muros de madera para cubrirse y beben mini escudos para regenerar protección.

🎯 Misión POO: Modela JugadorBR, EscopetaPump, MuroConstruccion y MiniEscudo. Si el jugador tiene un muro en pie, el daño del disparo rival destruye primero el muro antes de impactar el escudo/salud.

UMLDiagrama de Asociación — Duelo 1v1 Battle Royale (Fortnite)
JugadorBR
-gamerTag: StringString gamerTaggamerTaggamerTag
-salud: intint saludsaludsalud
-escudo: intint escudoescudoescudo
-arma: EscopetaPumpEscopetaPump armaarmaarma
-muroActivo: MuroConstruccionMuroConstruccion muroActivomuroActivomuroActivo
-inventarioMinis: List~MiniEscudo~List~MiniEscudo~ inventarioMinisinventarioMinisinventarioMinis
+dispararEscopeta(rival: JugadorBR)dispararEscopeta(rival: JugadorBR)dispararEscopeta(rival)dispararEscopeta(rival)
+construirMuro(tipoMaterial: String)construirMuro(tipoMaterial: String)construirMuro(tipoMaterial)construirMuro(tipoMaterial)
+recibirImpacto(danio: int)recibirImpacto(danio: int)recibirImpacto(danio)recibirImpacto(danio)
+beberMini(indice: int)beberMini(indice: int)beberMini(indice)beberMini(indice)
◇Asociación (◇)porta 1
EscopetaPump
-rareza: StringString rarezararezarareza
-danioPorPerdigon: intint danioPorPerdigondanioPorPerdigondanioPorPerdigon
-perdigonesPorTiro: intint perdigonesPorTiroperdigonesPorTiroperdigonesPorTiro
+calcularDisparo()calcularDisparo()calcularDisparo()calcularDisparo()
◇Asociación (◇)levanta 1
MuroConstruccion
-material: StringString materialmaterialmaterial
-saludMuro: intint saludMurosaludMurosaludMuro
-estaDestruido: booleanboolean estaDestruidoestaDestruidoestaDestruido
+absorberDanio(danio: int)absorberDanio(danio: int)absorberDanio(danio)absorberDanio(danio)
◆Composición (◆)bolsillo *
MiniEscudo
-valorEscudo: intint valorEscudovalorEscudovalorEscudo
-consumido: booleanboolean consumidoconsumidoconsumido
+aplicar(escudoActual: int)aplicar(escudoActual: int)aplicar(escudoActual)aplicar(escudoActual)
🔍 Clic para ampliar y hacer zoom

26. Duelo de Cenizas (Dark Souls / Elden Ring)

🔥 Dark Souls / Soulslike🔴 experto
Clase Principal: CaballeroSinLuz · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🔥
Escenario de Batalla:

Un SinLuz desafía a un Caballero Negro. Cada combatiente gestiona su barra de Estamina para empuñar UltraEspadas pesadas y Frascos de Estus para recuperar PS.

🎯 Misión POO: Modela CaballeroSinLuz, UltraEspada, FrascoEstus y TalismanProteccion. Los ataques consumen estamina; si el combatiente no tiene estamina suficiente, su golpe se cancela.

UMLDiagrama de Asociación — Duelo de Cenizas (Dark Souls / Elden Ring)
CaballeroSinLuz
-nombre: StringString nombrenombrenombre
-puntosVidaPS: intint puntosVidaPSpuntosVidaPSpuntosVidaPS
-estamina: intint estaminaestaminaestamina
-armaPesada: UltraEspadaUltraEspada armaPesadaarmaPesadaarmaPesada
-frasco: FrascoEstusFrascoEstus frascofrascofrasco
-talisman: TalismanProteccionTalismanProteccion talismantalismantalisman
+ejecutarTajo(rival: CaballeroSinLuz)ejecutarTajo(rival: CaballeroSinLuz)ejecutarTajo(rival)ejecutarTajo(rival)
+beberEstus()beberEstus()beberEstus()beberEstus()
+regenerarEstamina()regenerarEstamina()regenerarEstamina()regenerarEstamina()
+recibirGolpe(danio: int)recibirGolpe(danio: int)recibirGolpe(danio)recibirGolpe(danio)
◇Asociación (◇)empuña 1
UltraEspada
-nombre: StringString nombrenombrenombre
-danioFisico: intint danioFisicodanioFisicodanioFisico
-costoEstamina: intint costoEstaminacostoEstaminacostoEstamina
+calcularGolpe()calcularGolpe()calcularGolpe()calcularGolpe()
◆Composición (◆)posee 1
FrascoEstus
-nivelRefuerzo: intint nivelRefuerzonivelRefuerzonivelRefuerzo
-curacionBase: intint curacionBasecuracionBasecuracionBase
-usosRestantes: intint usosRestantesusosRestantesusosRestantes
+beber()beber()beber()beber()
◇Asociación (◇)equipa 1
TalismanProteccion
-reduccionDanioPorcentaje: doubledouble reduccionDanioPorcentajereduccionDanioPorcentajereduccionDanioPorcentaje
+filtrarDanio(danio: int)filtrarDanio(danio: int)filtrarDanio(danio)filtrarDanio(danio)
🔍 Clic para ampliar y hacer zoom

27. Duelo 1v1 en Mid Lane (League of Legends)

🏆 League of Legends / MOBA🔴 experto
Clase Principal: Campeon · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🏆
Escenario de Batalla:

Dos campeones se enfrentan en la línea central. Cada campeón tiene estadísticas de AP/AD potenciadas por un Objeto Mítico, lanza su Habilidad Q gastando maná y bebe Pociones Corruptas.

🎯 Misión POO: Modela Campeon, ObjetoMitico, HabilidadQ y PocionCorrupta. En cada turno se comprueba el enfriamiento y coste de maná de la habilidad antes de infligir daño al rival.

UMLDiagrama de Asociación — Duelo 1v1 en Mid Lane (League of Legends)
Campeon
-nombreCampeon: StringString nombreCampeonnombreCampeonnombreCampeon
-saludHP: intint saludHPsaludHPsaludHP
-manaMP: intint manaMPmanaMPmanaMP
-itemMitico: ObjetoMiticoObjetoMitico itemMiticoitemMiticoitemMitico
-habilidadQ: HabilidadQHabilidadQ habilidadQhabilidadQhabilidadQ
-pociones: List~PocionCorrupta~List~PocionCorrupta~ pocionespocionespociones
+lanzarHabilidadQ(rival: Campeon)lanzarHabilidadQ(rival: Campeon)lanzarHabilidadQ(rival)lanzarHabilidadQ(rival)
+autoAtaque(rival: Campeon)autoAtaque(rival: Campeon)autoAtaque(rival)autoAtaque(rival)
+consumirPocion(indice: int)consumirPocion(indice: int)consumirPocion(indice)consumirPocion(indice)
+estaVivo()estaVivo()estaVivo()estaVivo()
◇Asociación (◇)equipa 1
ObjetoMitico
-nombre: StringString nombrenombrenombre
-ataqueAD: intint ataqueADataqueADataqueAD
-poderHabilidadAP: intint poderHabilidadAPpoderHabilidadAPpoderHabilidadAP
-manaBonus: intint manaBonusmanaBonusmanaBonus
+getAtaqueAD()getAtaqueAD()getAtaqueAD()getAtaqueAD()
+getPoderHabilidadAP()getPoderHabilidadAP()getPoderHabilidadAP()getPoderHabilidadAP()
◆Composición (◆)aprende 1
HabilidadQ
-nombreHabilidad: StringString nombreHabilidadnombreHabilidadnombreHabilidad
-danioBase: intint danioBasedanioBasedanioBase
-costoMana: intint costoManacostoManacostoMana
-escaladoAP: doubledouble escaladoAPescaladoAPescaladoAP
+calcularDanioTotal(apCampeon: int)calcularDanioTotal(apCampeon: int)calcularDanioTotal(apCampeon)calcularDanioTotal(apCampeon)
◆Composición (◆)lleva *
PocionCorrupta
-cargasRestantes: intint cargasRestantescargasRestantescargasRestantes
-curaSalud: intint curaSaludcuraSaludcuraSalud
-curaMana: intint curaManacuraManacuraMana
+usarCarga()usarCarga()usarCarga()usarCarga()
🔍 Clic para ampliar y hacer zoom

28. Torneo de Guerreros Z (Dragon Ball)

🐉 Dragon Ball Z🔴 experto
Clase Principal: GuerreroZ · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🐉
Escenario de Batalla:

Dos guerreros se baten a duelo en el Torneo de las Artes Marciales. Gestionan su barra de Ki, liberan Técnicas Especiales de energía y consumen Semillas del Ermitaño.

🎯 Misión POO: Modela GuerreroZ, TecnicaKi, SemillaErmitano y AuraTransformacion. En cada turno el guerrero puede Cargar Ki, lanzar su técnica especial o comer una semilla si su vida es baja.

UMLDiagrama de Asociación — Torneo de Guerreros Z (Dragon Ball)
GuerreroZ
-nombre: StringString nombrenombrenombre
-vidaHp: intint vidaHpvidaHpvidaHp
-kiActual: intint kiActualkiActualkiActual
-tecnica: TecnicaKiTecnicaKi tecnicatecnicatecnica
-semilla: SemillaErmitanoSemillaErmitano semillasemillasemilla
-aura: AuraTransformacionAuraTransformacion auraauraaura
+cargarKi()cargarKi()cargarKi()cargarKi()
+lanzarTecnicaEspecial(rival: GuerreroZ)lanzarTecnicaEspecial(rival: GuerreroZ)lanzarTecnicaEspecial(rival)lanzarTecnicaEspecial(rival)
+comerSemilla()comerSemilla()comerSemilla()comerSemilla()
+recibirGolpeKi(danio: int)recibirGolpeKi(danio: int)recibirGolpeKi(danio)recibirGolpeKi(danio)
◆Composición (◆)domina 1
TecnicaKi
-nombreTecnica: StringString nombreTecnicanombreTecnicanombreTecnica
-costoKi: intint costoKicostoKicostoKi
-potenciaBase: intint potenciaBasepotenciaBasepotenciaBase
+calcularDanio(multiplicadorAura: double)calcularDanio(multiplicadorAura: double)calcularDanio(multiplicadorAura)calcularDanio(multiplicadorAura)
◇Asociación (◇)guarda 1
SemillaErmitano
-disponible: booleanboolean disponibledisponibledisponible
+consumir()consumir()consumir()consumir()
◇Asociación (◇)canaliza 1
AuraTransformacion
-nombreFase: StringString nombreFasenombreFasenombreFase
-multiplicadorPoder: doubledouble multiplicadorPodermultiplicadorPodermultiplicadorPoder
-activa: booleanboolean activaactivaactiva
+activar()activar()activar()activar()
🔍 Clic para ampliar y hacer zoom

29. Reacciones Elementales de Teyvat (Genshin Impact)

✨ Genshin Impact🔴 experto
Clase Principal: PersonajeTeyvat · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
✨
Escenario de Batalla:

Dos personajes canalizan visiones de Pyro y Hydro. Cada personaje porta un Arma legendaria con crítico, un Set de Artefactos de maestría y platos de comida curativa.

🎯 Misión POO: Modela PersonajeTeyvat, ArmaGenshin, SetArtefactos y ComidaCurativa. Si el rival ya tiene aura Hydro aplicada y recibe ataque Pyro, se activa la reacción Vaporización multiplicando el daño.

UMLDiagrama de Asociación — Reacciones Elementales de Teyvat (Genshin Impact)
PersonajeTeyvat
-nombre: StringString nombrenombrenombre
-elementoVision: StringString elementoVisionelementoVisionelementoVision
-vidaHp: intint vidaHpvidaHpvidaHp
-auraAplicada: StringString auraAplicadaauraAplicadaauraAplicada
-arma: ArmaGenshinArmaGenshin armaarmaarma
-artefactos: SetArtefactosSetArtefactos artefactosartefactosartefactos
-platos: List~ComidaCurativa~List~ComidaCurativa~ platosplatosplatos
+habilidadElemental(rival: PersonajeTeyvat)habilidadElemental(rival: PersonajeTeyvat)habilidadElemental(rival)habilidadElemental(rival)
+comerPlato(indice: int)comerPlato(indice: int)comerPlato(indice)comerPlato(indice)
+recibirImpactoElemental(danioBase: int, elementoAtacante: String)recibirImpactoElemental(danioBase: int, elementoAtacante: String)recibirImpactoElemental(danioBase, elementoAtacante)recibirImpactoElemental(danioBase, elementoAtacante)
◇Asociación (◇)empuña 1
ArmaGenshin
-nombreArma: StringString nombreArmanombreArmanombreArma
-ataqueBasico: intint ataqueBasicoataqueBasicoataqueBasico
-probCritico: doubledouble probCriticoprobCriticoprobCritico
+getDanioTotal()getDanioTotal()getDanioTotal()getDanioTotal()
◇Asociación (◇)equipa 1
SetArtefactos
-maestriaElemental: intint maestriaElementalmaestriaElementalmaestriaElemental
-bonoDanioPorcentaje: doubledouble bonoDanioPorcentajebonoDanioPorcentajebonoDanioPorcentaje
+calcularMultiplicadorReaccion()calcularMultiplicadorReaccion()calcularMultiplicadorReaccion()calcularMultiplicadorReaccion()
◆Composición (◆)almacena *
ComidaCurativa
-nombrePlato: StringString nombrePlatonombrePlatonombrePlato
-puntosCuracion: intint puntosCuracionpuntosCuracionpuntosCuracion
-servida: booleanboolean servidaservidaservida
+consumir()consumir()consumir()consumir()
🔍 Clic para ampliar y hacer zoom

30. Arena PvP de Campeones (World of Warcraft)

🛡️ World of Warcraft🔴 experto
Clase Principal: HeroeAzeroth · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🛡️
Escenario de Batalla:

Un Guerrero y un Chamán se enfrentan en la Arena de Dalaran. El Guerrero empuña un Arma Forjada, el Chamán planta Tótems que pulsan mejoras cada turno y consumen Frascos alquímicos.

🎯 Misión POO: Modela HeroeAzeroth, ArmaForjada, TotemSoporte y FrascoPoder. El tótem aplica daño o curación pasiva al inicio de cada turno mientras tenga durabilidad.

UMLDiagrama de Asociación — Arena PvP de Campeones (World of Warcraft)
HeroeAzeroth
-nombre: StringString nombrenombrenombre
-claseRol: StringString claseRolclaseRolclaseRol
-salud: intint saludsaludsalud
-iraRage: intint iraRageiraRageiraRage
-arma: ArmaForjadaArmaForjada armaarmaarma
-totem: TotemSoporteTotemSoporte totemtotemtotem
-frascos: List~FrascoPoder~List~FrascoPoder~ frascosfrascosfrascos
+golpeMortal(rival: HeroeAzeroth)golpeMortal(rival: HeroeAzeroth)golpeMortal(rival)golpeMortal(rival)
+plantarTotem(t: TotemSoporte)plantarTotem(t: TotemSoporte)plantarTotem(t)plantarTotem(t)
+procesarEfectoTotem()procesarEfectoTotem()procesarEfectoTotem()procesarEfectoTotem()
+beberFrasco(indice: int)beberFrasco(indice: int)beberFrasco(indice)beberFrasco(indice)
◇Asociación (◇)blande 1
ArmaForjada
-nombreArma: StringString nombreArmanombreArmanombreArma
-danioDPS: intint danioDPSdanioDPSdanioDPS
-probabilidadSangrado: doubledouble probabilidadSangradoprobabilidadSangradoprobabilidadSangrado
+calcularGolpe()calcularGolpe()calcularGolpe()calcularGolpe()
◇Asociación (◇)coloca 1
TotemSoporte
-tipoTotem: StringString tipoTotemtipoTotemtipoTotem
-efectoPuntos: intint efectoPuntosefectoPuntosefectoPuntos
-rondasDuracion: intint rondasDuracionrondasDuracionrondasDuracion
+pulsarRonda()pulsarRonda()pulsarRonda()pulsarRonda()
+isActivo()isActivo()isActivo()isActivo()
◆Composición (◆)guarda *
FrascoPoder
-nombreFrasco: StringString nombreFrasconombreFrasconombreFrasco
-bonusIra: intint bonusIrabonusIrabonusIra
-usado: booleanboolean usadousadousado
+consumir()consumir()consumir()consumir()
🔍 Clic para ampliar y hacer zoom

31. Combate Clásico de Soldados (Final Fantasy)

🔮 Final Fantasy🔴 experto
Clase Principal: SoldadoFF · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🔮
Escenario de Batalla:

Dos soldados de élite usan Espadas Buster con ranuras de Materia elemental (Fuego, Hielo) y éteres de maná.

🎯 Misión POO: Modela SoldadoFF, EspadaRanurada, MateriaMagica y PocionEter. El soldado puede atacar físicamente con su sable o conjurar el hechizo de la Materia si tiene MP suficiente.

UMLDiagrama de Asociación — Combate Clásico de Soldados (Final Fantasy)
SoldadoFF
-nombre: StringString nombrenombrenombre
-hpActual: intint hpActualhpActualhpActual
-mpActual: intint mpActualmpActualmpActual
-sableBuster: EspadaRanuradaEspadaRanurada sableBustersableBustersableBuster
-materias: List~MateriaMagica~List~MateriaMagica~ materiasmateriasmaterias
-eteres: List~PocionEter~List~PocionEter~ eteresetereseteres
+ataqueFisico(rival: SoldadoFF)ataqueFisico(rival: SoldadoFF)ataqueFisico(rival)ataqueFisico(rival)
+conjurarMateria(slotMateria: int, rival: SoldadoFF)conjurarMateria(slotMateria: int, rival: SoldadoFF)conjurarMateria(slotMateria, rival)conjurarMateria(slotMateria, rival)
+usarEter(indice: int)usarEter(indice: int)usarEter(indice)usarEter(indice)
◇Asociación (◇)equipa 1
EspadaRanurada
-nombre: StringString nombrenombrenombre
-danioFisico: intint danioFisicodanioFisicodanioFisico
-maxRanuras: intint maxRanurasmaxRanurasmaxRanuras
+getDanioFisico()getDanioFisico()getDanioFisico()getDanioFisico()
◆Composición (◆)engasta *
MateriaMagica
-elemento: StringString elementoelementoelemento
-nombreHechizo: StringString nombreHechizonombreHechizonombreHechizo
-poderMagico: intint poderMagicopoderMagicopoderMagico
-costoMP: intint costoMPcostoMPcostoMP
+getPoder()getPoder()getPoder()getPoder()
+getCostoMP()getCostoMP()getCostoMP()getCostoMP()
◆Composición (◆)bolsa *
PocionEter
-mpRecuperado: intint mpRecuperadompRecuperadompRecuperado
-gastado: booleanboolean gastadogastadogastado
+consumir()consumir()consumir()consumir()
🔍 Clic para ampliar y hacer zoom

32. Duelo de Netrunners (Cyberpunk 2077)

💾 Cyberpunk 2077🔴 experto
Clase Principal: MercenarioCyber · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
💾
Escenario de Batalla:

Dos mercenarios cibernéticos en Night City se enfrentan hackeando el implante del rival con Ciberdecks, pistolas inteligentes y recuperadores MaxDoc.

🎯 Misión POO: Modela MercenarioCyber, CiberdeckOS, PistolaSmart y InhaladorMaxDoc. Los quickhacks de sobrecalentamiento consumen memoria RAM del ciberdeck para aplicar daño sin fallar.

UMLDiagrama de Asociación — Duelo de Netrunners (Cyberpunk 2077)
MercenarioCyber
-alias: StringString aliasaliasalias
-ciberSalud: intint ciberSaludciberSaludciberSalud
-ramActual: intint ramActualramActualramActual
-ciberdeck: CiberdeckOSCiberdeckOS ciberdeckciberdeckciberdeck
-pistolaSmart: PistolaSmartPistolaSmart pistolaSmartpistolaSmartpistolaSmart
-inhaladores: List~InhaladorMaxDoc~List~InhaladorMaxDoc~ inhaladoresinhaladoresinhaladores
+ejecutarQuickhack(rival: MercenarioCyber)ejecutarQuickhack(rival: MercenarioCyber)ejecutarQuickhack(rival)ejecutarQuickhack(rival)
+disparoTeledirigido(rival: MercenarioCyber)disparoTeledirigido(rival: MercenarioCyber)disparoTeledirigido(rival)disparoTeledirigido(rival)
+inhalarMaxDoc(indice: int)inhalarMaxDoc(indice: int)inhalarMaxDoc(indice)inhalarMaxDoc(indice)
◇Asociación (◇)porta 1
CiberdeckOS
-modeloChip: StringString modeloChipmodeloChipmodeloChip
-ramMaxima: intint ramMaximaramMaximaramMaxima
-danioQuickhack: intint danioQuickhackdanioQuickhackdanioQuickhack
-costoRAM: intint costoRAMcostoRAMcostoRAM
+getDanioQuickhack()getDanioQuickhack()getDanioQuickhack()getDanioQuickhack()
+getCostoRAM()getCostoRAM()getCostoRAM()getCostoRAM()
◇Asociación (◇)empuña 1
PistolaSmart
-nombreModelo: StringString nombreModelonombreModelonombreModelo
-danioBala: intint danioBaladanioBaladanioBala
-rastreoActivo: booleanboolean rastreoActivorastreoActivorastreoActivo
+calcularDisparo()calcularDisparo()calcularDisparo()calcularDisparo()
◆Composición (◆)bolsillo *
InhaladorMaxDoc
-porcentajeCura: intint porcentajeCuraporcentajeCuraporcentajeCura
-usado: booleanboolean usadousadousado
+activar()activar()activar()activar()
🔍 Clic para ampliar y hacer zoom

33. Combate de Vanguardia (Overwatch)

🛡️ Overwatch🔴 experto
Clase Principal: HeroeOverwatch · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🛡️
Escenario de Batalla:

Dos héroes de Overwatch disputan el objetivo. Disparan sus cañones, despliegan barreras de energía protectoras y consumen packs de salud distribuidos por el mapa.

🎯 Misión POO: Modela HeroeOverwatch, CanionEnergia, BarreraEscudo y PackSalud. La barrera mitiga el daño entrante hasta que su energía colapsa.

UMLDiagrama de Asociación — Combate de Vanguardia (Overwatch)
HeroeOverwatch
-nombreHeroe: StringString nombreHeroenombreHeroenombreHeroe
-saludHP: intint saludHPsaludHPsaludHP
-porcentajeUlti: intint porcentajeUltiporcentajeUltiporcentajeUlti
-canion: CanionEnergiaCanionEnergia canioncanioncanion
-barrera: BarreraEscudoBarreraEscudo barrerabarrerabarrera
-packsSalud: List~PackSalud~List~PackSalud~ packsSaludpacksSaludpacksSalud
+dispararCanion(rival: HeroeOverwatch)dispararCanion(rival: HeroeOverwatch)dispararCanion(rival)dispararCanion(rival)
+desplegarBarrera()desplegarBarrera()desplegarBarrera()desplegarBarrera()
+agarrarPackSalud(indice: int)agarrarPackSalud(indice: int)agarrarPackSalud(indice)agarrarPackSalud(indice)
+recibirDisparo(danio: int)recibirDisparo(danio: int)recibirDisparo(danio)recibirDisparo(danio)
◇Asociación (◇)equipa 1
CanionEnergia
-tipoMunicion: StringString tipoMuniciontipoMuniciontipoMunicion
-danioPorTiro: intint danioPorTirodanioPorTirodanioPorTiro
+disparar()disparar()disparar()disparar()
◇Asociación (◇)proyecta 1
BarreraEscudo
-capacidadHP: intint capacidadHPcapacidadHPcapacidadHP
-desplegada: booleanboolean desplegadadesplegadadesplegada
+absorber(danio: int)absorber(danio: int)absorber(danio)absorber(danio)
+isDesplegada()isDesplegada()isDesplegada()isDesplegada()
◆Composición (◆)recoge *
PackSalud
-tamano: StringString tamanotamanotamano
-curacionHP: intint curacionHPcuracionHPcuracionHP
-tomado: booleanboolean tomadotomadotomado
+consumir()consumir()consumir()consumir()
🔍 Clic para ampliar y hacer zoom

34. Duelo Kombat 1v1 (Mortal Kombat)

🩸 Mortal Kombat🔴 experto
Clase Principal: Kombatiente · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🩸
Escenario de Batalla:

Dos kombatientes se miden en el torneo mortal. Cada uno tiene un Estilo de Pelea marcial, un Arma Kombat blanca y Amuletos de alma curativos.

🎯 Misión POO: Modela Kombatiente, EstiloCombate, ArmaKombat y AmuletoCuracion. Ejecuta combos y ataques especiales con armas sangrientas en turnos.

UMLDiagrama de Asociación — Duelo Kombat 1v1 (Mortal Kombat)
Kombatiente
-nombre: StringString nombrenombrenombre
-salud: intint saludsaludsalud
-barraExMeter: intint barraExMeterbarraExMeterbarraExMeter
-estilo: EstiloCombateEstiloCombate estiloestiloestilo
-arma: ArmaKombatArmaKombat armaarmaarma
-amuletos: List~AmuletoCuracion~List~AmuletoCuracion~ amuletosamuletosamuletos
+ataqueBasico(rival: Kombatiente)ataqueBasico(rival: Kombatiente)ataqueBasico(rival)ataqueBasico(rival)
+golpeConArma(rival: Kombatiente)golpeConArma(rival: Kombatiente)golpeConArma(rival)golpeConArma(rival)
+usarAmuleto(indice: int)usarAmuleto(indice: int)usarAmuleto(indice)usarAmuleto(indice)
◆Composición (◆)domina 1
EstiloCombate
-nombreEstilo: StringString nombreEstilonombreEstilonombreEstilo
-danioGolpes: intint danioGolpesdanioGolpesdanioGolpes
+getDanioGolpes()getDanioGolpes()getDanioGolpes()getDanioGolpes()
◇Asociación (◇)empuña 1
ArmaKombat
-nombreArma: StringString nombreArmanombreArmanombreArma
-danioFilo: intint danioFilodanioFilodanioFilo
-efectoHemorragia: intint efectoHemorragiaefectoHemorragiaefectoHemorragia
+calcularDanioCorte()calcularDanioCorte()calcularDanioCorte()calcularDanioCorte()
◆Composición (◆)posee *
AmuletoCuracion
-puntosRecuperados: intint puntosRecuperadospuntosRecuperadospuntosRecuperados
-usado: booleanboolean usadousadousado
+consumir()consumir()consumir()consumir()
🔍 Clic para ampliar y hacer zoom

35. Combate Infernal (DOOM)

🔥 DOOM🔴 experto
Clase Principal: DoomSlayer · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🔥
Escenario de Batalla:

El Doom Slayer enfrenta a un Barón del Infierno. Porta su legendaria Super Escopeta, un Lanzallamas de hombro para extraer armadura y cajas de cartuchos de munición.

🎯 Misión POO: Modela DoomSlayer, SuperShotgun, CanionHombro y CajaCartuchos. El disparo de doble cañón consume cartuchos para aniquilar enemigos.

UMLDiagrama de Asociación — Combate Infernal (DOOM)
DoomSlayer
-nombre: StringString nombrenombrenombre
-vidaSalud: intint vidaSaludvidaSaludvidaSalud
-armadura: intint armaduraarmaduraarmadura
-escopeta: SuperShotgunSuperShotgun escopetaescopetaescopeta
-lanzallamas: CanionHombroCanionHombro lanzallamaslanzallamaslanzallamas
-reservasBalas: List~CajaCartuchos~List~CajaCartuchos~ reservasBalasreservasBalasreservasBalas
+dispararDobleCanon(demonio: DoomSlayer)dispararDobleCanon(demonio: DoomSlayer)dispararDobleCanon(demonio)dispararDobleCanon(demonio)
+quemarConHombro(demonio: DoomSlayer)quemarConHombro(demonio: DoomSlayer)quemarConHombro(demonio)quemarConHombro(demonio)
+recargarCartuchos(indice: int)recargarCartuchos(indice: int)recargarCartuchos(indice)recargarCartuchos(indice)
◇Asociación (◇)empuña 1
SuperShotgun
-nombre: StringString nombrenombrenombre
-danioDobleCanon: intint danioDobleCanondanioDobleCanondanioDobleCanon
-cartuchosCargados: intint cartuchosCargadoscartuchosCargadoscartuchosCargados
+disparar()disparar()disparar()disparar()
+recargar(cant: int)recargar(cant: int)recargar(cant)recargar(cant)
◇Asociación (◇)monta 1
CanionHombro
-danioFuego: intint danioFuegodanioFuegodanioFuego
-armaduraGenerada: intint armaduraGeneradaarmaduraGeneradaarmaduraGenerada
+incinerar()incinerar()incinerar()incinerar()
◆Composición (◆)bolsa *
CajaCartuchos
-cantidadBalas: intint cantidadBalascantidadBalascantidadBalas
-vacia: booleanboolean vaciavaciavacia
+suministrar()suministrar()suministrar()suministrar()
🔍 Clic para ampliar y hacer zoom

36. Infiltración en la Nave (Among Us)

🚀 Among Us🔴 experto
Clase Principal: TripulanteNave · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🚀
Escenario de Batalla:

Un Tripulante y un Impostor se enfrentan en turnos en la nave espacial. El Tripulante usa escáneres y kits de reparación de tareas, mientras el Impostor sabotea con cuchillo.

🎯 Misión POO: Modela TripulanteNave, ScannerTarjeta, BotonEmergencia y KitReparacion. Cada turno el tripulante puede avanzar tareas o alertar por botón de emergencia.

UMLDiagrama de Asociación — Infiltración en la Nave (Among Us)
TripulanteNave
-colorTraje: StringString colorTrajecolorTrajecolorTraje
-vidaHp: intint vidaHpvidaHpvidaHp
-tareasProgreso: intint tareasProgresotareasProgresotareasProgreso
-scanner: ScannerTarjetaScannerTarjeta scannerscannerscanner
-boton: BotonPanicoBotonPanico botonbotonboton
-piezas: List~KitReparacion~List~KitReparacion~ piezaspiezaspiezas
+hacerTarea()hacerTarea()hacerTarea()hacerTarea()
+tocarBoton()tocarBoton()tocarBoton()tocarBoton()
+repararFalla(indice: int)repararFalla(indice: int)repararFalla(indice)repararFalla(indice)
+recibirSabotaje(danio: int)recibirSabotaje(danio: int)recibirSabotaje(danio)recibirSabotaje(danio)
◇Asociación (◇)lleva 1
ScannerTarjeta
-velocidadPase: StringString velocidadPasevelocidadPasevelocidadPase
-valido: booleanboolean validovalidovalido
+escanear()escanear()escanear()escanear()
◇Asociación (◇)accede 1
BotonPanico
-usosDisponibles: intint usosDisponiblesusosDisponiblesusosDisponibles
+presionar()presionar()presionar()presionar()
◆Composición (◆)bolsa *
KitReparacion
-nombreModulo: StringString nombreModulonombreModulonombreModulo
-progresoOtorgado: intint progresoOtorgadoprogresoOtorgadoprogresoOtorgado
-usado: booleanboolean usadousadousado
+instalar()instalar()instalar()instalar()
🔍 Clic para ampliar y hacer zoom

37. Caza de Wyverns (Monster Hunter)

🐉 Monster Hunter🔴 experto
Clase Principal: CazadorHunter · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🐉
Escenario de Batalla:

Un Cazador con Gran Espada y Kinsecto adiestrado se enfrenta a un temible Wyvern en una cacería por turnos, extrayendo esencias y bebiendo megapociones.

🎯 Misión POO: Modela CazadorHunter, GranEspadaCazador, KinsectoMascota y MegaPocionCaza. El kinsecto extrae extractos de ataque que potencian la espada.

UMLDiagrama de Asociación — Caza de Wyverns (Monster Hunter)
CazadorHunter
-nombre: StringString nombrenombrenombre
-saludHP: intint saludHPsaludHPsaludHP
-resistencia: intint resistenciaresistenciaresistencia
-granEspada: GranEspadaCazadorGranEspadaCazador granEspadagranEspadagranEspada
-kinsecto: KinsectoMascotaKinsectoMascota kinsectokinsectokinsecto
-megapociones: List~MegaPocionCaza~List~MegaPocionCaza~ megapocionesmegapocionesmegapociones
+tajoCargado(wyvern: CazadorHunter)tajoCargado(wyvern: CazadorHunter)tajoCargado(wyvern)tajoCargado(wyvern)
+enviarKinsecto()enviarKinsecto()enviarKinsecto()enviarKinsecto()
+beberMegaPocion(indice: int)beberMegaPocion(indice: int)beberMegaPocion(indice)beberMegaPocion(indice)
◇Asociación (◇)blande 1
GranEspadaCazador
-nombre: StringString nombrenombrenombre
-danioCorte: intint danioCortedanioCortedanioCorte
-afiladoNivel: intint afiladoNivelafiladoNivelafiladoNivel
+calcularTajo(bonusKinsecto: int)calcularTajo(bonusKinsecto: int)calcularTajo(bonusKinsecto)calcularTajo(bonusKinsecto)
◇Asociación (◇)comanda 1
KinsectoMascota
-tipoExtracto: StringString tipoExtractotipoExtractotipoExtracto
-bonusAtaque: intint bonusAtaquebonusAtaquebonusAtaque
+extraerEsencia()extraerEsencia()extraerEsencia()extraerEsencia()
◆Composición (◆)lleva *
MegaPocionCaza
-saludCurada: intint saludCuradasaludCuradasaludCurada
-tomada: booleanboolean tomadatomadatomada
+consumir()consumir()consumir()consumir()
🔍 Clic para ampliar y hacer zoom

38. Duelo en la Taberna (Hearthstone)

🍺 Hearthstone🔴 experto
Clase Principal: HeroeHearthstone · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🍺
Escenario de Batalla:

Dos héroes en la taberna gestionan cristales de maná por turnos, activan su Poder de Héroe y juegan Esbirros con ataque/salud.

🎯 Misión POO: Modela HeroeHearthstone, PoderHeroe, ArmaHeroica y CartaEsbirro. En cada turno se incrementa el maná disponible para invocar cartas o usar el poder.

UMLDiagrama de Asociación — Duelo en la Taberna (Hearthstone)
HeroeHearthstone
-claseHeroe: StringString claseHeroeclaseHeroeclaseHeroe
-vidaHp: intint vidaHpvidaHpvidaHp
-manaActual: intint manaActualmanaActualmanaActual
-poderHeroico: PoderHeroePoderHeroe poderHeroicopoderHeroicopoderHeroico
-arma: ArmaHeroicaArmaHeroica armaarmaarma
-mesaEsbirros: List~CartaEsbirro~List~CartaEsbirro~ mesaEsbirrosmesaEsbirrosmesaEsbirros
+usarPoderHeroico(rival: HeroeHearthstone)usarPoderHeroico(rival: HeroeHearthstone)usarPoderHeroico(rival)usarPoderHeroico(rival)
+jugarEsbirro(e: CartaEsbirro)jugarEsbirro(e: CartaEsbirro)jugarEsbirro(e)jugarEsbirro(e)
+ordenarAtaqueEsbirro(slot: int, rival: HeroeHearthstone)ordenarAtaqueEsbirro(slot: int, rival: HeroeHearthstone)ordenarAtaqueEsbirro(slot, rival)ordenarAtaqueEsbirro(slot, rival)
◆Composición (◆)posee 1
PoderHeroe
-nombrePoder: StringString nombrePodernombrePodernombrePoder
-costoMana: intint costoManacostoManacostoMana
-impactoDanio: intint impactoDanioimpactoDanioimpactoDanio
+activar()activar()activar()activar()
◇Asociación (◇)equipa 1
ArmaHeroica
-nombreArma: StringString nombreArmanombreArmanombreArma
-ataque: intint ataqueataqueataque
-durabilidad: intint durabilidaddurabilidaddurabilidad
+golpear()golpear()golpear()golpear()
◆Composición (◆)invoca *
CartaEsbirro
-nombre: StringString nombrenombrenombre
-costoMana: intint costoManacostoManacostoMana
-ataque: intint ataqueataqueataque
-salud: intint saludsaludsalud
+getAtaque()getAtaque()getAtaque()getAtaque()
+recibirDanio(d: int)recibirDanio(d: int)recibirDanio(d)recibirDanio(d)
🔍 Clic para ampliar y hacer zoom

39. Duelo en Hallownest (Hollow Knight)

🗡️ Hollow Knight🔴 experto
Clase Principal: CaballeroVacio · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🗡️
Escenario de Batalla:

El Caballero combate empuñando su Aguijón Puro, acumulando Alma con cada corte para sanar máscaras o disparar hechizos de Espíritu Vengativo.

🎯 Misión POO: Modela CaballeroVacio, AguijonClavo, AmuletoChapa y HechizoEspiritu. Cada golpe de aguijón llena el medidor de alma para focalizar curación.

UMLDiagrama de Asociación — Duelo en Hallownest (Hollow Knight)
CaballeroVacio
-nombre: StringString nombrenombrenombre
-mascarasVida: intint mascarasVidamascarasVidamascarasVida
-almaActual: intint almaActualalmaActualalmaActual
-aguijon: AguijonClavoAguijonClavo aguijonaguijonaguijon
-amuleto: AmuletoChapaAmuletoChapa amuletoamuletoamuleto
-hechizo: HechizoEspirituHechizoEspiritu hechizohechizohechizo
+golpearAguijon(rival: CaballeroVacio)golpearAguijon(rival: CaballeroVacio)golpearAguijon(rival)golpearAguijon(rival)
+dispararHechizo(rival: CaballeroVacio)dispararHechizo(rival: CaballeroVacio)dispararHechizo(rival)dispararHechizo(rival)
+focalizarCuracion()focalizarCuracion()focalizarCuracion()focalizarCuracion()
◇Asociación (◇)empuña 1
AguijonClavo
-nivelRefuerzo: intint nivelRefuerzonivelRefuerzonivelRefuerzo
-danioBase: intint danioBasedanioBasedanioBase
-almaGenerada: intint almaGeneradaalmaGeneradaalmaGenerada
+calcularCorte()calcularCorte()calcularCorte()calcularCorte()
+getAlmaGenerada()getAlmaGenerada()getAlmaGenerada()getAlmaGenerada()
◇Asociación (◇)equipa 1
AmuletoChapa
-nombreAmuleto: StringString nombreAmuletonombreAmuletonombreAmuleto
-extraDanioMagico: intint extraDanioMagicoextraDanioMagicoextraDanioMagico
+getBonusMagico()getBonusMagico()getBonusMagico()getBonusMagico()
◆Composición (◆)canaliza 1
HechizoEspiritu
-nombreHechizo: StringString nombreHechizonombreHechizonombreHechizo
-danioBase: intint danioBasedanioBasedanioBase
-costoAlma: intint costoAlmacostoAlmacostoAlma
+getDanio()getDanio()getDanio()getDanio()
+getCostoAlma()getCostoAlma()getCostoAlma()getCostoAlma()
🔍 Clic para ampliar y hacer zoom

40. Duelo de Espadachines de Hyrule (The Legend of Zelda)

🛡️ The Legend of Zelda🔴 experto
Clase Principal: HeroeHyrule · 4 clases en total · 3 conexiones (o-- / *--)
0 / 4
🛡️
Escenario de Batalla:

Link se enfrenta a Dark Link. Empuña la Espada Maestra, se protege con el Escudo Hyliano y come platos cocinados de corazones.

🎯 Misión POO: Modela HeroeHyrule, EspadaMaestra, EscudoHyliano y PlatoCocinado. El escudo permite ejecutar un contraataque Parry si mitiga el impacto a la perfección.

UMLDiagrama de Asociación — Duelo de Espadachines de Hyrule (The Legend of Zelda)
HeroeHyrule
-nombre: StringString nombrenombrenombre
-corazonesVida: intint corazonesVidacorazonesVidacorazonesVida
-estamina: doubledouble estaminaestaminaestamina
-espada: EspadaMaestraEspadaMaestra espadaespadaespada
-escudo: EscudoHylianoEscudoHyliano escudoescudoescudo
-alforja: List~PlatoCocinado~List~PlatoCocinado~ alforjaalforjaalforja
+ataqueGiratorio(rival: HeroeHyrule)ataqueGiratorio(rival: HeroeHyrule)ataqueGiratorio(rival)ataqueGiratorio(rival)
+defenderConParry(danioEntrante: int)defenderConParry(danioEntrante: int)defenderConParry(danioEntrante)defenderConParry(danioEntrante)
+comerReceta(indice: int)comerReceta(indice: int)comerReceta(indice)comerReceta(indice)
◇Asociación (◇)empuña 1
EspadaMaestra
-poderSagrado: intint poderSagradopoderSagradopoderSagrado
-brilloEspada: booleanboolean brilloEspadabrilloEspadabrilloEspada
+desatarTajo()desatarTajo()desatarTajo()desatarTajo()
◇Asociación (◇)equipa 1
EscudoHyliano
-durabilidad: intint durabilidaddurabilidaddurabilidad
-defensaBase: intint defensaBasedefensaBasedefensaBase
+ejecutarParry(danio: int)ejecutarParry(danio: int)ejecutarParry(danio)ejecutarParry(danio)
◆Composición (◆)alforja *
PlatoCocinado
-nombrePlato: StringString nombrePlatonombrePlatonombrePlato
-corazonesCurados: intint corazonesCuradoscorazonesCuradoscorazonesCurados
-consumido: booleanboolean consumidoconsumidoconsumido
+comer()comer()comer()comer()
🔍 Clic para ampliar y hacer zoom
Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.