diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml new file mode 100644 index 0000000000000000000000000000000000000000..b268ef36cd2de3a14ddddf25aa9f5d4e95731e18 --- /dev/null +++ b/.idea/deploymentTargetSelector.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="deploymentTargetSelector"> + <selectionStates> + <SelectionState runConfigName="app"> + <option name="selectionMode" value="DROPDOWN" /> + </SelectionState> + </selectionStates> + </component> +</project> \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 92ef36bae55d477e1868e24402b11d36fcf75f0c..a6e64bbb1bd96a794b6dc89cf937808671f286f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,7 @@ <activity android:name=".minijuegoReparacion.MinijuegoReparacion" android:exported="true"/> <activity android:name=".exploradoresDePintia.Resumen" android:exported="true"/> <activity android:name=".TabernaActivity" android:exported="true"/> + <activity android:name=".TiendaActivity" android:exported="true"/> </application> </manifest> \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/MapActivity.kt b/app/src/main/java/com/example/ellegadodepintia/MapActivity.kt index e78b901e8890527bfcf4e095ffd8c0b1ea2ef8d1..13553b83c27286554208f21d74dc692545cddaa8 100644 --- a/app/src/main/java/com/example/ellegadodepintia/MapActivity.kt +++ b/app/src/main/java/com/example/ellegadodepintia/MapActivity.kt @@ -42,5 +42,11 @@ class MapActivity : AppCompatActivity() { val intent = Intent(this, TabernaActivity::class.java) startActivity(intent) } + + val tienda = findViewById<ImageButton>(R.id.botonTienda) + tienda.setOnClickListener { + val intent = Intent(this, TiendaActivity::class.java) + startActivity(intent) + } } } diff --git a/app/src/main/java/com/example/ellegadodepintia/TiendaActivity.kt b/app/src/main/java/com/example/ellegadodepintia/TiendaActivity.kt new file mode 100644 index 0000000000000000000000000000000000000000..fe945231baa1804dbd81c4843053700f64790074 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/TiendaActivity.kt @@ -0,0 +1,139 @@ +package com.example.ellegadodepintia + +import android.graphics.Color +import android.os.Bundle +import android.view.View +import android.widget.Button +import android.widget.ImageView +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import com.example.ellegadodepintia.exploradoresDePintia.ModalDetallesCompra +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.LayoutUtils +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto +import com.example.ellegadodepintia.repositorios.RepositorioJugador +import com.example.ellegadodepintia.repositorios.RepositorioObjetos + +class TiendaActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_tienda) + + GameState.jugador.addObserver { LayoutUtils.actualizarMonedasTienda(this) + cargarObjetos()} + + val nivelCiudad = GameState.jugador.nivelCiudad + val nObjetos = nivelCiudad * 2 + + val texto = findViewById<TextView>(R.id.textoInformacion) + + val botonRefrescar = findViewById<Button>(R.id.botonRefrescar) + botonRefrescar.setOnClickListener { + if(GameState.jugador.monedas >= 5){ + GameState.jugador.actualizarObjetosTienda(nObjetos) + RepositorioJugador.setMonedas(GameState.jugador.monedas - 5) + GameState.jugador.actualizarMonedas(GameState.jugador.monedas - 5) + "Se ha actualizado la tienda".also { texto.text = it } + } else { + "No tienes suficientes monedas para refrescar".also { texto.text = it } + } + + } + + val textoMonedas = findViewById<TextView>(R.id.textoMonedas) + GameState.jugador.monedas.toString().also { textoMonedas.text = it } + cargarObjetos() + } + + private fun cargarObjetos(){ + + val nivelCiudad = GameState.jugador.nivelCiudad + val nObjetos = nivelCiudad * 2 + val objetos = RepositorioObjetos.convertirNombresAObjetos(GameState.jugador.objetosTienda) + val preciosGenerados = ArrayList<Int>() + + val slots = listOf<ImageView>( + findViewById(R.id.slot01), + findViewById(R.id.slot02), + findViewById(R.id.slot03), + findViewById(R.id.slot04), + findViewById(R.id.slot05), + findViewById(R.id.slot06) + ) + + val precios = listOf<TextView>( + findViewById(R.id.precio01), + findViewById(R.id.precio02), + findViewById(R.id.precio03), + findViewById(R.id.precio04), + findViewById(R.id.precio05), + findViewById(R.id.precio06) + ) + + val monedas = listOf<ImageView>( + findViewById(R.id.moneda01), + findViewById(R.id.moneda02), + findViewById(R.id.moneda03), + findViewById(R.id.moneda04), + findViewById(R.id.moneda05), + findViewById(R.id.moneda06) + ) + + precios.forEachIndexed { index, precio -> + if (index < nObjetos) { + val resultado = (30..75).random() / nivelCiudad + preciosGenerados.add(resultado) + resultado.toString().also { precio.text = it } + } else { + val nivelTaberna = index / 2 + 1 + "Taberna lvl $nivelTaberna".also { precio.text = it } + precio.textSize = 11f + precio.setTextColor(Color.RED) + + } + } + + slots.forEachIndexed { index, slot -> + if (index < nObjetos) { + slot.setImageResource(objetos[index]!!.imagen) + slot.setOnClickListener { + val modalDetallesFragment = ModalDetallesCompra().apply { + objeto = objetos[index] + coste = preciosGenerados[index] + } + + modalDetallesFragment.onDismissListener = { accionRealizada -> + if (accionRealizada) { + ejecutarCompra(objetos[index], preciosGenerados[index]) + } + } + + modalDetallesFragment.show(supportFragmentManager, "modalDetalles") + } + } else { + slot.setImageResource(R.drawable.asi_candado_tienda) + slot.scaleType = ImageView.ScaleType.CENTER + } + } + + monedas.forEachIndexed { index, moneda -> + if (index >= nObjetos) { + moneda.visibility = View.GONE + } + } + } + + private fun ejecutarCompra(objeto: Objeto?, coste: Int){ + val texto = findViewById<TextView>(R.id.textoInformacion) + if (GameState.jugador.monedas < coste){ + "No hay dinero".also { texto.text = it } + }else{ + GameState.jugador.actualizarMonedas(GameState.jugador.monedas - coste) + RepositorioJugador.setMonedas(GameState.jugador.monedas) + if (objeto != null) { + GameState.jugador.conseguirObjeto(objeto) + } + "Objeto comprado y añadido al inventario".also { texto.text = it } + } + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/Resumen.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/Resumen.kt index fbb32fcd3dd2ed23c9247f5a75534eb476dde613..b0c47e856a3a7dc9bc26b9dbc25d72a1c378358c 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/Resumen.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/Resumen.kt @@ -2,13 +2,18 @@ package com.example.ellegadodepintia.exploradoresDePintia import android.animation.AnimatorSet import android.animation.ObjectAnimator +import android.app.Activity import android.content.Intent import android.os.Bundle +import android.view.View +import android.view.ViewGroup import android.view.animation.AccelerateDecelerateInterpolator import android.widget.Button import android.widget.ImageView import android.widget.ProgressBar import android.widget.TextView +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -17,20 +22,42 @@ 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.objeto.ObjetoDeValor +import com.example.ellegadodepintia.repositorios.RepositorioJugador +import com.example.ellegadodepintia.ruleta.Ruleta class Resumen : AppCompatActivity() { + private lateinit var startForResult: ActivityResultLauncher<Intent> + private var gananciaTotal = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_resumen_partida) - if(GameState.jugador.atributos[Atributo.Vida]!! <= 0){ + + startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == Activity.RESULT_OK) { + val mensajeResultado = result.data?.getStringExtra("resultado")!!.toInt() + println(mensajeResultado) + val textoResumen = findViewById<TextView>(R.id.textoResumen) + "Has usado el ticker para generar aun más monedas. Enhorabuena, has conseguido $mensajeResultado monedas.".also { + textoResumen.text = it + } + GameState.jugador.monedas+=mensajeResultado-gananciaTotal + GameState.jugador.monedas.toString() + .also { findViewById<TextView>(R.id.moneyText).text = it } + RepositorioJugador.setMonedas(GameState.jugador.monedas) + findViewById<Button>(R.id.botonRuleta).visibility = View.GONE + + } + } + + + if (GameState.jugador.atributos[Atributo.Vida]!! <= 0) { mostrarDerrota() } else { calcularGanancias() } GameState.jugador.monedas.toString() .also { findViewById<TextView>(R.id.moneyText).text = it } - val continuarButton = findViewById<Button>(R.id.botonContinuar) continuarButton.setOnClickListener { val intent = Intent(this, MapActivity::class.java) @@ -43,11 +70,13 @@ class Resumen : AppCompatActivity() { barraVida.progress = GameState.jugador.atributos[Atributo.Vida]!! } - private fun mostrarDerrota(){ + private fun mostrarDerrota() { val textoResumen = findViewById<TextView>(R.id.textoResumen) val imagenProtagonista = findViewById<ImageView>(R.id.imagenProtagonista) - "El investigador ha sido derrotado, ha perdido todos sus objetos del inventario".also { textoResumen?.text = it } + "El investigador ha sido derrotado, ha perdido todos sus objetos del inventario".also { + textoResumen?.text = it + } imagenProtagonista?.setImageResource(R.drawable.protagonista_die_06) } @@ -60,7 +89,8 @@ class Resumen : AppCompatActivity() { var nObjetosValor = 0 textoResumen?.text = "" - val movimientoLateral = ObjectAnimator.ofFloat(imagenProtagonista, "translationX", -100f, 100f) + val movimientoLateral = + ObjectAnimator.ofFloat(imagenProtagonista, "translationX", -100f, 100f) movimientoLateral.duration = 1500 movimientoLateral.repeatCount = ObjectAnimator.INFINITE movimientoLateral.repeatMode = ObjectAnimator.REVERSE @@ -79,6 +109,7 @@ class Resumen : AppCompatActivity() { for (objeto in GameState.jugador.inventario) { if (objeto is ObjetoDeValor) { nObjetosValor++ + gananciaTotal += objeto.coste objetosDeValor.add(objeto) objeto.usar() } @@ -88,12 +119,26 @@ class Resumen : AppCompatActivity() { if (nObjetosValor == 0) { - "El investigador no ha conseguido ningún objeto de valor".also { textoResumen?.text = it } + "El investigador no ha conseguido ningún objeto de valor".also { + textoResumen?.text = it + } } else { - "${textoResumen.text} Enhorabuena, has conseguido ${nObjetosValor*20} monedas.".also { + "${textoResumen.text} Enhorabuena, has conseguido $gananciaTotal monedas.".also { textoResumen.text = it } - + val botonRuleta = findViewById<Button>(R.id.botonRuleta) + val tieneTicket = GameState.jugador.inventario.any { it.nombre == "Ticket" } + println(tieneTicket) + if (!tieneTicket) { + (botonRuleta.parent as? ViewGroup)?.removeView(botonRuleta) + } else { + botonRuleta.visibility = View.VISIBLE + botonRuleta.setOnClickListener { + val intent = Intent(this, Ruleta::class.java) + intent.putExtra("PUNTUACION_ACTUAL", gananciaTotal) + startForResult.launch(intent) + } + } } } } \ No newline at end of file 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 510704a719aebd5586501429faa35fe740822733..34d75264042aac8ad781629fcc10d907dd7e333e 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 @@ -13,8 +13,8 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoH import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad.EfectoBuffo import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoEquipable -import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoUtilidad -import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoEquipableAumento +import com.example.ellegadodepintia.repositorios.RepositorioJugador +import com.example.ellegadodepintia.repositorios.RepositorioObjetos class Jugador { var nivelCiudad = 1 @@ -27,6 +27,7 @@ class Jugador { var habilidades = ArrayList<Habilidad>(1) var buffos = ArrayList<EfectoBuffo>() var monedas = 0 + var objetosTienda = ArrayList<String>(6) init { atributos[Atributo.Vida] = 10 @@ -34,24 +35,6 @@ class Jugador { atributos[Atributo.Investigacion] = 1 atributos[Atributo.Energia] = 10 - inventario.add( - ObjetoEquipable( - nombre = "Espada de Hierro", - descripcion = "Una espada de hierro sencilla y confiable perfecta para un aventurero novato.", - efecto = EfectoEquipableAumento(1, Atributo.Ataque), - imagen = R.drawable.asi_objeto_espadadefault - ) - ) - - inventario.add( - ObjetoUtilidad( - nombre = "Pico Vacceo", - descripcion = "Un pico viejo y oscuro con dibujos extraños que parecen brillar cerca de las piedras, como si estuviera esperando que lo uses para algo importante.", - imagen = R.drawable.asi_objeto_pico - ) - ) - - habilidades.add( Habilidad( nombre = "Furia del Vacceo", @@ -95,8 +78,10 @@ class Jugador { fun actualizarAtributo(atributo: Atributo, valor: Int) { atributos[atributo] = atributos[atributo]!!.plus(valor) notifyObservers() - if (atributo == Atributo.Vida && atributos[atributo]!! <= 0){ - "¡Has sido derrotado!".also { context!!.findViewById<TextView>(R.id.textoResultado).text = it } + if (atributo == Atributo.Vida && atributos[atributo]!! <= 0) { + "¡Has sido derrotado!".also { + context!!.findViewById<TextView>(R.id.textoResultado).text = it + } cargarAnimacionesMuerteProtagonista() Handler(Looper.getMainLooper()).postDelayed({ val intent = Intent(context, Resumen::class.java) @@ -154,11 +139,18 @@ class Jugador { notifyObservers() } - fun actualizarMonedas(valor: Int){ + fun actualizarMonedas(valor: Int) { monedas = valor notifyObservers() } + fun actualizarObjetosTienda(nObjetos : Int){ + val nuevosObjetos = RepositorioObjetos.obtenerObjetosAleatoriosTienda(nObjetos) + this.objetosTienda = nuevosObjetos + RepositorioJugador.setObjetosTienda(nuevosObjetos) + notifyObservers() + } + fun reset() { observers.clear() @@ -175,6 +167,7 @@ class Jugador { vidaMax = 10 energiaMax = 10 + actualizarObjetosTienda(nivelCiudad*2) } } diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/LayoutUtils.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/LayoutUtils.kt index 4f7f8c778784553a90d00e0d3db4ee67c49b95b0..4e40ca1b07b7024192735fbc08c866a8464b99f2 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/LayoutUtils.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/LayoutUtils.kt @@ -1,6 +1,7 @@ package com.example.ellegadodepintia.exploradoresDePintia.model import android.app.Activity +import android.content.Context import android.view.View import android.widget.ImageView import android.widget.ProgressBar @@ -115,6 +116,12 @@ object LayoutUtils { GameState.jugador.monedas.toString() .also { context!!.findViewById<TextView>(R.id.moneyText).text = it } } + + fun actualizarMonedasTienda(tienda : Context) { + GameState.jugador.monedas.toString() + .also { (tienda as Activity).findViewById<TextView>(R.id.textoMonedas).text = it } + } + fun actualizarMonedasInventario(view: View) { GameState.jugador.monedas.toString() .also { view.findViewById<TextView>(R.id.moneyText).text = it } diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoEscalar.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoEscalar.kt deleted file mode 100644 index 74c9051fc9cd120793d27c4fab8c02bc58415551..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoEscalar.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.ellegadodepintia.exploradoresDePintia.model.efecto - -import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo -import com.example.ellegadodepintia.exploradoresDePintia.model.GameState - - -class EfectoEscalar() : Efecto(100) { - override fun ejecutar(): String { - if (GameState.jugador.atributos[Atributo.Energia]!!<2){ - return "No tienes energÃa suficiente para intentar escapar escalando. Necesitas al menos 2 puntos" - }else{ - GameState.jugador.actualizarAtributo(Atributo.Energia, -2) - if ((1..100).random() <= 40){ - GameState.eventoActual.actualizarFinalizado(true) - return "Logras escalar la montaña de piedras y escapar. El esfuerzo no ha sido en vano" - }else{ - return "Al escalar la montaña de piedras, sufres un resbalo y vuelves a caer, gastando inútilmente energÃa" - } - } - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoExplorar.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoExplorar.kt deleted file mode 100644 index 202bfdae126f4289103656b5af3ee2fc62f1961c..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoExplorar.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.example.ellegadodepintia.exploradoresDePintia.model.efecto - -import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo -import com.example.ellegadodepintia.exploradoresDePintia.model.GameState - -class EfectoExplorar() : Efecto(100) { - override fun ejecutar(): String { - if(GameState.jugador.atributos[Atributo.Investigacion]!!<1){ - return "No tienes suficientes puntos de investigación para explorar" - }else{ - GameState.jugador.actualizarAtributo(Atributo.Investigacion, -1) - if ((1..100).random() <= 50){ - GameState.eventoActual.actualizarFinalizado(true) - return "Has encontrado un viejo mapa que muestra un camino para rodearlo. Has logrado escapar" - }else{ - return "Has explorado cuidadosamente, pero por ahora no has encontrado nada útil para sortear el derrumbe." - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoFuerzaBruta.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoFuerzaBruta.kt deleted file mode 100644 index 118fd34315ac4d8fb3762a1d5e704f4734fc7bb6..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoFuerzaBruta.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.example.ellegadodepintia.exploradoresDePintia.model.efecto - -import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo -import com.example.ellegadodepintia.exploradoresDePintia.model.GameState - -class EfectoFuerzaBruta() : Efecto(100) { - override fun ejecutar(): String { - GameState.jugador.actualizarAtributo(Atributo.Vida, -1) - if ((1..100).random() <= 25){ - GameState.eventoActual.actualizarFinalizado(true) - return "Con un esfuerzo descomunal, logras mover las piedras con tus manos y escapar, haciendote daño en el acto" - }else{ - return "A pesar de tu esfuerzo, no logras escapar y sigues atrapado. Has sufrido daño" - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoPico.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoPico.kt deleted file mode 100644 index fce4167be5dac4befe26629e908736a0459dd558..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoPico.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.example.ellegadodepintia.exploradoresDePintia.model.efecto - -import com.example.ellegadodepintia.exploradoresDePintia.model.GameState - - -class EfectoPico() : Efecto(100) { - override fun ejecutar(): String { - val tienePico = GameState.jugador.inventario.removeIf { it.nombre == "Pico Vacceo" } - if (tienePico){ - GameState.eventoActual.actualizarFinalizado(true) - return "Has usado el pico de tu inventario. Has logrado escapar" - }else{ - return "No tienes el pico en tu inventario" - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoResolverTrampaConAtributo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoResolverTrampaConAtributo.kt new file mode 100644 index 0000000000000000000000000000000000000000..b812abc1d013abfece3a743fe7587d92ef5390f1 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoResolverTrampaConAtributo.kt @@ -0,0 +1,29 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState + + +class EfectoResolverTrampaConAtributo( + probabilidadExito: Int, + private val atributo: Atributo, + private val coste: Int, + private val stringLogrado: String, + private val stringFallo: String) : Efecto(probabilidadExito) { + override fun ejecutar(): String { + if (atributo == Atributo.Energia && GameState.jugador.atributos[Atributo.Energia]!!<coste){ + return "No tienes energÃa suficiente para intentar escapar escalando. Necesitas al menos $coste puntos" + }else if(atributo == Atributo.Investigacion && GameState.jugador.atributos[Atributo.Investigacion]!!<coste) { + return "No tienes suficientes puntos de investigación para explorar" + }else{ + GameState.jugador.actualizarAtributo(atributo, -coste) + return if ((1..100).random() <= probabilidadExito){ + GameState.eventoActual.actualizarFinalizado(true) + stringLogrado + }else{ + stringFallo + } + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRiesgo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRiesgo.kt index 0f002c1bff85210537dd7077ea5109de246d6281..d87dc1537bf73276c0e07047049aa03e1db69e37 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRiesgo.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRiesgo.kt @@ -8,7 +8,9 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.GameState import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context -class EfectoRiesgo(private val objetoRecompensa : Objeto, private val dmgRiesgo: Int, private val mensajeRecomensa : String, private val mensajeRiesgo : String) : Efecto(100) { +class EfectoRiesgo(private val objetoRecompensa : Objeto, private val dmgRiesgo: Int, private val mensajeRecomensa : String, private val mensajeRiesgo : String, + probabilidadExito: Int +) : Efecto(probabilidadExito) { override fun ejecutar(): String { val resultado = (1..100).random() @@ -33,7 +35,7 @@ class EfectoRiesgo(private val objetoRecompensa : Objeto, private val dmgRiesgo: } }, animationDuration.toLong() - 150) - if (resultado <= 50) { + if (resultado <= probabilidadExito) { GameState.jugador.conseguirObjeto(objetoRecompensa) GameState.eventoActual.actualizarFinalizado(true) return mensajeRecomensa diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoUtilizarObjetoUtil.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoUtilizarObjetoUtil.kt new file mode 100644 index 0000000000000000000000000000000000000000..3e84468cc9f31353c2729209a5fe284773f1b1c3 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoUtilizarObjetoUtil.kt @@ -0,0 +1,16 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState + + +class EfectoUtilizarObjetoUtil(private val nombreObjeto: String) : Efecto(100) { + override fun ejecutar(): String { + val tieneObjeto = GameState.jugador.inventario.removeIf { it.nombre == nombreObjeto } + if (tieneObjeto){ + GameState.eventoActual.actualizarFinalizado(true) + return "Has usado el objeto $nombreObjeto de tu inventario. Has logrado escapar" + }else{ + return "No tienes el $nombreObjeto en tu inventario" + } + } +} \ 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 74217d6ec4833ee489055b96b4ef7b9737ce7180..e9a3c8c2c06985cd07dfaaf65f2f62a293ecc982 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 @@ -20,9 +20,9 @@ object EventoFactorySelector { val probabilidades = mapOf( TipoEvento.Reliquia to 0.3, TipoEvento.Tienda to 0.1, - TipoEvento.Riesgo to 0.3, TipoEvento.Trampa to 0.1, - TipoEvento.Combate to 0.2 + TipoEvento.Combate to 0.2, + TipoEvento.Riesgo to 0.3, ) val acumulado = probabilidades.entries.fold(mutableListOf<Pair<Double, TipoEvento>>()) { acc, entry -> diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoRiesgo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoRiesgo.kt index 60890734e5adbe5247618a1679a533302df2da7c..3f2401b2fea839e91591b050996cacca03be3ef8 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoRiesgo.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoRiesgo.kt @@ -3,9 +3,23 @@ package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion class EventoRiesgo( + val id : Int, 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 +) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado){ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other == null || javaClass != other.javaClass) return false + other as EventoRiesgo + + return id == other.id + } + + override fun hashCode(): Int { + return 31 * id.hashCode() + } +} + diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/ReliquiaFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/ReliquiaFactory.kt index 93f0c1e3fa45e88d175dd919d5e88afd6a5c1ade..f8ff455ff017a6231533c4d5d5421cfeaafb1001 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/ReliquiaFactory.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/ReliquiaFactory.kt @@ -7,7 +7,7 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoRepa 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.objeto.ObjetoDeValor +import com.example.ellegadodepintia.repositorios.RepositorioObjetos class ReliquiaFactory : EventoFactory { private val reliquiasMap = mapOf( @@ -29,13 +29,7 @@ class ReliquiaFactory : EventoFactory { "Tras aplicar con cuidado una mezcla de resina especial, consigues unir las piezas del vasito, restaurando su forma original. Has preservado una pieza valiosa de la historia vaccea.", "Al intentar reparar el vasito, accidentalmente lo rompes aún más. Ahora, no solo está dañado, sino que se ha perdido una pieza esencial que no puede ser reconstruida.", 1, - ObjetoDeValor( - nombre = "Vasito de barro cocido", - descripcion = "Objeto de gran valor. Se convierte en 20 monedas si consigues completar la partida.", - coste = 20, - imagen = R.drawable.asi_exploradores_vasito - ) - + RepositorioObjetos.obtenerObjetoPorNombre("Vasito de barro cocido")!! ) ), Opcion( descripcion = "Destruir", @@ -69,12 +63,7 @@ class ReliquiaFactory : EventoFactory { "Con un toque experto, las partes rotas encajan perfectamente. Has dado nueva vida a una jabonera vaccea, permitiéndote estudiar sus detalles con mayor precisión.", "El intento de reparación es un desastre: la jabonera se rompe aún más, y el sÃmbolo se desintegra. Ahora, solo quedan fragmentos de lo que antes fue una obra de arte.", 1, - ObjetoDeValor( - nombre = "Jabonera de cerámica", - descripcion = "Objeto de gran valor. Se convierte en 20 monedas si consigues completar la partida.", - coste = 20, - imagen = R.drawable.asi_exploradores_jabonera - ) + RepositorioObjetos.obtenerObjetoPorNombre("Jabonera de cerámica")!! ) ), Opcion( @@ -107,12 +96,7 @@ class ReliquiaFactory : EventoFactory { "Reparas la copa con éxito y descubres un patrón o sÃmbolo oculto bajo las grietas, aportando nueva información sobre su origen o uso.", "El trabajo improvisado falla, y la copa queda aún más dañada o inutilizable, reduciendo su valor cultural o práctico.", 1, - ObjetoDeValor( - nombre = "Copa negra con inscripciones", - descripcion = "Objeto de gran valor. Se convierte en 20 monedas si consigues completar la partida.", - coste = 20, - imagen = R.drawable.asi_minijuego_3_copa_negra_brunida - ) + RepositorioObjetos.obtenerObjetoPorNombre("Copa negra con inscripciones")!! ) ), Opcion( @@ -145,12 +129,7 @@ class ReliquiaFactory : EventoFactory { "Logras repararla cuidadosamente, las marcas en la cerámica se conecten con un ritual funerario o de veneración, lo que incrementa el valor histórico de la pieza.", "Intentas repararla, pero sin las herramientas adecuadas o la técnica correcta, la tapadera queda más dañada.", 1, - ObjetoDeValor( - nombre = "Tapadera de cerámica zoomorfa", - descripcion = "Objeto de gran valor. Se convierte en 20 monedas si consigues completar la partida.", - coste = 20, - imagen = R.drawable.asi_minijuego_3_tapadera_zoomorfo - ) + RepositorioObjetos.obtenerObjetoPorNombre("Tapadera de cerámica zoomorfa")!! ) ), Opcion( diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/RiesgoFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/RiesgoFactory.kt index abdb8fb3fc9a13765cdffbfdf8752b4d14809d39..26c410bbd07a0e35a38269ac675fdb2beec73942 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/RiesgoFactory.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/RiesgoFactory.kt @@ -5,59 +5,89 @@ 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.EfectoRiesgo -import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoEquipable -import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoEquipableAumento - +import com.example.ellegadodepintia.repositorios.RepositorioObjetos class RiesgoFactory : EventoFactory { - private val riesgoMap = mapOf( - "En un claro junto al rÃo Duero, encuentras un viejo cofre de madera decorado con espigas de trigo y motivos solares. " to Pair( - R.drawable.cofre_open_animation, listOf( + + private val descripcionComun = "En un claro junto al rÃo Duero, encuentras un viejo cofre de madera decorado con espigas de trigo y motivos solares." + + private val riesgoMap = mutableMapOf( + 1 to EventoRiesgoData( + imagen = R.drawable.cofre_open_animation, + opciones = listOf( Opcion( descripcion = "Abrir el cofre", atributoRequerida = Atributo.Investigacion, EfectoRiesgo( - ObjetoEquipable( - nombre = "Espada de Hierro", - descripcion = "Una espada de hierro sencilla y confiable perfecta para un aventurero novato. Otorga 1 de daño extra", - efecto = EfectoEquipableAumento(1, Atributo.Ataque), - imagen = R.drawable.asi_objeto_espadadefault - ), + RepositorioObjetos.obtenerObjetoPorNombre("Espada de Hierro")!!, dmgRiesgo = 2, mensajeRecomensa = "Dentro del cofre encuentras una espada de hierro vaccea. Está en buen estado y tiene un brillo sobrenatural", mensajeRiesgo = "Una nube de polvo tóxico se libera, causandote 2 de daño", + 50 ) - ), Opcion( + ), + Opcion( descripcion = "Ignorar", atributoRequerida = Atributo.Nula, EfectoIgnorar(100) ) ) ), + 2 to EventoRiesgoData( + imagen = R.drawable.cofre_open_animation, + opciones = listOf( + Opcion( + descripcion = "Abrir el cofre", + atributoRequerida = Atributo.Investigacion, + EfectoRiesgo( + RepositorioObjetos.obtenerObjetoPorNombre("Ticket")!!, + dmgRiesgo = 4, + mensajeRecomensa = "Dentro del cofre encuentras un ticket. No sabes para que podrÃa servir", + mensajeRiesgo = "Te encuentras una serpiente que te muerde hasta que consigues quitartela de encima, causandote 4 de daño", + 35 + ) + ), + Opcion( + descripcion = "Ignorar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ) ) override fun generarDescripcion(): String { - return riesgoMap.keys.random() + return descripcionComun } override fun generarOpciones(descripcion: String): MutableList<Opcion> { - return riesgoMap[descripcion]?.second?.toMutableList() - ?: mutableListOf() + val evento = riesgoMap.entries.find { it.key == descripcion.toInt() } + return evento?.value?.opciones?.toMutableList() ?: mutableListOf() } override fun generarImagen(descripcion: String): Int { - return riesgoMap[descripcion]?.first!! + val evento = riesgoMap.entries.find { it.key == descripcion.toInt() } + return evento!!.value.imagen } override fun generarEvento(): EventoRiesgo { - val descripcion = generarDescripcion() - return EventoRiesgo( - descripcion = descripcion, + val id = riesgoMap.keys.random() + val eventoData = riesgoMap[id]!! + + val evento = EventoRiesgo( + id = id, + descripcion = descripcionComun, dificultad = 0, - opciones = generarOpciones(descripcion), - imagen = generarImagen(descripcion), + opciones = eventoData.opciones.toMutableList(), + imagen = eventoData.imagen, resistenciaMax = (2..8).random(), - finalizado = false + finalizado = false, ) + + return evento } -} \ No newline at end of file +} +data class EventoRiesgoData( + val imagen: Int, + val opciones: List<Opcion> +) diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TiendaFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TiendaFactory.kt index 2fbac0336b3df2a20e28755e491bea54170a8651..cf3ec6a4968b2d28484e1c0ab98076f120aa0245 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TiendaFactory.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TiendaFactory.kt @@ -5,11 +5,7 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoDetallesCompra import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoIgnorar -import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoConsumible -import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoEquipable -import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoEquipableAumento -import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoObjetoCura - +import com.example.ellegadodepintia.repositorios.RepositorioObjetos class TiendaFactory : EventoFactory { @@ -21,11 +17,7 @@ class TiendaFactory : EventoFactory { atributoRequerida = Atributo.Nula, EfectoDetallesCompra( 5, - ObjetoConsumible(nombre = "Elixir Menor de la Necrópolis", - descripcion = "Un frasco pequeño con un lÃquido granate y brillante, que destella con un resplandor profundo, capaz de restaurar 3 puntos de vida al instante.", - efecto = EfectoObjetoCura(3), - imagen = R.drawable.asi_objeto_pocima_vida_5 - ) + RepositorioObjetos.obtenerObjetoPorNombre("Elixir Menor de la Necrópolis")!! ) ), Opcion( descripcion = "Rechazar", @@ -41,11 +33,7 @@ class TiendaFactory : EventoFactory { atributoRequerida = Atributo.Nula, EfectoDetallesCompra( 8, - ObjetoConsumible(nombre = "Elixir Mediano de la Necrópolis", - descripcion = "Un frasco robusto con un lÃquido amarillo brillante, que resplandece como el sol al mediodÃa, capaz de restaurar 5 puntos de vida al instante.", - efecto = EfectoObjetoCura(5), - imagen = R.drawable.asi_objeto_pocima_vida_10 - ) + RepositorioObjetos.obtenerObjetoPorNombre("Elixir Mediano de la Necrópolis")!! ) ), Opcion( descripcion = "Rechazar", @@ -61,11 +49,7 @@ class TiendaFactory : EventoFactory { atributoRequerida = Atributo.Nula, EfectoDetallesCompra( 15, - ObjetoConsumible(nombre = "Elixir Supremo de la Necrópolis", - descripcion = "Frasco supremo forjado con los secretos de los vacceos, restaura toda tu vitalidad al instante, ¡la poción de cura más poderosa de Pintia!", - efecto = EfectoObjetoCura(999), - imagen = R.drawable.asi_objeto_pocima_vida_all - ) + RepositorioObjetos.obtenerObjetoPorNombre("Elixir Supremo de la Necrópolis")!! ) ), Opcion( descripcion = "Rechazar", @@ -81,11 +65,7 @@ class TiendaFactory : EventoFactory { atributoRequerida = Atributo.Nula, EfectoDetallesCompra( 50, - ObjetoEquipable(nombre = "Escudo Caetrae", - descripcion = "La caetrae es un escudo redondo vacceo, forjado para la defensa en combate, que aumenta tu vida máxima en 10 puntos.", - efecto = EfectoEquipableAumento(10, Atributo.Vida), - imagen = R.drawable.asi_objeto_escudo - ) + RepositorioObjetos.obtenerObjetoPorNombre("Escudo Caetrae")!! ) ), Opcion( descripcion = "Rechazar", @@ -101,11 +81,7 @@ class TiendaFactory : EventoFactory { atributoRequerida = Atributo.Nula, EfectoDetallesCompra( 40, - ObjetoEquipable(nombre = "Casco Ceremonial", - descripcion = "Casco ceremonial de oro de los vacceos decorado con intrincados patrones que simboliza el estatus social. Aumenta tu vida máxima en 8 puntos ", - efecto = EfectoEquipableAumento(8, Atributo.Vida), - imagen = R.drawable.asi_objeto_casco - ) + RepositorioObjetos.obtenerObjetoPorNombre("Casco Ceremonial")!! ) ), Opcion( descripcion = "Rechazar", diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TrampaFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TrampaFactory.kt index ac399e5cdb5c3997bf854a5661b22d74a3e940ac..c46d9c45dc043412f18acf3128de5dd81963bc22 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TrampaFactory.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TrampaFactory.kt @@ -3,10 +3,8 @@ 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.EfectoEscalar -import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoExplorar -import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoFuerzaBruta -import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoPico +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoResolverTrampaConAtributo +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoUtilizarObjetoUtil class TrampaFactory : EventoFactory { private val trampasMap = mapOf( @@ -15,19 +13,39 @@ class TrampaFactory : EventoFactory { Opcion( descripcion = "Mover", atributoRequerida = Atributo.Vida, - EfectoFuerzaBruta() + EfectoResolverTrampaConAtributo( + 25, + Atributo.Vida, + 1, + "Con un esfuerzo descomunal, logras mover las piedras con tus manos y escapar, haciendote daño en el acto", + "A pesar de tu esfuerzo, no logras escapar y sigues atrapado. Has sufrido daño" + ) ), Opcion( descripcion = "Picar", atributoRequerida = Atributo.Nula, - EfectoPico() + EfectoUtilizarObjetoUtil( + nombreObjeto = "Pico Vacceo" + ) ), Opcion( descripcion = "Explorar", atributoRequerida = Atributo.Investigacion, - EfectoExplorar() + EfectoResolverTrampaConAtributo( + 50, + Atributo.Investigacion, + 1, + "Has encontrado un viejo mapa que muestra un camino para rodearlo. Has logrado escapar.", + "Has explorado cuidadosamente, pero por ahora no has encontrado nada útil para sortear el derrumbe." + ) ), Opcion( descripcion = "Escalar", atributoRequerida = Atributo.Energia, - EfectoEscalar() + EfectoResolverTrampaConAtributo( + 40, + Atributo.Energia, + 2, + "Logras escalar la montaña de piedras y escapar. El esfuerzo no ha sido en vano", + "Al escalar la montaña de piedras, sufres un resbalo y vuelves a caer, gastando inútilmente energÃa" + ) ) ) ), diff --git a/app/src/main/java/com/example/ellegadodepintia/minijuegoReparacion/MinijuegoReparacion.kt b/app/src/main/java/com/example/ellegadodepintia/minijuegoReparacion/MinijuegoReparacion.kt index 461e9968e8284072f4628e23a8475df900d6ac04..0fcf8f43e50e546f3c64a87888b3d0ad6896f0e3 100644 --- a/app/src/main/java/com/example/ellegadodepintia/minijuegoReparacion/MinijuegoReparacion.kt +++ b/app/src/main/java/com/example/ellegadodepintia/minijuegoReparacion/MinijuegoReparacion.kt @@ -133,15 +133,18 @@ class MinijuegoReparacion : AppCompatActivity() { soundManager.playSound(R.raw.sound_qte,20) val relativeLayout = findViewById<RelativeLayout>(R.id.relativeLayoutFragmentos) var para = false + val initialX = ruleImageView.x + val initialY = ruleImageView.y val randomX = Random.nextFloat() * (1050 - 350) val randomY = Random.nextFloat() * (1400 - 250) - val randomR = 150 + Random.nextFloat() * (360 - 150) - paloImageView.x = randomX + 75 - paloImageView.y = randomY + 130 ruleImageView.x = randomX ruleImageView.y = randomY + val deltaX = ruleImageView.x - initialX + val deltaY = ruleImageView.y - initialY + paloImageView.x += deltaX + paloImageView.y += deltaY + val randomR = 150 + Random.nextFloat() * (360 - 150) ruleImageView.rotation = randomR - fadeIn(paloImageView, ruleImageView) intervaloDeAngulo = Pair((270f + randomR) % 360, (330f + randomR) % 360).let { if (it.first > it.second) it.second to it.first else it diff --git a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt index df00a229895e8bd78e1f59f8397763696e9e64d3..c3f6e292283c54b358f1f82237fb5edaeeb52984 100644 --- a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt +++ b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt @@ -14,6 +14,14 @@ object RepositorioJugador { db.collection("users").document(email).get().addOnSuccessListener { GameState.jugador.monedas = (it.get("monedas") as Long).toInt() GameState.jugador.nivelCiudad = (it.get("nivelCiudad") as Long).toInt() + + val objetosTienda = (it.get("objetosTienda") as? List<*>) + ?.filterIsInstance<String>() + ?.toCollection(ArrayList()) + ?: ArrayList() + + println(objetosTienda) + GameState.jugador.objetosTienda = objetosTienda } } @@ -21,7 +29,8 @@ object RepositorioJugador { db.collection("users").document(email).set( hashMapOf("monedas" to 0, "username" to username, - "nivelCiudad" to 1) + "nivelCiudad" to 1, + "objetosTienda" to RepositorioObjetos.obtenerObjetosAleatoriosTienda(2)) ) } @@ -30,6 +39,11 @@ object RepositorioJugador { userRef.set(hashMapOf("monedas" to monedas), SetOptions.merge()) } + fun setObjetosTienda(objetosTienda : ArrayList<String>) { + val userRef = db.collection("users").document(email) + userRef.set(hashMapOf("objetosTienda" to objetosTienda), SetOptions.merge()) + } + fun cargarJugadores(callback: (List<PlayerLeaderBoard>) -> Unit) { db.collection("users") .get() diff --git a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt new file mode 100644 index 0000000000000000000000000000000000000000..39377c0f5bce5a5cb31781748e42a63d3e74afc9 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt @@ -0,0 +1,104 @@ +package com.example.ellegadodepintia.repositorios + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.* +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoEquipableAumento +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoObjetoCura + +object RepositorioObjetos { + private val objetos: Map<String, Objeto> by lazy { + listOf( + ObjetoDeValor( + nombre = "Vasito de barro cocido", + descripcion = "Objeto de gran valor. Se convierte en 20 monedas si consigues completar la partida.", + coste = 20, + imagen = R.drawable.asi_exploradores_vasito + ), + ObjetoDeValor( + nombre = "Jabonera de cerámica", + descripcion = "Objeto de gran valor. Se convierte en 20 monedas si consigues completar la partida.", + coste = 20, + imagen = R.drawable.asi_exploradores_jabonera + ), + ObjetoDeValor( + nombre = "Copa negra con inscripciones", + descripcion = "Objeto de gran valor. Se convierte en 20 monedas si consigues completar la partida.", + coste = 20, + imagen = R.drawable.asi_minijuego_3_copa_negra_brunida + ), + ObjetoDeValor( + nombre = "Tapadera de cerámica zoomorfa", + descripcion = "Objeto de gran valor. Se convierte en 20 monedas si consigues completar la partida.", + coste = 20, + imagen = R.drawable.asi_minijuego_3_tapadera_zoomorfo + ), + ObjetoEquipable( + nombre = "Espada de Hierro", + descripcion = "Una espada de hierro sencilla y confiable perfecta para un aventurero novato. Otorga 1 de daño extra", + efecto = EfectoEquipableAumento(1, Atributo.Ataque), + imagen = R.drawable.asi_objeto_espadadefault + ), + ObjetoConsumible( + nombre = "Elixir Menor de la Necrópolis", + descripcion = "Un frasco pequeño con un lÃquido granate y brillante, que destella con un resplandor profundo, capaz de restaurar 3 puntos de vida al instante.", + efecto = EfectoObjetoCura(3), + imagen = R.drawable.asi_objeto_pocima_vida_5 + ), + ObjetoConsumible( + nombre = "Elixir Mediano de la Necrópolis", + descripcion = "Un frasco robusto con un lÃquido amarillo brillante, que resplandece como el sol al mediodÃa, capaz de restaurar 5 puntos de vida al instante.", + efecto = EfectoObjetoCura(5), + imagen = R.drawable.asi_objeto_pocima_vida_10 + ), + ObjetoConsumible( + nombre = "Elixir Supremo de la Necrópolis", + descripcion = "Frasco supremo forjado con los secretos de los vacceos, restaura toda tu vitalidad al instante, ¡la poción de cura más poderosa de Pintia!", + efecto = EfectoObjetoCura(999), + imagen = R.drawable.asi_objeto_pocima_vida_all + ), + ObjetoEquipable( + nombre = "Escudo Caetrae", + descripcion = "La caetrae es un escudo redondo vacceo, forjado para la defensa en combate, que aumenta tu vida máxima en 10 puntos.", + efecto = EfectoEquipableAumento(10, Atributo.Vida), + imagen = R.drawable.asi_objeto_escudo + ), + ObjetoEquipable( + nombre = "Casco Ceremonial", + descripcion = "Casco ceremonial de oro de los vacceos decorado con intrincados patrones que simboliza el estatus social. Aumenta tu vida máxima en 8 puntos", + efecto = EfectoEquipableAumento(8, Atributo.Vida), + imagen = R.drawable.asi_objeto_casco + ), + ObjetoUtilidad( + nombre = "Pico Vacceo", + descripcion = "Un pico viejo y oscuro con dibujos extraños que parecen brillar cerca de las piedras, como si estuviera esperando que lo uses para algo importante.", + imagen = R.drawable.asi_objeto_pico + ), + ObjetoUtilidad( + nombre = "Ticket", + descripcion = "Representa una invitación a un evento relacionado con la cultura vaccea, como una feria arqueológica o un festival cultural", + imagen = R.drawable.asi_objeto_ticket + ) + ).associateBy { it.nombre } + } + + fun obtenerObjetoPorNombre(nombre: String): Objeto? { + return objetos[nombre] + } + + fun obtenerObjetosAleatoriosTienda(cantidad: Int): ArrayList<String> { + val consumibles = objetos.values.filter { it is ObjetoConsumible || it is ObjetoUtilidad } + return ArrayList<String>().apply { + repeat(cantidad) { + add((consumibles.random()).nombre) + } + } + } + + + fun convertirNombresAObjetos(nombres: List<String>): List<Objeto?> { + return nombres.map { nombre -> + obtenerObjetoPorNombre(nombre) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/ruleta/Ruleta.kt b/app/src/main/java/com/example/ellegadodepintia/ruleta/Ruleta.kt index 483aa50615125b987802a8705dcaa7367cb88bbc..ee453e724aaa1e29101c68593bc1a72cf77409b6 100644 --- a/app/src/main/java/com/example/ellegadodepintia/ruleta/Ruleta.kt +++ b/app/src/main/java/com/example/ellegadodepintia/ruleta/Ruleta.kt @@ -2,6 +2,8 @@ package com.example.ellegadodepintia.ruleta import android.animation.ObjectAnimator import android.animation.ValueAnimator +import android.app.Activity +import android.content.Intent import android.os.Bundle import android.os.Handler import android.os.Looper @@ -14,6 +16,7 @@ import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.core.animation.doOnEnd import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState import kotlin.random.Random import com.example.ellegadodepintia.soundManager.SoundManager @@ -27,11 +30,13 @@ class Ruleta : AppCompatActivity() { private val segmentos = arrayOf("x4", "x1", "x2", "x1", "x2", "x1", "x2", "x1") private var ultimaRotacion = 0f - private var puntuacionActual = 33 + private var puntuacionActual = 1 // Configura las vistas iniciales de la actividad y establece acciones iniciales override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + + puntuacionActual = intent.getIntExtra("PUNTUACION_ACTUAL", 0) soundManager = SoundManager(this) soundManager.playSoundLoop(R.raw.sound_casino, 80) setContentView(R.layout.activity_ruleta) @@ -45,8 +50,8 @@ class Ruleta : AppCompatActivity() { private fun inicializarVistas() { ruletaImage = findViewById(R.id.ruletaImage) puntero = findViewById(R.id.ruletaPuntero) - multiplicadorResultado = findViewById(R.id.multiplicadorResultado) puntuacion = findViewById(R.id.puntuacion) + puntuacionActual.toString().also { puntuacion.text = it } titulo = findViewById(R.id.ruletaTitulo) } @@ -103,6 +108,13 @@ class Ruleta : AppCompatActivity() { soundManager.playSound(R.raw.sound_big_win,100) lluviaMonedas() } + + Handler(Looper.getMainLooper()).postDelayed({ + val resultIntent = Intent() + resultIntent.putExtra("resultado", "$puntuacionActual") + setResult(Activity.RESULT_OK, resultIntent) + finish() + },5000) } // Realiza una animación de conteo que muestra la puntuación cambiando de un valor inicial a un valor final @@ -111,7 +123,7 @@ class Ruleta : AppCompatActivity() { duration = 3000 addUpdateListener { animation -> val valorActual = animation.animatedValue as Int - puntuacion.text = "Puntuación: $valorActual" + valorActual.toString().also { puntuacion.text = it } } start() } diff --git a/app/src/main/res/asi_objeto_ticker.png b/app/src/main/res/asi_objeto_ticker.png new file mode 100644 index 0000000000000000000000000000000000000000..00fab7f670fa8a7b854ed2f41027307744a95385 Binary files /dev/null and b/app/src/main/res/asi_objeto_ticker.png differ diff --git a/app/src/main/res/drawable/asi_candado_tienda.png b/app/src/main/res/drawable/asi_candado_tienda.png new file mode 100644 index 0000000000000000000000000000000000000000..54e9192f897fe5e2285dba96950d0a9b878cca18 Binary files /dev/null and b/app/src/main/res/drawable/asi_candado_tienda.png differ diff --git a/app/src/main/res/drawable/asi_objeto_ticket.png b/app/src/main/res/drawable/asi_objeto_ticket.png new file mode 100644 index 0000000000000000000000000000000000000000..00fab7f670fa8a7b854ed2f41027307744a95385 Binary files /dev/null and b/app/src/main/res/drawable/asi_objeto_ticket.png differ diff --git a/app/src/main/res/drawable/asi_reparar_palo.png b/app/src/main/res/drawable/asi_reparar_palo.png index acf6a6bf3ec006bd6f7c3b223d6ffce646619ff0..08c485c3881a6f72de2053b70ad5469d2decf007 100644 Binary files a/app/src/main/res/drawable/asi_reparar_palo.png and b/app/src/main/res/drawable/asi_reparar_palo.png differ diff --git a/app/src/main/res/drawable/background_tienda.png b/app/src/main/res/drawable/background_tienda.png new file mode 100644 index 0000000000000000000000000000000000000000..94fc1be3349351b10df8f5518bafa66a53909417 Binary files /dev/null and b/app/src/main/res/drawable/background_tienda.png differ diff --git a/app/src/main/res/layout/activity_iniciominijuego1.xml b/app/src/main/res/layout/activity_iniciominijuego1.xml index faf37cec3e830a303e15b912b6dd509ff8544b90..52ce68149fb6d39dea538ccb8834c22d2bcce33d 100644 --- a/app/src/main/res/layout/activity_iniciominijuego1.xml +++ b/app/src/main/res/layout/activity_iniciominijuego1.xml @@ -1,46 +1,58 @@ -<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent" - tools:context=".minijuego1.InicioMinijuego1"> + android:layout_height="match_parent"> <ImageView android:id="@+id/fondoImagen" - android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_width="0dp" + android:layout_height="0dp" android:src="@drawable/background_minijuego_1" - android:scaleType="centerCrop" /> + android:scaleType="centerCrop" + app:layout_constraintWidth_percent="1.0" + app:layout_constraintHeight_percent="1.0" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent" /> <ImageView android:id="@+id/titleImage" - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="0dp" + android:layout_height="0dp" android:src="@drawable/texto_minijuego_1_titulo" + app:layout_constraintWidth_percent="1" + app:layout_constraintHeight_percent="0.2" app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" /> + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintVertical_bias="0.2" /> + <ImageView android:id="@+id/bioImage" - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="0dp" + android:layout_height="0dp" android:src="@drawable/texto_minijuego_1_descripcion" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintWidth_percent="1" + app:layout_constraintHeight_percent="0.15" + app:layout_constraintTop_toBottomOf="@id/titleImage" app:layout_constraintStart_toStartOf="parent" - android:layout_marginTop="300dp"/> + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintVertical_bias="0" /> <ImageView android:id="@+id/startButton" - android:layout_width="wrap_content" - android:layout_height="90dp" + android:layout_width="0dp" + android:layout_height="0dp" android:src="@drawable/texto_minijuego_3_jugar" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintWidth_percent="0.8" + app:layout_constraintHeight_percent="0.1" + app:layout_constraintTop_toBottomOf="@id/bioImage" app:layout_constraintStart_toStartOf="parent" - tools:layout_editor_absoluteX="0dp" - tools:layout_editor_absoluteY="56dp" - android:layout_marginTop="600dp"/> + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintVertical_bias="0.2" /> -</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/activity_minijuego2.xml b/app/src/main/res/layout/activity_minijuego2.xml index 281d2e26cde3970ea149b504e599a798ad674316..f9c39da0dd671c83877def451fa6483e702e1f3f 100644 --- a/app/src/main/res/layout/activity_minijuego2.xml +++ b/app/src/main/res/layout/activity_minijuego2.xml @@ -26,25 +26,24 @@ android:layout_width="wrap_content" android:layout_height="300dp" android:layout_alignParentTop="true" - android:layout_marginTop="150dp" + android:layout_marginTop="100dp" android:src="@drawable/texto_minijuego_2_titulo" /> <ImageView android:id="@+id/descripcion" android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_height="120dp" + android:layout_below="@id/titulo" + android:layout_marginTop="0dp" android:src="@drawable/texto_minijuego_2_descripcion" - android:layout_alignParentTop="true" - android:layout_marginTop="400dp" - android:layout_centerHorizontal="true" /> <ImageView android:id="@+id/boton_iniciar" android:layout_width="200dp" android:layout_height="100dp" - android:layout_marginTop="600dp" android:src="@drawable/texto_minijuego_2_jugar" + android:layout_below="@id/descripcion" android:layout_centerHorizontal="true" android:textColor="@android:color/white" /> diff --git a/app/src/main/res/layout/activity_minijuego_reparacion.xml b/app/src/main/res/layout/activity_minijuego_reparacion.xml index e5bea48bce89b9b0d8ea868fb612de94caa8b3a3..5f9aa0bb6cf76308859c94194d33e9b45fed814e 100644 --- a/app/src/main/res/layout/activity_minijuego_reparacion.xml +++ b/app/src/main/res/layout/activity_minijuego_reparacion.xml @@ -5,8 +5,6 @@ android:background="@drawable/background_minijuego_reparar"> - - <!-- Imagen del martillo --> <ImageView android:id="@+id/martillo" android:layout_width="100dp" @@ -16,46 +14,42 @@ android:layout_marginTop="16dp" android:visibility="gone" /> - <!-- Imagen de la antigüedad a reparar --> + <ImageView android:id="@+id/imageToRepair" android:layout_width="250dp" android:layout_height="250dp" android:src="@drawable/asi_exploradores_jabonera" android:layout_centerHorizontal="true" - android:layout_marginBottom="-400dp" + android:layout_marginBottom="16dp" android:visibility="gone" /> - <!-- Contenedor de los fragmentos (estos se agregarán programáticamente) --> + <RelativeLayout android:id="@+id/relativeLayoutFragmentos" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentBottom="true" > + </RelativeLayout> - </RelativeLayout> - <!-- Imagen del Quick Time Event --> <ImageView android:id="@+id/QTERule" android:layout_width="150dp" android:layout_height="150dp" - android:src="@drawable/asi_reparar_rule" android:layout_centerHorizontal="true" android:layout_marginTop="16dp" - /> - <!-- Imagen de la aguja para el QTE --> + android:scaleType="fitCenter" + android:src="@drawable/asi_reparar_rule" /> + + <ImageView android:id="@+id/QTEPalo" - android:layout_width="90dp" - android:layout_height="50dp" - android:layout_marginLeft="10dp" - android:layout_marginStart="160dp" - android:layout_marginTop="65dp" - android:scaleX="3" - android:scaleY="1.5" + android:layout_width="100dp" + android:layout_height="40dp" + android:layout_centerHorizontal="true" + android:layout_marginTop="72dp" + android:scaleX="1.5" + android:scaleY="1" android:src="@drawable/asi_reparar_palo" /> - - - </RelativeLayout> diff --git a/app/src/main/res/layout/activity_resumen_partida.xml b/app/src/main/res/layout/activity_resumen_partida.xml index 105078ab0540ec9d7d848109caf16c4ee81a5744..e4d154018cd0044793c1fdb45fd6e27b15949cd6 100644 --- a/app/src/main/res/layout/activity_resumen_partida.xml +++ b/app/src/main/res/layout/activity_resumen_partida.xml @@ -148,6 +148,16 @@ android:layout_marginTop="10dp" android:text="Continuar" android:textColor="@color/pintiaButtonText" /> + + <Button + android:id="@+id/botonRuleta" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:backgroundTint="@color/pintiaButton" + android:layout_marginTop="10dp" + android:text="Utilizar Ticket" + android:textColor="@color/pintiaButtonText" + android:visibility="gone"/> </LinearLayout> diff --git a/app/src/main/res/layout/activity_ruleta.xml b/app/src/main/res/layout/activity_ruleta.xml index 85a4359bf87c38401c299321dcc439acb6b3350d..9e2c9522511761087f3dae9fec7f8bb0df5a2f41 100644 --- a/app/src/main/res/layout/activity_ruleta.xml +++ b/app/src/main/res/layout/activity_ruleta.xml @@ -1,35 +1,52 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical" android:padding="16dp" - android:gravity="center" - android:id="@+id/ruletaLayout" android:background="@drawable/background_minijuego_ruleta"> <ImageView android:id="@+id/ruletaTitulo" - android:layout_width="wrap_content" - android:layout_height="132dp" + android:layout_width="0dp" + android:layout_height="0dp" android:layout_marginBottom="20dp" android:contentDescription="TÃtulo de la ruleta" - android:src="@drawable/texto_ruleta_titulo" /> + android:src="@drawable/texto_ruleta_titulo" + app:layout_constraintWidth_default="percent" + app:layout_constraintWidth_percent="1" + app:layout_constraintDimensionRatio="2:1" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> + <ImageView android:id="@+id/ruletaPuntero" - android:layout_width="50dp" - android:layout_height="50dp" - android:layout_gravity="center" + android:layout_width="0dp" + android:layout_height="0dp" android:contentDescription="Puntero de la ruleta" android:rotation="180" - android:src="@drawable/asi_ruleta_puntero" /> + android:src="@drawable/asi_ruleta_puntero" + app:layout_constraintWidth_default="percent" + app:layout_constraintWidth_percent="0.1" + app:layout_constraintDimensionRatio="1:1" + app:layout_constraintTop_toBottomOf="@id/ruletaTitulo" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> <FrameLayout - android:layout_width="350dp" - android:layout_height="350dp" - android:layout_gravity="center" - android:layout_marginBottom="30dp"> + android:id="@+id/ruletaContainer" + android:layout_width="0dp" + android:layout_height="0dp" + app:layout_constraintWidth_default="percent" + app:layout_constraintWidth_percent="1" + app:layout_constraintDimensionRatio="1:1" + app:layout_constraintTop_toBottomOf="@id/ruletaPuntero" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toTopOf="@id/puntuacion"> + <ImageView android:id="@+id/ruletaImage" android:layout_width="match_parent" @@ -39,26 +56,21 @@ android:scaleType="centerCrop"/> </FrameLayout> - <TextView - android:id="@+id/multiplicadorResultado" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="Multiplicador: x1" - android:textSize="18sp" - android:textColor="#000" - android:visibility="gone" - android:layout_marginTop="20dp" - android:layout_gravity="center"/> + <TextView android:id="@+id/puntuacion" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Puntuación: 33" - android:textSize="40sp" + android:text="Puntuación: 33" + android:textSize="35sp" android:textColor="#FFFF00" - android:layout_marginTop="40dp" android:fontFamily="@font/pixeled" android:textAlignment="center" - android:textStyle="bold"/> -</LinearLayout> + android:textStyle="bold" + android:layout_marginTop="16dp" + app:layout_constraintTop_toBottomOf="@id/ruletaContainer" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/activity_tienda.xml b/app/src/main/res/layout/activity_tienda.xml new file mode 100644 index 0000000000000000000000000000000000000000..3d00ebadc41e064a2cf90b2d739e374ecc12f025 --- /dev/null +++ b/app/src/main/res/layout/activity_tienda.xml @@ -0,0 +1,497 @@ +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/pintiaBackground" + tools:context=".exploradoresDePintia.ExploradoresDePintia" + tools:ignore="HardcodedText, UseCompoundDrawables"> + + <ImageView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="Taberna" + android:src="@drawable/background_tienda" + android:scaleType="centerCrop" /> + + <ImageView + android:id="@+id/tituloJuego" + android:layout_width="wrap_content" + android:layout_height="120dp" + android:layout_centerHorizontal="true" + android:contentDescription="Titulo del minijuego" + android:src="@drawable/texto_tienda" + android:textColor="#401201" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <LinearLayout + android:id="@+id/layoutMonedas" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:padding="5dp" + android:background="@drawable/style_texto_border" + android:gravity="center" + android:layout_marginBottom="8dp" + app:layout_constraintTop_toBottomOf="@id/tituloJuego" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"> + + <TextView + android:id="@+id/textoMonedas" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + <GridLayout + android:id="@+id/inventarioGrid" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:layout_marginStart="5dp" + android:layout_marginEnd="5dp" + android:background="@drawable/style_texto_border" + android:columnCount="2" + android:padding="12dp" + android:rowCount="3" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/layoutMonedas"> + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:id="@+id/slot01" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio01" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda01" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + + <ImageView + android:id="@+id/slot02" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio02" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda02" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + + </LinearLayout> + + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + + <ImageView + android:id="@+id/slot03" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio03" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda03" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + + <ImageView + android:id="@+id/slot04" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio04" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda04" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + + <ImageView + android:id="@+id/slot05" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio05" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda05" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:id="@+id/slot06" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio06" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda06" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + </GridLayout> + + <TextView + android:id="@+id/textoInformacion" + android:layout_width="300dp" + android:layout_height="wrap_content" + android:text="Aquà aparecera la información relevante de las compras" + android:textSize="15sp" + android:fontFamily="@font/pixeled" + android:padding="6sp" + android:textColor="#401201" + android:background="@drawable/style_texto_border" + android:layout_marginTop="10dp" + app:layout_constraintTop_toBottomOf="@id/inventarioGrid" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + android:gravity="center"/> + + + <Button + android:id="@+id/botonRefrescar" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:backgroundTint="@color/pintiaButton" + android:fontFamily="@font/pixeled" + android:text="Refrescar tienda por 5 monedas" + android:textColor="@color/pintiaButtonText" + android:textStyle="bold" + app:layout_constraintTop_toBottomOf="@id/textoInformacion" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"/> + + <LinearLayout + android:id="@+id/bottom_navigation" + style="?android:attr/buttonBarStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@drawable/style_background_gradiente" + android:orientation="horizontal" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent"> + + <ImageButton + android:id="@+id/leaderboardButton" + android:layout_width="0dp" + android:layout_height="60dp" + android:layout_weight="1" + android:background="?attr/selectableItemBackground" + android:src="@drawable/icon_leaderboard" + android:contentDescription="Abre el mapa" + android:padding="5dp" + android:scaleType="fitCenter" /> + + <ImageButton + android:id="@+id/mapButton" + android:layout_width="0dp" + android:layout_height="60dp" + android:layout_weight="1" + android:background="?attr/selectableItemBackground" + android:src="@drawable/icon_map" + android:contentDescription="Abre el ranking" + android:layout_marginEnd="40dp" + android:layout_marginStart="40dp" + android:scaleType="fitCenter" /> + + <ImageButton + android:id="@+id/shopButton" + android:layout_width="0dp" + android:layout_height="60dp" + android:layout_weight="1" + android:background="?attr/selectableItemBackground" + android:src="@drawable/icon_shop" + android:contentDescription="Abre la tienda" + android:padding="5dp" + android:scaleType="fitCenter" /> + </LinearLayout> + +</androidx.constraintlayout.widget.ConstraintLayout>