Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • diegval/el-legado-de-pintia
1 result
Select Git revision
Show changes
Commits on Source (11)
Showing
with 735 additions and 98 deletions
......@@ -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
......@@ -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)
}
}
}
package com.example.ellegadodepintia
import android.os.Bundle
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import com.example.ellegadodepintia.repositorios.RepositorioObjetos
class TiendaActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_tienda)
val objetos = RepositorioObjetos.obtenerObjetosAleatoriosTienda(6)
//TODO hay que hacer que dependiendo del nivel de la ciudad haga más cosas
val slots = listOf(
findViewById<ImageView>(R.id.slot01),
findViewById(R.id.slot02),
findViewById(R.id.slot03),
findViewById(R.id.slot04),
findViewById(R.id.slot05),
findViewById(R.id.slot06)
)
slots.forEachIndexed { index, slot ->
slot.setImageResource(objetos[index].imagen)
}
}
}
\ No newline at end of file
......@@ -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,12 +22,35 @@ 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)
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)
"Ha susado 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 {
......@@ -30,7 +58,6 @@ class Resumen : AppCompatActivity() {
}
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)
......@@ -47,7 +74,9 @@ class Resumen : AppCompatActivity() {
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
......@@ -34,6 +34,14 @@ class Jugador {
atributos[Atributo.Investigacion] = 1
atributos[Atributo.Energia] = 10
inventario.add(
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
)
)
inventario.add(
ObjetoEquipable(
nombre = "Espada de Hierro",
......@@ -96,7 +104,9 @@ class Jugador {
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 }
"¡Has sido derrotado!".also {
context!!.findViewById<TextView>(R.id.textoResultado).text = it
}
cargarAnimacionesMuerteProtagonista()
Handler(Looper.getMainLooper()).postDelayed({
val intent = Intent(context, Resumen::class.java)
......
......@@ -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
......
......@@ -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 ->
......
......@@ -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()
}
}
......@@ -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(
......
......@@ -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
}
}
data class EventoRiesgoData(
val imagen: Int,
val opciones: List<Opcion>
)
......@@ -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",
......
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): List<ObjetoConsumible> {
val consumibles = objetos.values.filterIsInstance<ObjetoConsumible>()
return List(cantidad) { consumibles.random() }
}
}
\ No newline at end of file
......@@ -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)
......@@ -46,6 +51,7 @@ class Ruleta : AppCompatActivity() {
ruletaImage = findViewById(R.id.ruletaImage)
puntero = findViewById(R.id.ruletaPuntero)
puntuacion = findViewById(R.id.puntuacion)
puntuacionActual.toString().also { puntuacion.text = it }
titulo = findViewById(R.id.ruletaTitulo)
}
......@@ -102,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
......@@ -110,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()
}
......
app/src/main/res/asi_objeto_ticker.png

365 KiB

app/src/main/res/drawable/asi_objeto_ticket.png

365 KiB

app/src/main/res/drawable/background_tienda.png

67.7 KiB

......@@ -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>
......
<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" />
<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/tituloJuego">
<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: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: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: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: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: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: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>
<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>