diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index b268ef36cd2de3a14ddddf25aa9f5d4e95731e18..2159e853647dc794a0b2787150f89d2bdea8f8d1 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -2,7 +2,7 @@ <project version="4"> <component name="deploymentTargetSelector"> <selectionStates> - <SelectionState runConfigName="app"> + <SelectionState runConfigName="MainActivity"> <option name="selectionMode" value="DROPDOWN" /> </SelectionState> </selectionStates> diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt index d9e365369cf31d68c616e9011fff40c08548cd40..06a8b37a8b082a5b50b850808a442004ad73b2af 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt @@ -13,6 +13,7 @@ import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo import com.example.ellegadodepintia.exploradoresDePintia.model.GameState import com.example.ellegadodepintia.exploradoresDePintia.model.GeneradorDeEventos @@ -29,12 +30,13 @@ class ExploradoresDePintia : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_exploradores_de_pintia) - startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> - if (result.resultCode == Activity.RESULT_OK) { - val mensajeResultado = result.data?.getStringExtra("resultado") - println("Volvemos del mini-juego: $mensajeResultado") + startForResult = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == Activity.RESULT_OK) { + val mensajeResultado = result.data?.getStringExtra("resultado") + println("Volvemos del mini-juego: $mensajeResultado") + } } - } GameState.fragmentManager = supportFragmentManager @@ -77,8 +79,21 @@ class ExploradoresDePintia : AppCompatActivity() { if (requestCode == 100 && resultCode == RESULT_OK) { val resultado = data?.getStringExtra("resultado") Toast.makeText(this, resultado, Toast.LENGTH_SHORT).show() - // Aquà puedes realizar acciones según el resultado + + } else if (requestCode == 102 && resultCode == RESULT_OK) { + val puntuacion = data?.getStringExtra("PUNTUACION")!!.toInt() + GameState.jugador.actualizarAtributo(Atributo.Energia, puntuacion/3) + GameState.jugador.actualizarAtributo(Atributo.Vida, puntuacion/3) + + } else if (requestCode == 103 && resultCode == RESULT_OK) { + val tiempo = data?.getStringExtra("TIEMPO")!!.toInt() + if (tiempo >= 1000){ + GameState.jugador.actualizarMonedas(GameState.jugador.monedas.plus(tiempo/1000)) + }else{ + GameState.jugador.actualizarAtributo(Atributo.Energia, -GameState.jugador.atributos[Atributo.Energia]!!/2) + } } + } diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GeneradorDeEventos.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GeneradorDeEventos.kt index eff38d902fd9b6f53c88cd3962bf21213bd642d2..1c02b59aaa031a1921e3a1fca3f59db89384d848 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GeneradorDeEventos.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GeneradorDeEventos.kt @@ -11,7 +11,7 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.Eve object GeneradorDeEventos { - private const val CANTIDAD = 6 // Numero de eventos generados + private const val CANTIDAD = 7 // Numero de eventos generados private var eventos = ArrayList<Evento>() private fun crearEvento(): Evento { diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Jugador.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Jugador.kt index 861ae25d2d00f12f18c912956bcc3d4167fbb8ac..73b554ef2458a53274d89ddfe61c06498609e26a 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Jugador.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Jugador.kt @@ -102,6 +102,12 @@ class Jugador { fun actualizarAtributo(atributo: Atributo, valor: Int) { atributos[atributo] = atributos[atributo]!!.plus(valor) + if (atributo == Atributo.Vida && atributos[atributo]!! >= vidaMax){ + atributos[atributo] = vidaMax + } + if (atributo == Atributo.Energia && atributos[atributo]!! >= energiaMax){ + atributos[atributo] = energiaMax + } notifyObservers() if (atributo == Atributo.Vida && atributos[atributo]!! <= 0) { "¡Has sido derrotado!".also { diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/TipoEvento.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/TipoEvento.kt index 41b62f9b94168f9144e5914b7ac1e470b5a983e3..26c05d22aeeeb2011724a30f27923d894a8347b3 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/TipoEvento.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/TipoEvento.kt @@ -6,6 +6,8 @@ enum class TipoEvento { Tienda, Trampa, Riesgo, + Descanso, + Ladron, /*Trampa, Aliado, Misterio, diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoLadron.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoLadron.kt new file mode 100644 index 0000000000000000000000000000000000000000..61cf2705db9981242b249ec318decd0519db75b6 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoLadron.kt @@ -0,0 +1,18 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.content.Intent +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.minijuego3.Minijuego3 + +class EfectoLadron() : Efecto(100) { + override fun ejecutar(): String { + + val intent = Intent(context, Minijuego3::class.java) + context!!.startActivityForResult(intent, 103) + + GameState.eventoActual.actualizarFinalizado(true) + return "Si has logrado completar el minijuego, habrás obtenido monedas. En otro caso, tu energÃa se ha reducido a la mitad" + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoNubeVaccea.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoNubeVaccea.kt new file mode 100644 index 0000000000000000000000000000000000000000..7c077fbc1de8a7da65e5c782658a52f26498b66b --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoNubeVaccea.kt @@ -0,0 +1,24 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.content.Intent +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.minijuego2.Minijuego2 + + +class EfectoNubeVaccea() : Efecto(100) { + override fun ejecutar(): String { + if (GameState.jugador.atributos[Atributo.Energia] == GameState.jugador.energiaMax && + GameState.jugador.atributos[Atributo.Vida] == GameState.jugador.vidaMax){ + return "Tienes la vida y la energÃa al máximo. ¡No necesitas descansar!" + } + + val intent = Intent(context, Minijuego2::class.java) + context!!.startActivityForResult(intent, 102) + + GameState.eventoActual.actualizarFinalizado(true) + return "Has descansado" + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/DescansoFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/DescansoFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..20f6e438be2a7feaa632d5f94736289f3e302e54 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/DescansoFactory.kt @@ -0,0 +1,51 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoIgnorar +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoNubeVaccea + +class DescansoFactory : EventoFactory { + private val descansosMap = mapOf( + "Llegaste a un campamento vacceo, con un gran fuego en el centro y chozas hechas de madera y barro. Aquà puedes descansar, recuperar energÃa y estar listo para nuevas aventuras." to Pair( + R.drawable.asi_exploradores_campamento, listOf( + Opcion( + descripcion = "Descansar", + atributoRequerida = Atributo.Energia, + EfectoNubeVaccea() + + ), Opcion( + descripcion = "Continuar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ) + ) + + override fun generarDescripcion(): String { + return descansosMap.keys.random() + } + + override fun generarOpciones(descripcion: String): MutableList<Opcion> { + return descansosMap[descripcion]?.second?.toMutableList() + ?: mutableListOf() + } + + override fun generarImagen(descripcion: String): Int { + return descansosMap[descripcion]?.first!! + } + + override fun generarEvento(): EventoDescanso { + val descripcion = generarDescripcion() + return EventoDescanso( + descripcion = descripcion, + dificultad = 0, + opciones = generarOpciones(descripcion), + imagen = generarImagen(descripcion), + resistenciaMax = (2..8).random(), + finalizado = false + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoDescanso.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoDescanso.kt new file mode 100644 index 0000000000000000000000000000000000000000..d30a839cc13c4ebba9023266ef6ccd4bbd4b473c --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoDescanso.kt @@ -0,0 +1,11 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion + +class EventoDescanso( + override val descripcion: String, + override val dificultad: Int, + override val opciones: MutableList<Opcion>, + override val imagen: Int, resistenciaMax: Int, + override var finalizado: Boolean, +) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado) \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactorySelector.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactorySelector.kt index e9a3c8c2c06985cd07dfaaf65f2f62a293ecc982..706bc854eb935e0ca7364b31d88f2d20d5835fd0 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactorySelector.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactorySelector.kt @@ -13,16 +13,20 @@ object EventoFactorySelector { TipoEvento.Tienda -> TiendaFactory() TipoEvento.Trampa -> TrampaFactory() TipoEvento.Riesgo -> RiesgoFactory() + TipoEvento.Descanso -> DescansoFactory() + TipoEvento.Ladron -> LadronFactory() } } private fun seleccionarTipoEventoConProbabilidades(): TipoEvento { val probabilidades = mapOf( - TipoEvento.Reliquia to 0.3, + TipoEvento.Reliquia to 0.2, TipoEvento.Tienda to 0.1, + TipoEvento.Riesgo to 0.2, TipoEvento.Trampa to 0.1, TipoEvento.Combate to 0.2, - TipoEvento.Riesgo to 0.3, + TipoEvento.Descanso to 0.1, + TipoEvento.Ladron to 0.1 ) val acumulado = probabilidades.entries.fold(mutableListOf<Pair<Double, TipoEvento>>()) { acc, entry -> diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoLadron.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoLadron.kt new file mode 100644 index 0000000000000000000000000000000000000000..369fb039c0eb982644bc36f46f3a1c98d58fddd6 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoLadron.kt @@ -0,0 +1,11 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion + +class EventoLadron( + override val descripcion: String, + override val dificultad: Int, + override val opciones: MutableList<Opcion>, + override val imagen: Int, resistenciaMax: Int, + override var finalizado: Boolean, +) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado) \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/LadronFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/LadronFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..c7e2b62ca52289a6a74d51b12b52367e106494ae --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/LadronFactory.kt @@ -0,0 +1,46 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoLadron + +class LadronFactory : EventoFactory { + private val ladronesMap = mapOf( + "Un ladrón de vasijas aparece y te desafÃa a un juego: ¡vence en el reto de cartas o se llevará tu tesoro!" to Pair( + R.drawable.asi_exploradores_ladron, listOf( + Opcion( + descripcion = "Jugar", + atributoRequerida = Atributo.Nula, + EfectoLadron() + ) + ) + ) + ) + + override fun generarDescripcion(): String { + return ladronesMap.keys.random() + } + + override fun generarOpciones(descripcion: String): MutableList<Opcion> { + return ladronesMap[descripcion]?.second?.toMutableList() + ?: mutableListOf() + } + + override fun generarImagen(descripcion: String): Int { + return ladronesMap[descripcion]?.first!! + } + + override fun generarEvento(): EventoLadron { + val descripcion = generarDescripcion() + return EventoLadron( + descripcion = descripcion, + dificultad = 0, + opciones = generarOpciones(descripcion), + imagen = generarImagen(descripcion), + resistenciaMax = (2..8).random(), + finalizado = false + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/minijuego2/Minijuego2.kt b/app/src/main/java/com/example/ellegadodepintia/minijuego2/Minijuego2.kt index c554c42ab43e8e18dd0a26cb55144ae8dfc6cc0b..d2ed23e353a2beb7e8549b890a04beb711709c17 100644 --- a/app/src/main/java/com/example/ellegadodepintia/minijuego2/Minijuego2.kt +++ b/app/src/main/java/com/example/ellegadodepintia/minijuego2/Minijuego2.kt @@ -1,5 +1,6 @@ package com.example.ellegadodepintia.minijuego2 +import android.content.Intent import android.os.Bundle import android.os.Handler import android.os.Looper @@ -248,21 +249,29 @@ class Minijuego2 : AppCompatActivity() { private fun detenerJuego() { jugando = false soundManager.stopSound() - soundManager.playSound(R.raw.sound_over,100) + soundManager.playSound(R.raw.sound_over, 100) + protagonista.clearAnimation() val animacionMuerte = AnimationUtils.loadAnimation(this, R.anim.caida) - obstacleTimer?.let { handler.removeCallbacks(it) } // Detener el temporizador de obstáculos protagonista.startAnimation(animacionMuerte) - protagonista.visibility = View.GONE - botonReinicio.visibility = View.VISIBLE // Mostrar botón de reinicio + + // Mostrar botón de reinicio + botonReinicio.visibility = View.VISIBLE val animacion = AnimationUtils.loadAnimation(this, R.anim.animatitu) botonReinicio.startAnimation(animacion) + + // Configurar el comportamiento del botón de reinicio botonReinicio.setOnClickListener { - botonReinicio.clearAnimation() - reiniciarJuego() + // Devuelve la puntuación actual y finaliza la actividad + val resultadoIntent = Intent() + resultadoIntent.putExtra("PUNTUACION", puntuacion.toString()) + setResult(RESULT_OK, resultadoIntent) + finish() } } + + /* private fun reiniciarJuego() { // Reiniciar variables del juego puntuacion = 0 @@ -275,7 +284,7 @@ class Minijuego2 : AppCompatActivity() { } botonReinicio.visibility = View.GONE // Ocultar botón de reinicio iniciarJuego() // Reiniciar el juego - } + }*/ private fun moverFondo() { // Mueve ambos fondos hacia la izquierda diff --git a/app/src/main/java/com/example/ellegadodepintia/minijuego3/Minijuego3.kt b/app/src/main/java/com/example/ellegadodepintia/minijuego3/Minijuego3.kt index e5f78cc9118ca0613eca5445def586788fff1e2b..fdc839e12f7f580d5b53e9cdea6aa94ddc3eefd4 100644 --- a/app/src/main/java/com/example/ellegadodepintia/minijuego3/Minijuego3.kt +++ b/app/src/main/java/com/example/ellegadodepintia/minijuego3/Minijuego3.kt @@ -18,7 +18,6 @@ import android.animation.AnimatorListenerAdapter import android.animation.ValueAnimator import android.graphics.ColorMatrix import android.graphics.ColorMatrixColorFilter -import com.example.ellegadodepintia.MapActivity import com.example.ellegadodepintia.R import com.example.ellegadodepintia.soundManager.SoundManager @@ -35,7 +34,7 @@ class Minijuego3 : AppCompatActivity() { private var segundaCarta: Carta? = null private var procesandose = false private var cuentraAtras: CountDownTimer? = null - private var tiempoRestante: Long = 45000 // 1 minuto en milisegundos + private var tiempoRestante: Long = 25000 // 1 minuto en milisegundos private var tiempoCorriendo = false override fun onCreate(savedInstanceState: Bundle?) { @@ -190,7 +189,7 @@ class Minijuego3 : AppCompatActivity() { } private fun sumarTiempo() { - tiempoRestante += 5000 + tiempoRestante += 2000 actualizarContador() iniciarCronometro() } @@ -199,8 +198,10 @@ class Minijuego3 : AppCompatActivity() { Toast.makeText(this, mensaje, Toast.LENGTH_SHORT).show() botonVolver.visibility = ImageView.VISIBLE botonVolver.setOnClickListener{ - val intent = Intent(this@Minijuego3, MapActivity::class.java) - startActivity(intent) + val resultadoIntent = Intent() + resultadoIntent.putExtra("TIEMPO", tiempoRestante.toString()) + println(tiempoRestante) + setResult(RESULT_OK, resultadoIntent) finish() } gridLayout.removeAllViews() diff --git a/app/src/main/res/drawable/asi_exploradores_campamento.png b/app/src/main/res/drawable/asi_exploradores_campamento.png new file mode 100644 index 0000000000000000000000000000000000000000..fcfdf8fab44ae57cb82d102faaf535be81fd9635 Binary files /dev/null and b/app/src/main/res/drawable/asi_exploradores_campamento.png differ diff --git a/app/src/main/res/drawable/asi_exploradores_ladron.png b/app/src/main/res/drawable/asi_exploradores_ladron.png new file mode 100644 index 0000000000000000000000000000000000000000..8065f5945c3eb702de134d3667fe6c308b122e5e Binary files /dev/null and b/app/src/main/res/drawable/asi_exploradores_ladron.png differ