Skip to content

Instantly share code, notes, and snippets.

@r0x0d
Created October 14, 2024 00:07
Show Gist options
  • Save r0x0d/77a2358fc649565e9065863fa0534125 to your computer and use it in GitHub Desktop.
Save r0x0d/77a2358fc649565e9065863fa0534125 to your computer and use it in GitHub Desktop.
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index fe80fba..894323b 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -44,6 +44,7 @@ android {
}
buildFeatures {
compose = true
+ viewBinding = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.1"
@@ -53,11 +54,21 @@ android {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
}
dependencies {
implementation(project(":dndback"))
+ implementation(libs.material)
+ implementation(libs.androidx.appcompat)
+ implementation(libs.androidx.constraintlayout)
+ implementation(libs.androidx.navigation.fragment.ktx)
+ implementation(libs.androidx.navigation.ui.ktx)
+ implementation(libs.androidx.navigation.compose)
//room dependencias
val room_version = "2.6.1"
implementation("androidx.room:room-runtime:$room_version")
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c0f3362..4890ac3 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,6 +12,10 @@
android:supportsRtl="true"
android:theme="@style/Theme.DdmFrontJetpackCompose"
tools:targetApi="31">
+ <activity
+ android:name=".ResultadosActivity"
+ android:exported="false"
+ android:theme="@style/Theme.DdmFrontJetpackCompose" />
<activity
android:name=".MainActivity"
android:exported="true"
diff --git a/app/src/main/java/up/dndfront/Atributos.kt b/app/src/main/java/up/dndfront/Atributos.kt
index 1a1ad0f..0b6fdd2 100644
--- a/app/src/main/java/up/dndfront/Atributos.kt
+++ b/app/src/main/java/up/dndfront/Atributos.kt
@@ -11,14 +11,14 @@ class Atributos {
var pontos = 27
fun setAtributo(atributo: Int) {
- if(atributo.toInt() < 8 || atributo.toInt() > 15)
+ if (atributo.toInt() < 8 || atributo.toInt() > 15)
throw IllegalArgumentException("Valor deve estar entre 8 e 15")
- else if (atributo > pontos && atributo !=8)
- throw IllegalArgumentException("Pontos insuficientes")
- else if(atributo != 8)
- // Não utilizei a contagem correta de custo de pontos, lembre que a partir de 13 o custo é 2
- // esta lógica não está correta, é só um exemplo, adapte com o teu código
- pontos -= atributo-8
+ else if (atributo > pontos && atributo != 8)
+ throw IllegalArgumentException("Pontos insuficientes")
+ else if (atributo != 8)
+ // Não utilizei a contagem correta de custo de pontos, lembre que a partir de 13 o custo é 2
+ // esta lógica não está correta, é só um exemplo, adapte com o teu código
+ pontos -= atributo - 8
}
fun getPontosDisponiveis(): Int {
diff --git a/app/src/main/java/up/dndfront/MainActivity.kt b/app/src/main/java/up/dndfront/MainActivity.kt
index 2b232cc..9a018b7 100644
--- a/app/src/main/java/up/dndfront/MainActivity.kt
+++ b/app/src/main/java/up/dndfront/MainActivity.kt
@@ -1,6 +1,7 @@
package up.dndfront
-import up.dndback.Personagem
+import Classes
+import Racas
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
@@ -10,144 +11,101 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
-import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowDropDown
+import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
-import androidx.compose.material3.OutlinedTextField
-import androidx.compose.material3.Snackbar
+import androidx.compose.material3.DropdownMenu
+import androidx.compose.material3.DropdownMenuItem
+import androidx.compose.material3.Icon
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Slider
import androidx.compose.material3.Text
+import androidx.compose.material3.TextButton
+import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.focus.onFocusChanged
-import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import androidx.lifecycle.lifecycleScope
-import kotlinx.coroutines.launch
-import up.dndfront.data.AtributosDAO
-import up.dndfront.data.AtributosDB
-import androidx.compose.material3.DropdownMenu
-import androidx.compose.material3.DropdownMenuItem
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Slider
-import up.dndback.classes.iClasses
+import up.dndback.Personagem
class MainActivity : ComponentActivity() {
- private var atributos = Atributos()
- private lateinit var atributosDAO: AtributosDAO
- lateinit var selectedRaca: racas.iRacas
- lateinit var selectedClasse: iClasses
+// private var atributos = Atributos()
+// private lateinit var atributosDAO: AtributosDAO
- val personagem = Personagem(
- nome = "Adam o destruidor de fandangos", //nome.toString(),
- raca = selectedRaca!!,
- classe = selectedClasse!!,
- )
+ var personagem = Personagem()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- val db = AtributosDB.getDatabase(this)
- atributosDAO = db.atributosDAO()
-
setContent {
- val personagem = remember {
- Personagem(
- nome = "Meu Personagem",
- raca = null,
- classe = null
- )
- }
+ MainScreen()
+ }
+ }
+ @Composable
+ fun MainScreen() {
+ Column {
+ UsernameInputScreen()
DropDownRacasScreen() // Exibe a seleção de raças
DropDownClassesScreen() // Exibe a seleção de classes
-
- AtributosScreen(personagem) { novosAtributos ->
- saveAtributos(personagem, novosAtributos)
- }
-
- ExibirAtributosScreen() // Exibe os atributos já salvos
}
-
-
- fun saveAtributos(personagem: Personagem, novosAtributos: Map<String, Int>) {
- // Iterar sobre os novos atributos e atualizar o personagem
- for ((atributo, valor) in novosAtributos) {
- personagem.aumentarAtributo(atributo, valor)
+ AtributosScreen { novosAtributos ->
+ saveAtributos(novosAtributos)
}
-
- // Após atualizar os atributos, salvar os dados no banco
-// lifecycleScope.launch {
-// atributosDAO.insert(atributosFromPersonagem(personagem))
-// }
-// }
-
-// fun atributosFromPersonagem(personagem: Personagem): AtributosEntity {
-// return AtributosEntity(
-// forca = personagem.forca,
-// destreza = personagem.destreza,
-// constituicao = personagem.constituicao,
-// inteligencia = personagem.inteligencia,
-// sabedoria = personagem.sabedoria,
-// carisma = personagem.carisma,
-// pontosDeVida = personagem.pontosDeVida,
-// pontosDisponiveis = personagem.pontosDisponiveis
-// )
}
-
@Composable
fun DropDownRacasScreen() {
-
- val isDropDownExpanded = remember {
- mutableStateOf(false)
- }
-
- val itemPosition = remember {
- mutableStateOf(0)
- }
-
+ val isDropDownExpanded = remember { mutableStateOf(false) }
+ val itemPosition = remember { mutableIntStateOf(0) }
val lista_de_racas = Racas.get_racas()
- // TODO: Mover a coluna do dropdown para cima, antes dos inputs
- Column(
- modifier = Modifier.fillMaxSize(),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.Center
+ personagem.raca = lista_de_racas[itemPosition.value]
+
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(16.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.SpaceBetween
) {
+ Text(text = "Escolha sua raça: ", fontSize = 22.sp)
Box {
- Row(
- horizontalArrangement = Arrangement.Center,
+ Row(horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.clickable {
isDropDownExpanded.value = true
- }
- ) {
- Text(text = lista_de_racas[itemPosition.value].nome)
- }
- DropdownMenu(
- expanded = isDropDownExpanded.value,
- onDismissRequest = {
- isDropDownExpanded.value = false
}) {
+ Text(text = lista_de_racas[itemPosition.value].nome, fontSize = 22.sp)
+ // Add a spacer between text and icon
+ Spacer(modifier = Modifier.width(8.dp))
+
+ // Caret icon (down arrow)
+ Icon(
+ imageVector = Icons.Default.ArrowDropDown,
+ contentDescription = "DropDown Icon"
+ )
+ }
+
+ DropdownMenu(expanded = isDropDownExpanded.value, onDismissRequest = {
+ isDropDownExpanded.value = false
+ }) {
lista_de_racas.forEachIndexed { index, raca ->
- DropdownMenuItem(text = {
- Text(text = raca.nome)
- },
- onClick = {
- isDropDownExpanded.value = false
- itemPosition.value = index
- selectedRaca = lista_de_racas[itemPosition.value]
- })
+ DropdownMenuItem(text = { Text(text = raca.nome) }, onClick = {
+ isDropDownExpanded.value = false
+ itemPosition.value = index
+ personagem.raca = lista_de_racas[itemPosition.value]
+ })
}
}
}
@@ -156,71 +114,71 @@ class MainActivity : ComponentActivity() {
@Composable
fun DropDownClassesScreen() {
-
val isDropDownExpanded = remember {
mutableStateOf(false)
}
val itemPosition = remember {
- mutableStateOf(0)
+ mutableIntStateOf(0)
}
val lista_de_classes = Classes.get_classes()
- // TODO: Mover a coluna do dropdown para cima, antes dos inputs
- Column(
- modifier = Modifier.fillMaxSize(),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.Center
+ // Inicializa a classe como sendo o primeiro valor da lista
+ personagem.classe = lista_de_classes[itemPosition.value]
+
+ Row(
+ modifier = Modifier
+ .fillMaxWidth(),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.SpaceBetween
) {
+ Text(text = " Escolha sua classe: ", fontSize = 22.sp)
Box {
- Row(
- horizontalArrangement = Arrangement.Center,
+ Row(horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically,
- modifier = Modifier.clickable {
- isDropDownExpanded.value = true
- }
- ) {
- Text(text = lista_de_classes[itemPosition.value].nome)
+ modifier = Modifier
+ .clickable { isDropDownExpanded.value = true }
+ .padding(start = 8.dp)) {
+ Text(text = lista_de_classes[itemPosition.value].nome, fontSize = 22.sp)
+
+ Spacer(modifier = Modifier.width(8.dp))
+
+ Icon(
+ imageVector = Icons.Default.ArrowDropDown,
+ contentDescription = "DropDown Icon"
+ )
}
- DropdownMenu(
- expanded = isDropDownExpanded.value,
- onDismissRequest = {
- isDropDownExpanded.value = false
- }) {
- lista_de_classes.forEachIndexed { index, raca ->
- DropdownMenuItem(text = {
- Text(text = raca.nome)
- },
- onClick = {
- isDropDownExpanded.value = false
- itemPosition.value = index
- selectedClasse = lista_de_classes[itemPosition.value]
- })
+
+ DropdownMenu(expanded = isDropDownExpanded.value, onDismissRequest = {
+ isDropDownExpanded.value = false
+ }) {
+ lista_de_classes.forEachIndexed { index, classe ->
+ DropdownMenuItem(text = { Text(text = classe.nome) }, onClick = {
+ isDropDownExpanded.value = false
+ itemPosition.value = index
+ personagem.classe = lista_de_classes[itemPosition.value]
+ })
}
}
}
}
}
-
@Composable
- fun ExibirAtributosScreen(personagem: Personagem) {
- Column {
- Text(text = "Nome: ${personagem.nome}", fontSize = 18.sp)
- Text(text = "Raça: ${personagem.raca?.nome ?: "N/A"}", fontSize = 18.sp)
- Text(text = "Classe: ${personagem.classe?.nome ?: "N/A"}", fontSize = 18.sp)
- Text(text = "Força: ${personagem.forca}", fontSize = 18.sp)
- Text(text = "Destreza: ${personagem.destreza}", fontSize = 18.sp)
- Text(text = "Constituição: ${personagem.constituicao}", fontSize = 18.sp)
- Text(text = "Inteligência: ${personagem.inteligencia}", fontSize = 18.sp)
- Text(text = "Sabedoria: ${personagem.sabedoria}", fontSize = 18.sp)
- Text(text = "Carisma: ${personagem.carisma}", fontSize = 18.sp)
- Text(text = "Pontos de Vida: ${personagem.pontosDeVida}", fontSize = 18.sp)
- }
- }
-
+ fun UsernameInputScreen() {
+ var nome by remember { mutableStateOf("") }
+ TextField(
+ value = nome,
+ onValueChange = { nome = it },
+ label = { Text(text = "Digite seu nome") },
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(bottom = 16.dp) // Add some padding below the TextField
+ )
+
+ personagem.nome = nome
}
@Composable
@@ -231,28 +189,40 @@ class MainActivity : ComponentActivity() {
// Slider que permite alterar o valor
Slider(
- value = valorAtual.toFloat(),
- onValueChange = { novoValor ->
+ value = valorAtual.toFloat(), onValueChange = { novoValor ->
onValueChange(novoValor.toInt()) // Passa o valor atualizado para a função de callback
- },
- valueRange = 8f..15f, // Define o intervalo do valor permitido
+ }, valueRange = 8f..15f, // Define o intervalo do valor permitido
steps = 7, // Define os passos (quantidade de valores permitidos entre o intervalo)
modifier = Modifier.padding(horizontal = 16.dp) // Padding para afastar o slider das bordas
)
}
}
+ private fun saveAtributos(novosAtributos: Map<String, Int>) {
+ // Iterar sobre os novos atributos e atualizar o personagem
+ for ((atributo, valor) in novosAtributos) {
+ personagem.aumentarAtributo(atributo, valor)
+ }
+
+ var pontos_de_vida = personagem.classe?.calcularPontosDeVida(personagem.constituicao)
+ if (pontos_de_vida != null) {
+ personagem.pontosDeVida += pontos_de_vida
+ }
+ }
@Composable
- fun AtributosScreen(personagem: Personagem, onSaveClick: (Map<String, Int>) -> Unit) {
- var forca by remember { mutableStateOf(personagem.forca) }
- var destreza by remember { mutableStateOf(personagem.destreza) }
- var constituicao by remember { mutableStateOf(personagem.constituicao) }
- var inteligencia by remember { mutableStateOf(personagem.inteligencia) }
- var sabedoria by remember { mutableStateOf(personagem.sabedoria) }
- var carisma by remember { mutableStateOf(personagem.carisma) }
+ fun AtributosScreen(onSaveClick: (Map<String, Int>) -> Unit) {
+ var forca by remember { mutableIntStateOf(personagem.forca) }
+ var destreza by remember { mutableIntStateOf(personagem.destreza) }
+ var constituicao by remember { mutableIntStateOf(personagem.constituicao) }
+ var inteligencia by remember { mutableIntStateOf(personagem.inteligencia) }
+ var sabedoria by remember { mutableIntStateOf(personagem.sabedoria) }
+ var carisma by remember { mutableIntStateOf(personagem.carisma) }
+ var showDialog by remember { mutableStateOf(false) }
- Column {
+ Column(
+ modifier = Modifier.padding(start = 16.dp, top = 164.dp) // Add padding to the top
+ ) {
// Exibir sliders ou campos de texto para modificar os atributos
SliderAtributo("Força", forca) { novoValor -> forca = novoValor }
SliderAtributo("Destreza", destreza) { novoValor -> destreza = novoValor }
@@ -277,87 +247,49 @@ class MainActivity : ComponentActivity() {
"carisma" to carisma
)
onSaveClick(novosAtributos) // Chama a função para salvar
+ showDialog = true
}) {
Text("Salvar Atributos")
}
- }
- }
-
- @Composable
- fun AtributoInputRow(
- label: String,
- atributos: Atributos,
- updatePontos: () -> Unit,
- onError: (String) -> Unit
- ) {
- var textValue by remember { mutableStateOf("") }
-
- Row(
- modifier = Modifier.fillMaxWidth(),
- horizontalArrangement = Arrangement.SpaceBetween,
- verticalAlignment = Alignment.CenterVertically // Alinhamento vertical centralizado
- ) {
- // Coluna de Atributos
- Text(text = label, modifier = Modifier.weight(1f))
-
- // Campo de entrada de número inteiro
- OutlinedTextField(
- value = textValue,
- onValueChange = { newValue ->
- // Permitir apenas números
- if (newValue.all { it.isDigit() }) {
- textValue = newValue
- }
- },
- keyboardOptions = KeyboardOptions.Default.copy(
- keyboardType = KeyboardType.Number
- ),
- modifier = Modifier
- .weight(1f)
- .width(50.dp)
- .onFocusChanged { focusState ->
- if (!focusState.isFocused && textValue.isNotEmpty()) {
- try {
- val valor = textValue.toInt()
- atributos.setAtributo(valor) // Envia o valor para setAtributo
- updatePontos() // Atualiza os pontos
- } catch (e: IllegalArgumentException) {
- onError(e.message ?: "Erro desconhecido")
- textValue = "" // Limpa o campo em caso de erro
- } catch (e: NumberFormatException) {
- onError("Por favor, insira um número válido.")
- textValue = "" // Limpa o campo em caso de erro
- }
+ if (showDialog) {
+ // Alert dialog para confirmar a ação
+ AlertDialog(
+ onDismissRequest = { showDialog = false },
+ title = { Text("Informações do Personagem") },
+ text = {
+ Column {
+ Text(text = "Nome: ${personagem.nome}", fontSize = 18.sp)
+ Text(text = "Raça: ${personagem.raca?.nome ?: "N/A"}", fontSize = 18.sp)
+ Text(
+ text = "Classe: ${personagem.classe?.nome ?: "N/A"}",
+ fontSize = 18.sp
+ )
+ Text(text = "Força: ${personagem.forca}", fontSize = 18.sp)
+ Text(text = "Destreza: ${personagem.destreza}", fontSize = 18.sp)
+ Text(
+ text = "Constituição: ${personagem.constituicao}",
+ fontSize = 18.sp
+ )
+ Text(
+ text = "Inteligência: ${personagem.inteligencia}",
+ fontSize = 18.sp
+ )
+ Text(text = "Sabedoria: ${personagem.sabedoria}", fontSize = 18.sp)
+ Text(text = "Carisma: ${personagem.carisma}", fontSize = 18.sp)
+ Text(
+ text = "Pontos de Vida: ${personagem.pontosDeVida}",
+ fontSize = 18.sp
+ )
+ }
+ },
+ confirmButton = {
+ TextButton(onClick = { showDialog = false }) {
+ Text("OK")
}
}
- )
-
- // Coluna Bônus de Raça
- Text(
- text = "0",
- modifier = Modifier.weight(1f),
- textAlign = androidx.compose.ui.text.style.TextAlign.Center
- )
-
- // Coluna Mod
- Text(
- text = "0",
- modifier = Modifier.weight(1f),
- textAlign = androidx.compose.ui.text.style.TextAlign.Center
- )
- }
- }
-
- @Composable
- fun FilledButtonPersistencia(onClick: () -> Unit) {
- Button(onClick = { onClick() }) {
- Text("Persistência")
-
+ )
+ }
}
}
-
- fun showMessage(message: String, callback: (String) -> Unit) {
- callback(message)
- }
- }
+}
diff --git a/app/src/main/java/up/dndfront/data/AtributosDB.kt b/app/src/main/java/up/dndfront/data/AtributosDB.kt
index 7e8fe30..2e96dcf 100644
--- a/app/src/main/java/up/dndfront/data/AtributosDB.kt
+++ b/app/src/main/java/up/dndfront/data/AtributosDB.kt
@@ -7,17 +7,17 @@ import androidx.room.RoomDatabase
import up.dndfront.Atributos
@Database(entities = [Atributos::class], version = 1, exportSchema = false)
-abstract class AtributosDB: RoomDatabase() {
+abstract class AtributosDB : RoomDatabase() {
abstract fun atributosDAO(): AtributosDAO
- companion object{
+ companion object {
@Volatile
- private var INSTANCIA: AtributosDB? =null
+ private var INSTANCIA: AtributosDB? = null
- fun getDatabase(context: Context): AtributosDB{
- return INSTANCIA ?: synchronized(this){
+ fun getDatabase(context: Context): AtributosDB {
+ return INSTANCIA ?: synchronized(this) {
val instancia = Room.databaseBuilder(
context.applicationContext,
AtributosDB::class.java,
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index eec7e82..5d7328d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,45 @@
<resources>
<string name="app_name">DnD</string>
+ <!-- Strings used for fragments for navigation -->
+ <string name="first_fragment_label">First Fragment</string>
+ <string name="second_fragment_label">Second Fragment</string>
+ <string name="next">Next</string>
+ <string name="previous">Previous</string>
+
+ <string name="lorem_ipsum">
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam in scelerisque sem. Mauris
+ volutpat, dolor id interdum ullamcorper, risus dolor egestas lectus, sit amet mattis purus
+ dui nec risus. Maecenas non sodales nisi, vel dictum dolor. Class aptent taciti sociosqu ad
+ litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse blandit eleifend
+ diam, vel rutrum tellus vulputate quis. Aliquam eget libero aliquet, imperdiet nisl a,
+ ornare ex. Sed rhoncus est ut libero porta lobortis. Fusce in dictum tellus.\n\n
+ Suspendisse interdum ornare ante. Aliquam nec cursus lorem. Morbi id magna felis. Vivamus
+ egestas, est a condimentum egestas, turpis nisl iaculis ipsum, in dictum tellus dolor sed
+ neque. Morbi tellus erat, dapibus ut sem a, iaculis tincidunt dui. Interdum et malesuada
+ fames ac ante ipsum primis in faucibus. Curabitur et eros porttitor, ultricies urna vitae,
+ molestie nibh. Phasellus at commodo eros, non aliquet metus. Sed maximus nisl nec dolor
+ bibendum, vel congue leo egestas.\n\n
+ Sed interdum tortor nibh, in sagittis risus mollis quis. Curabitur mi odio, condimentum sit
+ amet auctor at, mollis non turpis. Nullam pretium libero vestibulum, finibus orci vel,
+ molestie quam. Fusce blandit tincidunt nulla, quis sollicitudin libero facilisis et. Integer
+ interdum nunc ligula, et fermentum metus hendrerit id. Vestibulum lectus felis, dictum at
+ lacinia sit amet, tristique id quam. Cras eu consequat dui. Suspendisse sodales nunc ligula,
+ in lobortis sem porta sed. Integer id ultrices magna, in luctus elit. Sed a pellentesque
+ est.\n\n
+ Aenean nunc velit, lacinia sed dolor sed, ultrices viverra nulla. Etiam a venenatis nibh.
+ Morbi laoreet, tortor sed facilisis varius, nibh orci rhoncus nulla, id elementum leo dui
+ non lorem. Nam mollis ipsum quis auctor varius. Quisque elementum eu libero sed commodo. In
+ eros nisl, imperdiet vel imperdiet et, scelerisque a mauris. Pellentesque varius ex nunc,
+ quis imperdiet eros placerat ac. Duis finibus orci et est auctor tincidunt. Sed non viverra
+ ipsum. Nunc quis augue egestas, cursus lorem at, molestie sem. Morbi a consectetur ipsum, a
+ placerat diam. Etiam vulputate dignissim convallis. Integer faucibus mauris sit amet finibus
+ convallis.\n\n
+ Phasellus in aliquet mi. Pellentesque habitant morbi tristique senectus et netus et
+ malesuada fames ac turpis egestas. In volutpat arcu ut felis sagittis, in finibus massa
+ gravida. Pellentesque id tellus orci. Integer dictum, lorem sed efficitur ullamcorper,
+ libero justo consectetur ipsum, in mollis nisl ex sed nisl. Donec maximus ullamcorper
+ sodales. Praesent bibendum rhoncus tellus nec feugiat. In a ornare nulla. Donec rhoncus
+ libero vel nunc consequat, quis tincidunt nisl eleifend. Cras bibendum enim a justo luctus
+ vestibulum. Fusce dictum libero quis erat maximus, vitae volutpat diam dignissim.
+ </string>
</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 2df73e6..9f9c635 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -2,4 +2,9 @@
<resources>
<style name="Theme.DdmFrontJetpackCompose" parent="android:Theme.Material.Light.NoActionBar" />
+ <!-- Base application theme. -->
+ <style name="Base.Theme.DdmFrontJetpackCompose" parent="Theme.Material3.DayNight.NoActionBar">
+ <!-- Customize your light theme here. -->
+ <!-- <item name="colorPrimary">@color/my_light_primary</item> -->
+ </style>
</resources>
\ No newline at end of file
diff --git a/dndback/src/main/java/up/dndback/Personagem.kt b/dndback/src/main/java/up/dndback/Personagem.kt
index 736b21a..b6ff22a 100644
--- a/dndback/src/main/java/up/dndback/Personagem.kt
+++ b/dndback/src/main/java/up/dndback/Personagem.kt
@@ -1,20 +1,9 @@
package up.dndback
+
import up.dndback.classes.iClasses
-import java.util.*
-
-class Personagem(
- val nome: String,
- val raca: racas.iRacas?,
- val classe: iClasses?,
- var forca: Int = 8,
- var destreza: Int = 8,
- var constituicao: Int = 8,
- var inteligencia: Int = 8,
- var sabedoria: Int = 8,
- var carisma: Int = 8,
- var pontosDeVida: Int = 8,
- var pontosDisponiveis: Int = 27
-){
+import java.util.Locale
+
+class Personagem {
// Tabela de custo
private val tabelaCusto = mapOf(
@@ -22,6 +11,28 @@ class Personagem(
12 to 4, 13 to 5, 14 to 7, 15 to 9
)
+ var nome: String = ""
+
+ var raca: racas.iRacas? = null
+
+ var classe: iClasses? = null
+
+ var forca: Int = 8
+
+ var destreza: Int = 8
+
+ var constituicao: Int = 8
+
+ var inteligencia: Int = 8
+
+ var sabedoria: Int = 8
+
+ var carisma: Int = 8
+
+ var pontosDeVida: Int = 8
+
+ var pontosDisponiveis: Int = 27
+
// Método para gastar pontos e aumentar o valor do atributo
fun aumentarAtributo(atributo: String, novoValor: Int) {
val atributoAtual = obterValorAtributo(atributo)
@@ -32,8 +43,10 @@ class Personagem(
if (pontosDisponiveis >= custoTotal && novoValor in 8..15) {
pontosDisponiveis -= custoTotal
definirValorAtributo(atributo, novoValor)
- println("\nAtributo $atributo atualizado para $novoValor. " +
- "Pontos restantes: $pontosDisponiveis")
+ println(
+ "\nAtributo $atributo atualizado para $novoValor. " +
+ "Pontos restantes: $pontosDisponiveis"
+ )
} else {
println("\nNão é possível atualizar $atributo para $novoValor. Pontos insuficientes ou valor inválido.")
}
@@ -52,6 +65,7 @@ class Personagem(
else -> 8
}
}
+
private fun definirValorAtributo(atributo: String, valor: Int) {
when (atributo.lowercase(Locale.getDefault())) {
"forca" -> forca = valor
diff --git a/dndback/src/main/java/up/dndback/Racas.kt b/dndback/src/main/java/up/dndback/Racas.kt
index 907b8fd..2becfc0 100644
--- a/dndback/src/main/java/up/dndback/Racas.kt
+++ b/dndback/src/main/java/up/dndback/Racas.kt
@@ -1,20 +1,20 @@
-import racas.AnaoDaMontanha
-import racas.AnaoDaColina
import racas.Anao
+import racas.AnaoDaColina
+import racas.AnaoDaMontanha
+import racas.Draconato
+import racas.Drow
import racas.Elfo
-import racas.ElfoDaFloresta
import racas.ElfoAlto
-import racas.MeioElfo
-import racas.Humano
-import racas.HalflingPesLeves
-import racas.HalflingRobusto
-import racas.Draconato
+import racas.ElfoDaFloresta
import racas.Gnomo
import racas.GnomoDaFloresta
import racas.GnomoDasRochas
+import racas.HalflingPesLeves
+import racas.HalflingRobusto
+import racas.Humano
+import racas.MeioElfo
import racas.MeioOrc
import racas.Tiefling
-import racas.Drow
import racas.iRacas
object Racas {
diff --git a/dndback/src/main/java/up/dndback/classes/Barbaro.kt b/dndback/src/main/java/up/dndback/classes/Barbaro.kt
index 838fdaf..3020dbe 100644
--- a/dndback/src/main/java/up/dndback/classes/Barbaro.kt
+++ b/dndback/src/main/java/up/dndback/classes/Barbaro.kt
@@ -1,4 +1,5 @@
package classes
+
import up.dndback.classes.iClasses
class Barbaro : iClasses {
diff --git a/dndback/src/main/java/up/dndback/classes/Bardo.kt b/dndback/src/main/java/up/dndback/classes/Bardo.kt
index 7b29a6c..bf3fcb9 100644
--- a/dndback/src/main/java/up/dndback/classes/Bardo.kt
+++ b/dndback/src/main/java/up/dndback/classes/Bardo.kt
@@ -1,4 +1,5 @@
package classes
+
import up.dndback.classes.iClasses
class Bardo : iClasses {
diff --git a/dndback/src/main/java/up/dndback/classes/Bruxo.kt b/dndback/src/main/java/up/dndback/classes/Bruxo.kt
index 72101f4..59a4d66 100644
--- a/dndback/src/main/java/up/dndback/classes/Bruxo.kt
+++ b/dndback/src/main/java/up/dndback/classes/Bruxo.kt
@@ -1,4 +1,5 @@
package classes
+
import up.dndback.classes.iClasses
class Bruxo : iClasses {
diff --git a/dndback/src/main/java/up/dndback/classes/Clerigo.kt b/dndback/src/main/java/up/dndback/classes/Clerigo.kt
index 31f264b..89a6019 100644
--- a/dndback/src/main/java/up/dndback/classes/Clerigo.kt
+++ b/dndback/src/main/java/up/dndback/classes/Clerigo.kt
@@ -1,4 +1,5 @@
package classes
+
import up.dndback.classes.iClasses
class Clerigo : iClasses {
diff --git a/dndback/src/main/java/up/dndback/classes/Druida.kt b/dndback/src/main/java/up/dndback/classes/Druida.kt
index bae3aaf..6490c39 100644
--- a/dndback/src/main/java/up/dndback/classes/Druida.kt
+++ b/dndback/src/main/java/up/dndback/classes/Druida.kt
@@ -1,4 +1,5 @@
package classes
+
import up.dndback.classes.iClasses
class Druida : iClasses {
diff --git a/dndback/src/main/java/up/dndback/classes/Feiticeiro.kt b/dndback/src/main/java/up/dndback/classes/Feiticeiro.kt
index 9fbc610..d8c2b09 100644
--- a/dndback/src/main/java/up/dndback/classes/Feiticeiro.kt
+++ b/dndback/src/main/java/up/dndback/classes/Feiticeiro.kt
@@ -1,4 +1,5 @@
package classes
+
import up.dndback.classes.iClasses
class Feiticeiro : iClasses {
diff --git a/dndback/src/main/java/up/dndback/classes/Guerreiro.kt b/dndback/src/main/java/up/dndback/classes/Guerreiro.kt
index a724429..400ccf4 100644
--- a/dndback/src/main/java/up/dndback/classes/Guerreiro.kt
+++ b/dndback/src/main/java/up/dndback/classes/Guerreiro.kt
@@ -1,4 +1,5 @@
package classes
+
import up.dndback.classes.iClasses
class Guerreiro : iClasses {
diff --git a/dndback/src/main/java/up/dndback/classes/Ladino.kt b/dndback/src/main/java/up/dndback/classes/Ladino.kt
index 4fe01e5..8df4276 100644
--- a/dndback/src/main/java/up/dndback/classes/Ladino.kt
+++ b/dndback/src/main/java/up/dndback/classes/Ladino.kt
@@ -1,4 +1,5 @@
package classes
+
import up.dndback.classes.iClasses
class Ladino : iClasses {
diff --git a/dndback/src/main/java/up/dndback/classes/Mago.kt b/dndback/src/main/java/up/dndback/classes/Mago.kt
index 7fc7f10..bcc4e12 100644
--- a/dndback/src/main/java/up/dndback/classes/Mago.kt
+++ b/dndback/src/main/java/up/dndback/classes/Mago.kt
@@ -1,4 +1,5 @@
package classes
+
import up.dndback.classes.iClasses
class Mago : iClasses {
diff --git a/dndback/src/main/java/up/dndback/classes/Monge.kt b/dndback/src/main/java/up/dndback/classes/Monge.kt
index 283908d..3345382 100644
--- a/dndback/src/main/java/up/dndback/classes/Monge.kt
+++ b/dndback/src/main/java/up/dndback/classes/Monge.kt
@@ -1,4 +1,5 @@
package classes
+
import up.dndback.classes.iClasses
diff --git a/dndback/src/main/java/up/dndback/classes/Paladino.kt b/dndback/src/main/java/up/dndback/classes/Paladino.kt
index 92b4506..ff63885 100644
--- a/dndback/src/main/java/up/dndback/classes/Paladino.kt
+++ b/dndback/src/main/java/up/dndback/classes/Paladino.kt
@@ -1,4 +1,5 @@
package classes
+
import up.dndback.classes.iClasses
class Paladino : iClasses {
diff --git a/dndback/src/main/java/up/dndback/classes/Patrulheiro.kt b/dndback/src/main/java/up/dndback/classes/Patrulheiro.kt
index 7fe08b6..1d64bc9 100644
--- a/dndback/src/main/java/up/dndback/classes/Patrulheiro.kt
+++ b/dndback/src/main/java/up/dndback/classes/Patrulheiro.kt
@@ -1,4 +1,5 @@
package classes
+
import up.dndback.classes.iClasses
class Patrulheiro : iClasses {
diff --git a/dndback/src/main/java/up/dndback/racas/Anao.kt b/dndback/src/main/java/up/dndback/racas/Anao.kt
index 1c82f74..5cf93f8 100644
--- a/dndback/src/main/java/up/dndback/racas/Anao.kt
+++ b/dndback/src/main/java/up/dndback/racas/Anao.kt
@@ -1,4 +1,5 @@
package racas
+
import up.dndback.Personagem
class Anao : iRacas {
diff --git a/dndback/src/main/java/up/dndback/racas/AnaoDaColina.kt b/dndback/src/main/java/up/dndback/racas/AnaoDaColina.kt
index 0eda07a..3c95a0c 100644
--- a/dndback/src/main/java/up/dndback/racas/AnaoDaColina.kt
+++ b/dndback/src/main/java/up/dndback/racas/AnaoDaColina.kt
@@ -1,7 +1,8 @@
package racas
+
import up.dndback.Personagem
-class AnaoDaColina : racas.iRacas {
+class AnaoDaColina : iRacas {
override val nome = "Anão da Colina"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/AnaoDaMontanha.kt b/dndback/src/main/java/up/dndback/racas/AnaoDaMontanha.kt
index 7bfbff6..142a6dc 100644
--- a/dndback/src/main/java/up/dndback/racas/AnaoDaMontanha.kt
+++ b/dndback/src/main/java/up/dndback/racas/AnaoDaMontanha.kt
@@ -2,15 +2,15 @@ package racas
import up.dndback.Personagem
-class AnaoDaMontanha : racas.iRacas {
+class AnaoDaMontanha : iRacas {
override val nome = "Anão da Montanha"
override fun aplicarBonus(personagem: Personagem) {
- personagem.forca += 2
- personagem.destreza -= 2
- personagem.constituicao += 2
- personagem.inteligencia -= 2
- personagem.sabedoria += 2
- personagem.carisma -= 2
+ personagem.forca += 2
+ personagem.destreza -= 2
+ personagem.constituicao += 2
+ personagem.inteligencia -= 2
+ personagem.sabedoria += 2
+ personagem.carisma -= 2
}
}
\ No newline at end of file
diff --git a/dndback/src/main/java/up/dndback/racas/Draconato.kt b/dndback/src/main/java/up/dndback/racas/Draconato.kt
index 5cb6729..d8c019f 100644
--- a/dndback/src/main/java/up/dndback/racas/Draconato.kt
+++ b/dndback/src/main/java/up/dndback/racas/Draconato.kt
@@ -1,8 +1,9 @@
package racas
+
import up.dndback.Personagem
-class Draconato : racas.iRacas {
+class Draconato : iRacas {
override val nome = "Draconato"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/Drow.kt b/dndback/src/main/java/up/dndback/racas/Drow.kt
index 6560af6..117fb07 100644
--- a/dndback/src/main/java/up/dndback/racas/Drow.kt
+++ b/dndback/src/main/java/up/dndback/racas/Drow.kt
@@ -1,7 +1,8 @@
package racas
+
import up.dndback.Personagem
-class Drow : racas.iRacas {
+class Drow : iRacas {
override val nome = "Drow"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/Elfo.kt b/dndback/src/main/java/up/dndback/racas/Elfo.kt
index 5fc5743..13bf708 100644
--- a/dndback/src/main/java/up/dndback/racas/Elfo.kt
+++ b/dndback/src/main/java/up/dndback/racas/Elfo.kt
@@ -1,7 +1,8 @@
package racas
+
import up.dndback.Personagem
-class Elfo : racas.iRacas {
+class Elfo : iRacas {
override val nome = "Elfo"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/ElfoAlto.kt b/dndback/src/main/java/up/dndback/racas/ElfoAlto.kt
index e6b4f38..f4bb4bf 100644
--- a/dndback/src/main/java/up/dndback/racas/ElfoAlto.kt
+++ b/dndback/src/main/java/up/dndback/racas/ElfoAlto.kt
@@ -1,7 +1,8 @@
package racas
+
import up.dndback.Personagem
-class ElfoAlto : racas.iRacas {
+class ElfoAlto : iRacas {
override val nome = "Elfo Alto"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/ElfoDaFloresta.kt b/dndback/src/main/java/up/dndback/racas/ElfoDaFloresta.kt
index 42e41c2..531bb14 100644
--- a/dndback/src/main/java/up/dndback/racas/ElfoDaFloresta.kt
+++ b/dndback/src/main/java/up/dndback/racas/ElfoDaFloresta.kt
@@ -1,7 +1,8 @@
package racas
+
import up.dndback.Personagem
-class ElfoDaFloresta : racas.iRacas {
+class ElfoDaFloresta : iRacas {
override val nome = "Elfo da Floresta"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/Gnomo.kt b/dndback/src/main/java/up/dndback/racas/Gnomo.kt
index d041811..5cd4800 100644
--- a/dndback/src/main/java/up/dndback/racas/Gnomo.kt
+++ b/dndback/src/main/java/up/dndback/racas/Gnomo.kt
@@ -1,7 +1,8 @@
package racas
+
import up.dndback.Personagem
-class Gnomo : racas.iRacas {
+class Gnomo : iRacas {
override val nome = "Gnomo"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/GnomoDaFloresta.kt b/dndback/src/main/java/up/dndback/racas/GnomoDaFloresta.kt
index 81979fb..bd32f4c 100644
--- a/dndback/src/main/java/up/dndback/racas/GnomoDaFloresta.kt
+++ b/dndback/src/main/java/up/dndback/racas/GnomoDaFloresta.kt
@@ -1,7 +1,8 @@
package racas
+
import up.dndback.Personagem
-class GnomoDaFloresta : racas.iRacas {
+class GnomoDaFloresta : iRacas {
override val nome = "Gnomo da Floresta"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/GnomoDasRochas.kt b/dndback/src/main/java/up/dndback/racas/GnomoDasRochas.kt
index 8ffc9fd..2324b58 100644
--- a/dndback/src/main/java/up/dndback/racas/GnomoDasRochas.kt
+++ b/dndback/src/main/java/up/dndback/racas/GnomoDasRochas.kt
@@ -1,8 +1,9 @@
package racas
+
import up.dndback.Personagem
-class GnomoDasRochas : racas.iRacas {
+class GnomoDasRochas : iRacas {
override val nome = "Gnomo das Rochas"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/HalflingPesLeves.kt b/dndback/src/main/java/up/dndback/racas/HalflingPesLeves.kt
index 041c41d..66f05cc 100644
--- a/dndback/src/main/java/up/dndback/racas/HalflingPesLeves.kt
+++ b/dndback/src/main/java/up/dndback/racas/HalflingPesLeves.kt
@@ -1,8 +1,9 @@
package racas
+
import up.dndback.Personagem
-class HalflingPesLeves : racas.iRacas {
+class HalflingPesLeves : iRacas {
override val nome = "Halfling Pés Leves"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/HalflingRobusto.kt b/dndback/src/main/java/up/dndback/racas/HalflingRobusto.kt
index b15e57a..54a0a0e 100644
--- a/dndback/src/main/java/up/dndback/racas/HalflingRobusto.kt
+++ b/dndback/src/main/java/up/dndback/racas/HalflingRobusto.kt
@@ -1,8 +1,9 @@
package racas
+
import up.dndback.Personagem
-class HalflingRobusto : racas.iRacas {
+class HalflingRobusto : iRacas {
override val nome = "Halfling Robusto"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/Humano.kt b/dndback/src/main/java/up/dndback/racas/Humano.kt
index 4f2d4bd..bbe0d98 100644
--- a/dndback/src/main/java/up/dndback/racas/Humano.kt
+++ b/dndback/src/main/java/up/dndback/racas/Humano.kt
@@ -1,7 +1,8 @@
package racas
+
import up.dndback.Personagem
-class Humano : racas.iRacas {
+class Humano : iRacas {
override val nome = "Humano"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/MeioElfo.kt b/dndback/src/main/java/up/dndback/racas/MeioElfo.kt
index 075745d..c7556bc 100644
--- a/dndback/src/main/java/up/dndback/racas/MeioElfo.kt
+++ b/dndback/src/main/java/up/dndback/racas/MeioElfo.kt
@@ -1,8 +1,9 @@
package racas
+
import up.dndback.Personagem
-class MeioElfo : racas.iRacas {
+class MeioElfo : iRacas {
override val nome = "Meio-Elfo"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/MeioOrc.kt b/dndback/src/main/java/up/dndback/racas/MeioOrc.kt
index a0f1354..6ec7189 100644
--- a/dndback/src/main/java/up/dndback/racas/MeioOrc.kt
+++ b/dndback/src/main/java/up/dndback/racas/MeioOrc.kt
@@ -1,8 +1,9 @@
package racas
+
import up.dndback.Personagem
-class MeioOrc : racas.iRacas {
+class MeioOrc : iRacas {
override val nome = "Meio-Orc"
override fun aplicarBonus(personagem: Personagem) {
diff --git a/dndback/src/main/java/up/dndback/racas/Tiefling.kt b/dndback/src/main/java/up/dndback/racas/Tiefling.kt
index 1e28ccc..c6e2567 100644
--- a/dndback/src/main/java/up/dndback/racas/Tiefling.kt
+++ b/dndback/src/main/java/up/dndback/racas/Tiefling.kt
@@ -1,8 +1,9 @@
package racas
+
import up.dndback.Personagem
-class Tiefling : racas.iRacas {
+class Tiefling : iRacas {
override val nome = "Tiefling"
override fun aplicarBonus(personagem: Personagem) {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment