// MainActivity.kt
package com.example.pokemongsonbattle
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import com.example.pokemongsonbattle.databinding.ActivityMainBinding
import com.google.gson.Gson
import kotlin.random.Random
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var playerPokemon: Pokemon
private lateinit var enemyPokemon: Pokemon
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setupGame()
updateUI()
binding.buttonAttack.setOnClickListener {
performBattleRound()
updateUI()
checkGameOver()
}
binding.buttonNewGame.setOnClickListener {
setupGame()
updateUI()
binding.buttonAttack.visibility = View.VISIBLE
binding.textViewResult.text = ""
}
}
private fun setupGame() {
playerPokemon = Pokemon("Pikachu", 100, 20, 10)
enemyPokemon = Pokemon("Charmander", 100, 18, 8)
saveGameState()
}
private fun performBattleRound() {
// Player attacks enemy
val playerDamage = calculateDamage(playerPokemon.attack, enemyPokemon.defense)
enemyPokemon.hp -= playerDamage
// Enemy attacks player
if (enemyPokemon.hp > 0) {
val enemyDamage = calculateDamage(enemyPokemon.attack, playerPokemon.defense)
playerPokemon.hp -= enemyDamage
}
saveGameState()
}
private fun calculateDamage(attack: Int, defense: Int): Int {
return (attack * (100 - defense) / 100.0).toInt().coerceAtLeast(1)
}
private fun updateUI() {
binding.textViewPlayerHP.text = "Player HP: ${playerPokemon.hp}"
binding.textViewEnemyHP.text = "Enemy HP: ${enemyPokemon.hp}"
}
private fun checkGameOver() {
when {
playerPokemon.hp <= 0 -> endGame("You lost!")
enemyPokemon.hp <= 0 -> endGame("You won!")
}
}
private fun endGame(result: String) {
binding.textViewResult.text = result
binding.buttonAttack.visibility = View.GONE
}
private fun saveGameState() {
val sharedPref = getPreferences(Context.MODE_PRIVATE)
with(sharedPref.edit()) {
putString("playerPokemon", Gson().toJson(playerPokemon))
putString("enemyPokemon", Gson().toJson(enemyPokemon))
apply()
}
}
private fun loadGameState() {
val sharedPref = getPreferences(Context.MODE_PRIVATE)
val playerPokemonJson = sharedPref.getString("playerPokemon", null)
val enemyPokemonJson = sharedPref.getString("enemyPokemon", null)
if (playerPokemonJson != null && enemyPokemonJson != null) {
playerPokemon = Gson().fromJson(playerPokemonJson, Pokemon::class.java)
enemyPokemon = Gson().fromJson(enemyPokemonJson, Pokemon::class.java)
} else {
setupGame()
}
}
override fun onResume() {
super.onResume()
loadGameState()
updateUI()
checkGameOver()
}
}