first commit

main
Fábio Oliveira Ceia 2025-11-06 16:22:13 +00:00
commit 80a4a23786
109 changed files with 2615 additions and 0 deletions

15
.gitignore vendored Normal file
View File

@ -0,0 +1,15 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties

3
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

1
.idea/.name Normal file
View File

@ -0,0 +1 @@
tcg

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidProjectSystem">
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
</component>
</project>

6
.idea/compiler.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="21" />
</component>
</project>

View File

@ -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>

13
.idea/deviceManager.xml Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DeviceTable">
<option name="columnSorters">
<list>
<ColumnSorterState>
<option name="column" value="Name" />
<option name="order" value="ASCENDING" />
</ColumnSorterState>
</list>
</option>
</component>
</project>

18
.idea/gradle.xml Normal file
View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

10
.idea/migrations.xml Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectMigrations">
<option name="MigrateToGradleLocalJavaHome">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</component>
</project>

10
.idea/misc.xml Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

1
app/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

44
app/build.gradle.kts Normal file
View File

@ -0,0 +1,44 @@
plugins {
alias(libs.plugins.android.application)
}
android {
namespace = "com.example.tcg"
compileSdk {
version = release(36)
}
defaultConfig {
applicationId = "com.example.tcg"
minSdk = 24
targetSdk = 36
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
}
dependencies {
implementation(libs.appcompat)
implementation(libs.material)
implementation(libs.activity)
implementation(libs.constraintlayout)
testImplementation(libs.junit)
androidTestImplementation(libs.ext.junit)
androidTestImplementation(libs.espresso.core)
}

21
app/proguard-rules.pro vendored Normal file
View File

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@ -0,0 +1,26 @@
package com.example.tcg;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.example.tcg", appContext.getPackageName());
}
}

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" >
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Tcg" >
<activity
android:name=".MainActivity"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".PacotesActivity" />
<activity android:name=".ColecaoActivity" />
<activity android:name=".LojaActivity" />
</application>
</manifest>

View File

@ -0,0 +1,45 @@
package com.example.tcg;
public class Carta {
private int id;
private String nome;
private String raridade;
private String imagem;
public Carta(String nome, String raridade, String imagem) {
this.nome = nome;
this.raridade = raridade;
this.imagem = imagem;
}
public Carta(int id, String nome, String raridade, String imagem) {
this.id = id;
this.nome = nome;
this.raridade = raridade;
this.imagem = imagem;
}
// Getters e Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public String getRaridade() {
return raridade;
}
public String getImagem() {
return imagem;
}
}

View File

@ -0,0 +1,21 @@
package com.example.tcg;
public class CartaComProbabilidade {
private Carta carta;
private double probabilidade;
public CartaComProbabilidade(Carta carta, double probabilidade) {
this.carta = carta;
this.probabilidade = probabilidade;
}
public Carta getCarta() {
return carta;
}
public double getProbabilidade() {
return probabilidade;
}
}

View File

@ -0,0 +1,291 @@
package com.example.tcg;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.tcg.adapters.CartaAdapter;
import com.example.tcg.db.DbHelper;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ColecaoActivity extends AppCompatActivity {
private GridView gridView;
private CartaAdapter adapter;
private ArrayList<Carta> listaCartas;
private FloatingActionButton voltarBtn;
private TextView textoOuro;
private JogadorManager jogador;
private Spinner filtroSpinner;
private Button lojaBtn;
private Button venderTodasBtn;
private String raridadeSelecionada = "Todas";
private final String[] raridades = {"Todas", "Comum", "Incomum", "Rara", "Épica", "Lendária", "Especial"};
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_colecao);
gridView = findViewById(R.id.gridCartas);
voltarBtn = findViewById(R.id.voltarBtn);
textoOuro = findViewById(R.id.textoOuro);
filtroSpinner = findViewById(R.id.spinnerFiltro);
lojaBtn = findViewById(R.id.botaoLoja);
venderTodasBtn = findViewById(R.id.botaoVenderTodas);
jogador = new JogadorManager(this);
configurarFiltro();
carregarCartas();
atualizarOuro();
voltarBtn.setOnClickListener(v -> {
startActivity(new Intent(ColecaoActivity.this, MainActivity.class));
finish();
});
lojaBtn.setOnClickListener(v -> startActivity(new Intent(ColecaoActivity.this, LojaActivity.class)));
// O botão agora abre o novo diálogo com "Todas" incluída
venderTodasBtn.setOnClickListener(v -> abrirDialogSelecaoRaridades());
}
private void abrirDialogSelecaoRaridades() {
boolean[] selecionadas = new boolean[raridades.length];
new AlertDialog.Builder(this)
.setTitle("Seleciona as raridades a vender:")
.setMultiChoiceItems(raridades, selecionadas, (dialog, which, isChecked) -> {
// Se o jogador marcar "Todas", desmarca as outras
if (which == 0 && isChecked) {
for (int i = 1; i < selecionadas.length; i++) {
selecionadas[i] = false;
((AlertDialog) dialog).getListView().setItemChecked(i, false);
}
} else if (which > 0 && isChecked) {
// Se marcar uma específica, desmarca "Todas"
selecionadas[0] = false;
((AlertDialog) dialog).getListView().setItemChecked(0, false);
}
selecionadas[which] = isChecked;
})
.setPositiveButton("Vender", (dialog, which) -> {
List<String> raridadesEscolhidas = new ArrayList<>();
for (int i = 0; i < raridades.length; i++) {
if (selecionadas[i]) {
raridadesEscolhidas.add(raridades[i]);
}
}
if (raridadesEscolhidas.isEmpty()) {
Toast.makeText(this, "Seleciona pelo menos uma raridade.", Toast.LENGTH_SHORT).show();
return;
}
// Se "Todas" for escolhida, ignora as outras e vende tudo
if (raridadesEscolhidas.contains("Todas")) {
confirmarVendaTodas();
} else {
confirmarVendaVariasRaridades(raridadesEscolhidas);
}
})
.setNegativeButton("Cancelar", null)
.show();
}
private void confirmarVendaTodas() {
new AlertDialog.Builder(this)
.setTitle("Confirmar venda")
.setMessage("Tens a certeza que queres vender TODAS as tuas cartas?")
.setPositiveButton("Sim", (dialog, which) -> venderTodas())
.setNegativeButton("Cancelar", null)
.show();
}
private void confirmarVendaVariasRaridades(List<String> raridadesEscolhidas) {
new AlertDialog.Builder(this)
.setTitle("Confirmar venda")
.setMessage("Vender todas as cartas das raridades: " +
String.join(", ", raridadesEscolhidas) + "?")
.setPositiveButton("Sim", (dialog, which) -> venderVariasRaridades(raridadesEscolhidas))
.setNegativeButton("Cancelar", null)
.show();
}
private void venderTodas() {
int totalGanho = 0;
DbHelper dbHelper = new DbHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
for (Carta carta : new ArrayList<>(listaCartas)) {
totalGanho += calcularValorPorRaridade(carta.getRaridade());
db.delete("colecao", "id=?", new String[]{String.valueOf(carta.getId())});
}
listaCartas.clear();
db.close();
jogador.adicionarOuro(totalGanho);
adapter.notifyDataSetChanged();
atualizarOuro();
Toast.makeText(this, "Vendeste TODAS as cartas! +" +
JogadorManager.formatarOuro(totalGanho) + " ouro ganho!", Toast.LENGTH_LONG).show();
}
private void venderVariasRaridades(List<String> raridadesEscolhidas) {
int totalGanho = 0;
DbHelper dbHelper = new DbHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
Iterator<Carta> iterator = listaCartas.iterator();
while (iterator.hasNext()) {
Carta carta = iterator.next();
if (raridadesEscolhidas.contains(carta.getRaridade())) {
totalGanho += calcularValorPorRaridade(carta.getRaridade());
db.delete("colecao", "id=?", new String[]{String.valueOf(carta.getId())});
iterator.remove();
}
}
db.close();
jogador.adicionarOuro(totalGanho);
adapter.notifyDataSetChanged();
atualizarOuro();
Toast.makeText(this, "Vendeste cartas (" + JogadorManager.formatarOuro(totalGanho) +
" ouro ganho)", Toast.LENGTH_LONG).show();
}
private void atualizarOuro() {
textoOuro.setText("Ouro: " + JogadorManager.formatarOuro(jogador.getOuro()));
}
private void carregarCartas() {
listaCartas = new ArrayList<>();
DbHelper dbHelper = new DbHelper(this);
SQLiteDatabase db = dbHelper.getReadableDatabase();
String query = "SELECT id, nome, raridade, imagem FROM colecao";
if (!raridadeSelecionada.equals("Todas")) {
query += " WHERE raridade='" + raridadeSelecionada + "'";
}
Cursor cursor = db.rawQuery(query, null);
if (cursor.moveToFirst()) {
do {
Carta carta = new Carta(
cursor.getInt(0),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3)
);
listaCartas.add(carta);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
adapter = new CartaAdapter(this, listaCartas, this::confirmarVendaCarta);
gridView.setAdapter(adapter);
}
private void confirmarVendaCarta(Carta carta) {
if (carta.getRaridade().equals("Épica") ||
carta.getRaridade().equals("Lendária") ||
carta.getRaridade().equals("Especial")) {
new AlertDialog.Builder(this)
.setTitle("Confirmar venda")
.setMessage("Tens a certeza que queres vender a carta " +
carta.getNome() + " (" + carta.getRaridade() + ")?")
.setPositiveButton("Sim", (dialog, which) -> venderCarta(carta))
.setNegativeButton("Cancelar", null)
.show();
} else {
venderCarta(carta);
}
}
private void venderCarta(Carta carta) {
int valorVenda = calcularValorPorRaridade(carta.getRaridade());
jogador.adicionarOuro(valorVenda);
DbHelper dbHelper = new DbHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("colecao", "id=?", new String[]{String.valueOf(carta.getId())});
db.close();
listaCartas.remove(carta);
adapter.notifyDataSetChanged();
atualizarOuro();
Toast.makeText(this, "Carta vendida com sucesso!", Toast.LENGTH_SHORT).show();
}
private int calcularValorPorRaridade(String raridade) {
switch (raridade) {
case "Comum": return 10;
case "Incomum": return 25;
case "Rara": return 50;
case "Épica": return 100;
case "Lendária": return 200;
case "Especial": return 500;
default: return 0;
}
}
private void configurarFiltro() {
String[] opcoes = {"Todas", "Comum", "Incomum", "Rara", "Épica", "Lendária", "Especial"};
ArrayAdapter<String> adapterFiltro = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, opcoes);
filtroSpinner.setAdapter(adapterFiltro);
filtroSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
raridadeSelecionada = opcoes[position];
carregarCartas();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
});
}
}

View File

@ -0,0 +1,87 @@
package com.example.tcg;
import android.content.Context;
import android.content.SharedPreferences;
public class JogadorManager {
private static final String PREFS_NAME = "jogador_prefs";
private static final String KEY_OURO = "ouro";
private static final String KEY_LIMITE_CARTAS = "limite_cartas";
private static final String KEY_MULTIPLICADOR_SORTE = "multiplicador_sorte";
private static final String CHAVE_PRECO_LIMITE = "preco_limite";
private static final String CHAVE_PRECO_SORTE = "preco_sorte";
private final SharedPreferences prefs;
public JogadorManager(Context context) {
prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
}
// ========= OURO =========
public int getOuro() {
return prefs.getInt(KEY_OURO, 100);
}
public void adicionarOuro(int valor) {
prefs.edit().putInt(KEY_OURO, getOuro() + valor).apply();
}
public void removerOuro(int valor) {
prefs.edit().putInt(KEY_OURO, Math.max(0, getOuro() - valor)).apply();
}
// ========= LIMITE DE CARTAS =========
public int getLimiteCartas() {
return prefs.getInt(KEY_LIMITE_CARTAS, 5);
}
public void aumentarLimiteCartas() {
prefs.edit().putInt(KEY_LIMITE_CARTAS, getLimiteCartas() + 1).apply();
}
// ========= MULTIPLICADOR DE SORTE =========
public int getMultiplicadorSorte() {
return prefs.getInt(KEY_MULTIPLICADOR_SORTE, 1);
}
public void aumentarMultiplicadorSorte() {
int atual = getMultiplicadorSorte();
if (atual < 3) {
prefs.edit().putInt(KEY_MULTIPLICADOR_SORTE, atual + 1).apply();
}
}
// ========= PREÇOS DA LOJA =========
public int getPrecoLimite() {
return prefs.getInt(CHAVE_PRECO_LIMITE, 100);
}
public void salvarPrecoLimite(int preco) {
prefs.edit().putInt(CHAVE_PRECO_LIMITE, preco).apply();
}
public int getPrecoSorte() {
return prefs.getInt(CHAVE_PRECO_SORTE, 200);
}
public void salvarPrecoSorte(int preco) {
prefs.edit().putInt(CHAVE_PRECO_SORTE, preco).apply();
}
// ========= FORMATAÇÃO =========
public static String formatarOuro(int valor) {
if (valor >= 1_000_000_000)
return String.format("%.1fB", valor / 1_000_000_000.0);
else if (valor >= 1_000_000)
return String.format("%.1fM", valor / 1_000_000.0);
else if (valor >= 1_000)
return String.format("%.1fK", valor / 1_000.0);
else
return String.valueOf(valor);
}
}

View File

@ -0,0 +1,98 @@
package com.example.tcg;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class LojaActivity extends AppCompatActivity {
private TextView ouroText, limiteText, sorteText;
private Button comprarLimiteBtn, comprarSorteBtn, voltarBtn;
private int precoLimite;
private int precoSorte;
private JogadorManager jogador;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loja);
jogador = new JogadorManager(this);
ouroText = findViewById(R.id.ouroText);
limiteText = findViewById(R.id.limiteText);
sorteText = findViewById(R.id.sorteText);
comprarLimiteBtn = findViewById(R.id.comprarLimiteBtn);
comprarSorteBtn = findViewById(R.id.comprarSorteBtn);
voltarBtn = findViewById(R.id.voltarBtn);
// Recupera preços salvos
precoLimite = jogador.getPrecoLimite();
precoSorte = jogador.getPrecoSorte();
atualizarUI();
comprarLimiteBtn.setOnClickListener(v -> comprarLimite());
comprarSorteBtn.setOnClickListener(v -> comprarSorte());
voltarBtn.setOnClickListener(v -> {
startActivity(new Intent(LojaActivity.this, ColecaoActivity.class));
finish();
});
}
private void atualizarUI() {
ouroText.setText("Ouro: " + JogadorManager.formatarOuro(jogador.getOuro()));
limiteText.setText("Limite de cartas: " + jogador.getLimiteCartas());
sorteText.setText("Multiplicador de sorte: x" + jogador.getMultiplicadorSorte());
comprarLimiteBtn.setText("Aumentar limite (" + precoLimite + " ouro)");
if (jogador.getMultiplicadorSorte() >= 3) {
comprarSorteBtn.setEnabled(false);
comprarSorteBtn.setText("A tua sorte já está no nível máximo!");
} else {
comprarSorteBtn.setEnabled(true);
comprarSorteBtn.setText("Aumentar sorte (" + precoSorte + " ouro)");
}
}
private void comprarLimite() {
if (jogador.getOuro() >= precoLimite) {
jogador.removerOuro(precoLimite);
jogador.aumentarLimiteCartas();
precoLimite += 100;
jogador.salvarPrecoLimite(precoLimite);
Toast.makeText(this, "Limite aumentado!", Toast.LENGTH_SHORT).show();
atualizarUI();
} else {
Toast.makeText(this, "Ouro insuficiente!", Toast.LENGTH_SHORT).show();
}
}
private void comprarSorte() {
if (jogador.getMultiplicadorSorte() >= 3) {
Toast.makeText(this, "Sorte já no máximo!", Toast.LENGTH_SHORT).show();
atualizarUI();
return;
}
if (jogador.getOuro() >= precoSorte) {
jogador.removerOuro(precoSorte);
jogador.aumentarMultiplicadorSorte();
precoSorte += 200;
jogador.salvarPrecoSorte(precoSorte);
Toast.makeText(this, "Multiplicador aumentado!", Toast.LENGTH_SHORT).show();
atualizarUI();
} else {
Toast.makeText(this, "Ouro insuficiente!", Toast.LENGTH_SHORT).show();
}
}
}

View File

@ -0,0 +1,52 @@
package com.example.tcg;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.activity.OnBackPressedCallback;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
Button abrirPacotesButton, colecaoButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
// Modo "FullScreen"
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
colecaoButton = findViewById(R.id.colecaoButton);
abrirPacotesButton = findViewById(R.id.abrirPacotesButton);
abrirPacotesButton.setOnClickListener(v -> {
Intent intent = new Intent(MainActivity.this, PacotesActivity.class);
startActivity(intent);
});
colecaoButton.setOnClickListener(v -> {
Intent intent = new Intent(MainActivity.this, ColecaoActivity.class);
startActivity(intent);
});
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
// Minimiza a app
moveTaskToBack(true);
overridePendingTransition(0, 0);
}
});
}
}

View File

@ -0,0 +1,273 @@
package com.example.tcg;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.tcg.db.DbHelper;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.ArrayList;
import java.util.List;
public class PacotesActivity extends AppCompatActivity {
private FloatingActionButton voltarFloatingActionButton;
private Button botaoAbrirPacote;
private ImageView imagemPacote;
private TextView textoInventario;
private boolean pacoteAberto = false;
private List<CartaComProbabilidade> cartasDisponiveis;
private JogadorManager jogador;
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pacotes);
voltarFloatingActionButton = findViewById(R.id.voltarFloatingActionButton);
botaoAbrirPacote = findViewById(R.id.botaoAbrirPacote);
imagemPacote = findViewById(R.id.imagemPacote);
textoInventario = findViewById(R.id.textoInventario);
jogador = new JogadorManager(this);
atualizarInventario();
inicializarCartas();
voltarFloatingActionButton.setOnClickListener(v -> {
Intent intent = new Intent(PacotesActivity.this, MainActivity.class);
startActivity(intent);
finish();
});
botaoAbrirPacote.setOnClickListener(v -> abrirPacote());
}
//Se quisermos inserir alguma carta nova é só colcoar aqui
private void inicializarCartas() {
cartasDisponiveis = new ArrayList<>();
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Catch'em All!", "Comum", "peaceful_morning"), 0.4));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Evolve", "Comum", "eevelutions"), 0.4));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Give It Your All", "Comum", "boyfriend"), 0.4));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Surgeon of Death", "Incomum", "surgeon"), 0.30));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Bites the Dust", "Incomum", "killerqueen"), 0.30));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Altruist Heart", "Incomum", "tanjiro"), 0.30));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("The Fastest Blue", "Rara", "sonicrevamp"), 0.20));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Ferrous Faker", "Rara", "fake"), 0.20));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Drums Of Liberation", "Épica", "luffy"), 0.10));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Aura Farmer", "Épica", "piccolo"), 0.10));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("The Crew", "Lendária", "thecrew"), 0.05));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Another Tale For the Next Dreamer", "Lendária", "lucydavid"), 0.05));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Bravery", "Especial", "bravery"), 0.005));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Kindness", "Especial", "kindness"), 0.005));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Integrity", "Especial", "integrity"), 0.005));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Perseverance", "Especial", "perseverance"), 0.005));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Determination", "Especial", "determination"), 0.005));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Patience", "Especial", "patience"), 0.005));
cartasDisponiveis.add(new CartaComProbabilidade(new Carta("Justice", "Especial", "justice"), 0.005));
}
//Tudo aquilo que acontece quando clicamos pra abrir pacote
private void abrirPacote() {
if (pacoteAberto) return;
int totalCartas = contarCartasNaColecao();
int limite = jogador.getLimiteCartas();
if (totalCartas >= limite) {
Toast.makeText(this, "⚠ Inventário cheio! Venda cartas ou aumente o limite na loja.", Toast.LENGTH_LONG).show();
return;
}
pacoteAberto = true;
botaoAbrirPacote.setEnabled(false);
Carta cartaEscolhida = escolherCartaPorRaridade();
guardarCartaNaColecao(cartaEscolhida.getNome(), cartaEscolhida.getRaridade(), cartaEscolhida.getImagem());
mostrarCartaGanha(cartaEscolhida);
botaoAbrirPacote.setText("Abrir outro pacote");
botaoAbrirPacote.setEnabled(true);
pacoteAberto = false;
atualizarInventario();
}
private Carta escolherCartaPorRaridade() {
double random = Math.random();
double acumulado = 0.0;
int multiplicador = jogador.getMultiplicadorSorte();
List<Double> probAjustada = new ArrayList<>();
double soma = 0;
for (CartaComProbabilidade cartaProb : cartasDisponiveis) {
double chance = cartaProb.getProbabilidade();
if (cartaProb.getCarta().getRaridade().equals("Épica") ||
cartaProb.getCarta().getRaridade().equals("Lendária")) {
chance *= multiplicador;
}
probAjustada.add(chance);
soma += chance;
}
for (int i = 0; i < probAjustada.size(); i++) {
probAjustada.set(i, probAjustada.get(i) / soma);
}
for (int i = 0; i < cartasDisponiveis.size(); i++) {
acumulado += probAjustada.get(i);
if (random <= acumulado) {
return cartasDisponiveis.get(i).getCarta();
}
}
return cartasDisponiveis.get(cartasDisponiveis.size() - 1).getCarta();
}
private void guardarCartaNaColecao(String nome, String raridade, String imagem) {
DbHelper dbHelper = new DbHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("nome", nome);
values.put("raridade", raridade);
values.put("imagem", imagem);
db.insert("colecao", null, values);
db.close();
}
private int contarCartasNaColecao() {
DbHelper dbHelper = new DbHelper(this);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM colecao", null);
int count = 0;
if (cursor.moveToFirst()) count = cursor.getInt(0);
cursor.close();
db.close();
return count;
}
private void atualizarInventario() {
DbHelper dbHelper = new DbHelper(this);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM colecao", null);
int totalCartas = 0;
if (cursor.moveToFirst()) totalCartas = cursor.getInt(0);
cursor.close();
db.close();
int limite = jogador.getLimiteCartas();
textoInventario.setText("Inventário: " + totalCartas + " / " + limite);
if (totalCartas >= limite) {
textoInventario.setTextColor(getResources().getColor(android.R.color.holo_red_dark));
textoInventario.setText("Inventário Cheio!");
} else {
textoInventario.setTextColor(getResources().getColor(android.R.color.black));
}
}
private void mostrarCartaGanha(Carta carta) {
// Mostra a carta depois de abrir pacote
FrameLayout container = findViewById(R.id.containerCartaObtida);
container.setVisibility(View.VISIBLE);
container.removeAllViews();
// Infla o layout da carta
View view = getLayoutInflater().inflate(R.layout.item_carta_ganha, container, false);
ImageView imagemCarta = view.findViewById(R.id.imagemCarta);
TextView textoNome = view.findViewById(R.id.textoNomeCarta);
TextView textoRaridade = view.findViewById(R.id.textoRaridade);
View cartaLayout = view.findViewById(R.id.cartaLayout);
// Define texto e imagem
textoNome.setText(carta.getNome());
textoRaridade.setText(carta.getRaridade());
int resId = getResources().getIdentifier(carta.getImagem(), "drawable", getPackageName());
imagemCarta.setImageResource(resId);
// Ajusta proporções da imagem
imagemCarta.setAdjustViewBounds(true);
imagemCarta.setScaleType(ImageView.ScaleType.FIT_CENTER);
// Aplica borda conforme raridade
switch (carta.getRaridade()) {
case "Comum":
cartaLayout.setBackgroundResource(R.drawable.borda_comum);
textoRaridade.setTextColor(Color.parseColor("#607D8B"));
break;
case "Incomum":
cartaLayout.setBackgroundResource(R.drawable.borda_incomum);
textoRaridade.setTextColor(Color.parseColor("#4CAF50"));
break;
case "Rara":
cartaLayout.setBackgroundResource(R.drawable.borda_rara);
textoRaridade.setTextColor(Color.parseColor("#7E57C2"));
break;
case "Épica":
cartaLayout.setBackgroundResource(R.drawable.borda_epica);
textoRaridade.setTextColor(Color.parseColor("#6A1B9A"));
break;
case "Lendária":
cartaLayout.setBackgroundResource(R.drawable.borda_lendaria);
textoRaridade.setTextColor(Color.parseColor("#FFD600"));
break;
case "Especial":
cartaLayout.setBackgroundResource(R.drawable.borda_especial);
textoRaridade.setTextColor(Color.parseColor("#ef736c"));
break;
}
// Animação (XML + interpolação)
Animation anim = AnimationUtils.loadAnimation(this, R.anim.reveal_card);
view.startAnimation(anim);
if (carta.getRaridade().equals("Lendária") || carta.getRaridade().equals("Especial")) {
view.setElevation(20f); // brilho leve da sombra
view.animate().rotationYBy(15).setDuration(300).withEndAction(() ->
view.animate().rotationY(0).setDuration(300)
).start();
}
// Adiciona a carta ao container
container.addView(view);
}
}

View File

@ -0,0 +1,207 @@
package com.example.tcg.adapters;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.tcg.Carta;
import com.example.tcg.R;
import java.util.ArrayList;
import java.util.function.Consumer;
// Adaptador responsável por exibir uma lista de cartas em um ListView ou GridView
public class CartaAdapter extends BaseAdapter {
private Context context; //contexto da activity onde a carta é usado
private ArrayList<Carta> cartas; //listas de cartas a serem vendidas
private Consumer<Carta> onVenderClick; //função a ser chamada quando clickado para vender
// Construtor do adaptador
public CartaAdapter(Context context, ArrayList<Carta> cartas, Consumer<Carta> onVenderClick) {
this.context = context;
this.cartas = cartas;
this.onVenderClick = onVenderClick;
}
@Override
public int getCount() {
return cartas.size();
}
@Override
public Object getItem(int position) {
return cartas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Carta carta = cartas.get(position);
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_carta, parent, false);
}
ImageView imagemCarta = convertView.findViewById(R.id.imagemCarta);
TextView textoNome = convertView.findViewById(R.id.textoNomeCarta);
TextView textoRaridade = convertView.findViewById(R.id.textoRaridade);
Button botaoVender = convertView.findViewById(R.id.botaoVender);
View cartaLayout = convertView.findViewById(R.id.cartaLayout);
// Define nome e raridade
textoNome.setText(carta.getNome());
textoRaridade.setText(carta.getRaridade());
// Define imagem
int resId = context.getResources().getIdentifier(carta.getImagem(), "drawable", context.getPackageName());
imagemCarta.setImageResource(resId);
// Mostrar o valor no botão
int valor = getValorCarta(carta.getRaridade());
botaoVender.setText("Vender (" + valor + " ouro)");
// Define a cor/borda conforme raridade
switch (carta.getRaridade()) {
case "Comum":
textoRaridade.setTextColor(Color.parseColor("#607D8B")); // cinza azulado
cartaLayout.setBackgroundResource(R.drawable.borda_comum);
break;
case "Incomum":
textoRaridade.setTextColor(Color.parseColor("#4CAF50")); // verde elegante
cartaLayout.setBackgroundResource(R.drawable.borda_incomum);
break;
case "Rara":
textoRaridade.setTextColor(Color.parseColor("#7E57C2")); // roxo
cartaLayout.setBackgroundResource(R.drawable.borda_rara);
break;
case "Épica":
cartaLayout.setBackgroundResource(R.drawable.borda_epica);
textoRaridade.setTextColor(0xFF6A1B9A); // roxo vibrante
break;
case "Lendária":
cartaLayout.setBackgroundResource(R.drawable.borda_lendaria);
textoRaridade.setTextColor(0xFFFFD600); // dourado
break;
case "Especial":
cartaLayout.setBackgroundResource(R.drawable.borda_especial);
textoRaridade.setTextColor(0xFFFF7D7D); // vermelho
break;
}
// Clique com animação
botaoVender.setOnClickListener(v -> {
animarVenda(cartaLayout, () -> {
onVenderClick.accept(carta);
Toast.makeText(context, "Carta vendida!", Toast.LENGTH_SHORT).show();
});
});
imagemCarta.setOnClickListener(v -> mostrarCartaAmpliada(carta));
return convertView;
}
// Retorna o valor da carta conforme raridade
private int getValorCarta(String raridade) {
switch (raridade) {
case "Comum": return 10;
case "Incomum": return 25;
case "Rara": return 50;
case "Épica": return 100;
case "Lendária": return 200;
case "Especial": return 500;
default: return 0;
}
}
// Pequena animação ao vender (fade + scale)
private void animarVenda(View view, Runnable onComplete) {
view.animate()
.alpha(0f)
.scaleX(0.85f)
.scaleY(0.85f)
.setDuration(300)
.withEndAction(() -> {
view.setAlpha(1f);
view.setScaleX(1f);
view.setScaleY(1f);
onComplete.run();
})
.start();
}
private void mostrarCartaAmpliada(Carta carta) {
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(context);
View dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_carta_ampliada, null);
ImageView imagemAmpliada = dialogView.findViewById(R.id.imagemCartaAmpliada);
TextView nomeAmpliado = dialogView.findViewById(R.id.nomeCartaAmpliada);
TextView raridadeAmpliada = dialogView.findViewById(R.id.raridadeCartaAmpliada);
View cartaLayout = dialogView.findViewById(R.id.cartaLayoutAmpliada); // container para a borda
nomeAmpliado.setText(carta.getNome());
raridadeAmpliada.setText(carta.getRaridade());
int resId = context.getResources().getIdentifier(carta.getImagem(), "drawable", context.getPackageName());
if (resId != 0) {
imagemAmpliada.setImageResource(resId);
}
// Define a borda conforme raridade (mesmo estilo da PacotesActivity)
switch (carta.getRaridade()) {
case "Comum":
cartaLayout.setBackgroundResource(R.drawable.borda_comum);
raridadeAmpliada.setTextColor(Color.parseColor("#607D8B"));
break;
case "Incomum":
cartaLayout.setBackgroundResource(R.drawable.borda_incomum);
raridadeAmpliada.setTextColor(Color.parseColor("#4CAF50"));
break;
case "Rara":
cartaLayout.setBackgroundResource(R.drawable.borda_rara);
raridadeAmpliada.setTextColor(Color.parseColor("#7E57C2"));
break;
case "Épica":
cartaLayout.setBackgroundResource(R.drawable.borda_epica);
raridadeAmpliada.setTextColor(Color.parseColor("#6A1B9A"));
break;
case "Lendária":
cartaLayout.setBackgroundResource(R.drawable.borda_lendaria);
raridadeAmpliada.setTextColor(Color.parseColor("#FFD600"));
break;
case "Especial":
cartaLayout.setBackgroundResource(R.drawable.borda_especial);
raridadeAmpliada.setTextColor(Color.parseColor("#ef736c"));
break;
}
builder.setView(dialogView);
android.app.AlertDialog dialog = builder.create();
// Fundo transparente e animação de entrada
if (dialog.getWindow() != null) {
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.getWindow().getAttributes().windowAnimations = android.R.style.Animation_Dialog;
}
dialog.show();
}
}

View File

@ -0,0 +1,41 @@
package com.example.tcg.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DbHelper extends SQLiteOpenHelper {
public static final int DATABASE_VERSION = 3; // incrementar no número da versão sempre que algo trocar aqui para resetar a anterior e comerçar com a versão nova
public static final String DATABASE_NAME = "TCG.db";
public static final String TABLE_COLECAO = "colecao";
public static final String COLUMN_ID = "id";
public static final String COLUMN_NOME = "nome";
public static final String COLUMN_RARIDADE = "raridade";
private static final String SQL_CREATE_COLECAO =
"CREATE TABLE " + TABLE_COLECAO + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
COLUMN_NOME + " TEXT," +
COLUMN_RARIDADE + " TEXT," +
"imagem TEXT)";
private static final String SQL_DELETE_COLECAO =
"DROP TABLE IF EXISTS " + TABLE_COLECAO;
public DbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_COLECAO);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_COLECAO);
onCreate(db);
}
}

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator">
<scale
android:duration="400"
android:fromXScale="0.8"
android:toXScale="1.0"
android:fromYScale="0.8"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%" />
<alpha
android:duration="400"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator">
<scale
android:duration="400"
android:fromXScale="1.0"
android:toXScale="1.2"
android:fromYScale="1.0"
android:toYScale="1.2"
android:pivotX="50%"
android:pivotY="50%" />
<alpha
android:duration="400"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:interpolator/decelerate_quad"
android:fillAfter="true">
<scale
android:fromXScale="0.8"
android:toXScale="1.05"
android:fromYScale="0.8"
android:toYScale="1.05"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400" />
<alpha
android:fromAlpha="0"
android:toAlpha="1"
android:duration="500" />
<!-- Leve pulso final -->
<scale
android:fromXScale="1.05"
android:toXScale="1.0"
android:fromYScale="1.05"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="400"
android:duration="150" />
</set>

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -0,0 +1,11 @@
<!-- res/drawable/bg_card.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#33FFFFFF" /> <!-- 20% branco, translúcido -->
<corners android:radius="10dp" />
<stroke
android:width="2dp"
android:color="#55FFFFFF" /> <!-- leve borda branca translúcida -->
</shape>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#dadbec"/>
<stroke android:width="3dp" android:color="#b0b0b0"/>
<corners android:radius="10dp"/>
<padding android:left="6dp" android:top="6dp" android:right="6dp" android:bottom="6dp"/>
</shape>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#e5b2f5"/>
<stroke android:width="3dp" android:color="#c83ef4"/>
<corners android:radius="10dp"/>
<padding android:left="6dp" android:top="6dp" android:right="6dp" android:bottom="6dp"/>
</shape>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#c0024e"/>
<stroke android:width="3dp" android:color="#85001d"/>
<corners android:radius="10dp"/>
<padding android:left="6dp" android:top="6dp" android:right="6dp" android:bottom="6dp"/>
</shape>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#A8DCAB"/>
<stroke android:width="3dp" android:color="#008000"/>
<corners android:radius="10dp"/>
<padding android:left="6dp" android:top="6dp" android:right="6dp" android:bottom="6dp"/>
</shape>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#FFFDF0"/>
<stroke android:width="3dp" android:color="#FFD600"/>
<corners android:radius="10dp"/>
<padding android:left="6dp" android:top="6dp" android:right="6dp" android:bottom="6dp"/>
</shape>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#b5ebfc"/>
<stroke android:width="3dp" android:color="#5c64ff"/>
<corners android:radius="10dp"/>
<padding android:left="6dp" android:top="6dp" android:right="6dp" android:bottom="6dp"/>
</shape>

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

View File

@ -0,0 +1,170 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>

View File

@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 852 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="@drawable/backgroundcollection"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="12dp">
<!-- Linha superior: Ouro, Filtro e Loja -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:weightSum="3"
android:layout_marginBottom="8dp">
<TextView
android:id="@+id/textoOuro"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="💰Ouro: 0"
android:textSize="18sp"
android:textStyle="bold"/>
<Spinner
android:id="@+id/spinnerFiltro"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Button
android:id="@+id/botaoLoja"
android:layout_width="0dp"
android:foreground="@drawable/botaoshopnimage"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="."/>
</LinearLayout>
<!-- Botão de vender todas -->
<Button
android:id="@+id/botaoVenderTodas"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:foreground="@drawable/sellall"
android:text="."
android:layout_marginBottom="8dp"
android:layout_marginTop="4dp"/>
<!-- Grid de cartas -->
<GridView
android:id="@+id/gridCartas"
android:numColumns="2"
android:verticalSpacing="20dp"
android:horizontalSpacing="8dp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<!-- Botão de voltar -->
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/voltarBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:foreground="@drawable/backrevamp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:src="@android:drawable/ic_menu_revert"/>
</LinearLayout>

View File

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F5F5F5"
android:padding="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_vertical">
<!-- OURO ATUAL -->
<TextView
android:id="@+id/ouroText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ouro: 0"
android:textSize="22sp"
android:textStyle="bold"
android:textColor="#222"
android:layout_marginTop="8dp"
android:layout_marginBottom="24dp" />
<!-- CARD: LIMITE DE CARTAS -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_card"
android:elevation="4dp"
android:padding="20dp"
android:layout_marginBottom="16dp">
<TextView
android:id="@+id/limiteText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Limite de cartas: 5"
android:textSize="18sp"
android:textColor="#333"
android:layout_marginBottom="8dp" />
<Button
android:id="@+id/comprarLimiteBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Aumentar limite (100 ouro)"
android:backgroundTint="#4CAF50"
android:textColor="#FFFFFF"
android:layout_marginTop="4dp" />
</LinearLayout>
<!-- CARD: SORTE -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_card"
android:elevation="4dp"
android:padding="20dp"
android:layout_marginBottom="16dp">
<TextView
android:id="@+id/sorteText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Multiplicador de sorte: x1"
android:textSize="18sp"
android:textColor="#333"
android:layout_marginBottom="8dp" />
<Button
android:id="@+id/comprarSorteBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Aumentar sorte (200 ouro)"
android:backgroundTint="#3F51B5"
android:textColor="#FFFFFF" />
</LinearLayout>
<!-- VOLTAR -->
<Button
android:id="@+id/voltarBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Voltar"
android:backgroundTint="#FFC107"
android:textColor="#000000"
android:layout_marginTop="12dp"
android:layout_marginBottom="8dp"
android:elevation="2dp" />
</LinearLayout>
</ScrollView>

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main"
android:background="@drawable/backgroundrevamp"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/abrirPacotesButton"
android:layout_width="199dp"
android:layout_height="75dp"
android:foreground="@drawable/botaoplayimage"
android:text="."
app:layout_constraintBottom_toTopOf="@+id/colecaoButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.535"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.895" />
<Button
android:id="@+id/colecaoButton"
android:layout_width="199dp"
android:layout_height="75dp"
android:layout_marginBottom="180dp"
android:foreground="@drawable/botaocolectionimage"
android:text="."
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/abrirPacotesButton"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/abrirPacotesButton" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:background="@drawable/backgroundpackage">
<!-- Imagem do pacote -->
<ImageView
android:id="@+id/imagemPacote"
android:layout_width="250dp"
android:layout_height="350dp"
android:layout_centerInParent="true"
android:src="@drawable/pacoterevamp"
android:scaleType="fitCenter" />
<!-- Container para a carta obtida -->
<FrameLayout
android:id="@+id/containerCartaObtida"
android:layout_width="250dp"
android:layout_height="400dp"
android:layout_centerInParent="true"
android:visibility="gone"/>
<!-- Botão Abrir Pacote -->
<Button
android:id="@+id/botaoAbrirPacote"
android:layout_width="176dp"
android:layout_height="wrap_content"
android:layout_below="@id/imagemPacote"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:foreground="@drawable/botaoopenimage"
android:paddingHorizontal="20dp"
android:paddingVertical="10dp"
android:text="."
android:textSize="18sp" />
<!-- Texto de inventário -->
<TextView
android:id="@+id/textoInventario"
android:layout_width="128dp"
android:layout_height="wrap_content"
android:layout_above="@+id/imagemPacote"
android:layout_alignStart="@+id/imagemPacote"
android:layout_alignEnd="@+id/imagemPacote"
android:layout_gravity="center_horizontal"
android:layout_marginStart="61dp"
android:layout_marginEnd="61dp"
android:layout_marginBottom="32dp"
android:text="Inventário: 0 / 5"
android:textColor="#555"
android:textSize="16sp"
android:textStyle="bold" />
<!-- Botão flutuante voltar -->
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/voltarFloatingActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:foreground="@drawable/backrevamp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="23dp"
android:layout_marginBottom="26dp"
app:srcCompat="@drawable/voltar" />
</RelativeLayout>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cartaLayoutAmpliada"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="8dp"
android:background="@drawable/borda_comum"> <!-- borda padrão, muda dinamicamente -->
<LinearLayout
android:orientation="vertical"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:background="@drawable/bg_card">
<ImageView
android:id="@+id/imagemCartaAmpliada"
android:layout_width="300dp"
android:layout_height="430dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter" />
<TextView
android:id="@+id/nomeCartaAmpliada"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:textSize="20sp"
android:textStyle="bold"
android:layout_marginTop="12dp"
android:gravity="center" />
<TextView
android:id="@+id/raridadeCartaAmpliada"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_marginTop="4dp"
android:gravity="center" />
</LinearLayout>
</FrameLayout>

View File

@ -0,0 +1,66 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cartaLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:padding="8dp"
android:background="@drawable/bg_card"
android:layout_margin="6dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<ImageView
android:id="@+id/imagemCarta"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_margin="8dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
app:layout_constraintDimensionRatio="1.4"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.4"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/textoNomeCarta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="#000000"
android:textStyle="bold"
android:textSize="18sp"
android:paddingTop="6dp"
android:paddingBottom="2dp" />
<TextView
android:id="@+id/textoRaridade"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="16sp"
android:paddingBottom="8dp" />
<Button
android:id="@+id/botaoVender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Vender"
android:layout_marginTop="6dp" />
</LinearLayout>

View File

@ -0,0 +1,36 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cartaLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="8dp"
android:background="@drawable/bg_card"
android:layout_gravity="center">
<ImageView
android:id="@+id/imagemCarta"
android:layout_width="220dp"
android:layout_height="320dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:layout_gravity="center"/>
<TextView
android:id="@+id/textoNomeCarta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="#000000"
android:textStyle="bold"
android:textSize="16sp"
android:paddingTop="4dp"/>
<TextView
android:id="@+id/textoRaridade"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="14sp"
android:paddingBottom="4dp"/>
</LinearLayout>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 982 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@ -0,0 +1,7 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.Tcg" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your dark theme here. -->
<!-- <item name="colorPrimary">@color/my_dark_primary</item> -->
</style>
</resources>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
</resources>

View File

@ -0,0 +1,8 @@
<resources>
<string name="app_name">tcg</string>
<string name="tituloTextView">TITULO BUE FODA</string>
<string name="abrirPacotesButton">Abrir pacotes de cartas</string>
<string name="colecaoButton">Acessar coleção</string>
</resources>

View File

@ -0,0 +1,9 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.Tcg" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your light theme here. -->
<!-- <item name="colorPrimary">@color/my_light_primary</item> -->
</style>
<style name="Theme.Tcg" parent="Base.Theme.Tcg" />
</resources>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?><!--
Sample backup rules file; uncomment and customize as necessary.
See https://developer.android.com/guide/topics/data/autobackup
for details.
Note: This file is ignored for devices older than API 31
See https://developer.android.com/about/versions/12/backup-restore
-->
<full-backup-content>
<!--
<include domain="sharedpref" path="."/>
<exclude domain="sharedpref" path="device.xml"/>
-->
</full-backup-content>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?><!--
Sample data extraction rules file; uncomment and customize as necessary.
See https://developer.android.com/about/versions/12/backup-restore#xml-changes
for details.
-->
<data-extraction-rules>
<cloud-backup>
<!-- TODO: Use <include> and <exclude> to control what is backed up.
<include .../>
<exclude .../>
-->
</cloud-backup>
<!--
<device-transfer>
<include .../>
<exclude .../>
</device-transfer>
-->
</data-extraction-rules>

Some files were not shown because too many files have changed in this diff Show More