From 519439785e809f19b2f8ea5ead357c5a2e2aa27e Mon Sep 17 00:00:00 2001 From: Lucas Delanier Date: Sat, 11 Mar 2023 23:03:15 +0100 Subject: [PATCH] custom xp reward following with boss and witch item is loot :fire: --- .../com/example/shakecraft/BossFragment.kt | 34 +++++----- .../com/example/shakecraft/CollectFragment.kt | 18 +++--- .../com/example/shakecraft/HomeFragment.kt | 32 +++++++--- .../java/com/example/shakecraft/data/Stub.kt | 12 ++-- .../java/com/example/shakecraft/model/Boss.kt | 7 ++- .../com/example/shakecraft/model/Generator.kt | 18 +++--- .../java/com/example/shakecraft/model/Item.kt | 2 +- .../com/example/shakecraft/model/Player.kt | 62 +++++++++++++++---- app/src/main/res/layout/fragment_home.xml | 30 +++++++-- 9 files changed, 139 insertions(+), 76 deletions(-) diff --git a/app/src/main/java/com/example/shakecraft/BossFragment.kt b/app/src/main/java/com/example/shakecraft/BossFragment.kt index e9a085c..3245ef0 100644 --- a/app/src/main/java/com/example/shakecraft/BossFragment.kt +++ b/app/src/main/java/com/example/shakecraft/BossFragment.kt @@ -1,6 +1,4 @@ package com.example.shakecraft - -import android.annotation.SuppressLint import android.content.Context import android.content.pm.ActivityInfo import android.hardware.Sensor @@ -17,10 +15,7 @@ import android.widget.ImageView import android.widget.ProgressBar import android.widget.TextView import androidx.navigation.fragment.findNavController -import com.example.shakecraft.data.Stub -import com.example.shakecraft.model.Boss import com.example.shakecraft.model.Generator -import com.example.shakecraft.model.Player import kotlin.math.pow import kotlin.math.sqrt @@ -45,9 +40,8 @@ class BossFragment() : Fragment() { savedInstanceState: Bundle? ): View? { - var player = (activity as MainActivity).currentPlayer + val player = (activity as MainActivity).currentPlayer - // Récupérez une référence à la ProgressBar dans la vue val view = inflater.inflate(R.layout.fragment_boss, container, false) val buttonCollect = view.findViewById(R.id.backbutton) buttonCollect.setOnClickListener{ @@ -59,9 +53,9 @@ class BossFragment() : Fragment() { image = view.findViewById(R.id.imageBoss) sensorManager = requireActivity().getSystemService(Context.SENSOR_SERVICE) as SensorManager accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) - var boss = Generator.generateBoss(); - progressBar.max = boss.maxlife; - progressBar.progress = boss.life; + var boss = Generator.generateBoss() + progressBar.max = boss.maxlife + progressBar.progress = boss.life image.setImageResource(boss.image) @@ -76,11 +70,12 @@ class BossFragment() : Fragment() { event!!.values[0].pow(2) + event.values[1].pow(2) + event.values[2].pow(2) ) if(boss.life <= 0){ - val item = Generator.generateLootBoss(boss.possibleLoot); - println(item); - player.addItem(item); - boss = Generator.generateBoss(); - println(boss); + val item = Generator.generateLootBoss(boss.possibleLoot) + println(item) + player.addItem(item) + player.gainXp(boss.xpReward) + boss = Generator.generateBoss() + println(boss) image.setImageResource(boss.image) val vibrator = context?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator vibrator.vibrate(100) @@ -91,14 +86,13 @@ class BossFragment() : Fragment() { } if (acceleration > 40) { - // Le téléphone a été secoué, mettre à jour la barre de chargement ici - boss.takeDamage((acceleration/80).toInt()); - progressBar.progress = boss.life; + boss.takeDamage((acceleration/80).toInt()) + progressBar.progress = boss.life } } } - // Enregistrez l'écouteur de capteur d'accéléromètre + sensorManager.registerListener( accelerometerEventListener, accelerometer, @@ -106,7 +100,7 @@ class BossFragment() : Fragment() { ) - // Retournez la vue de fragment + return view } override fun onActivityCreated(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/example/shakecraft/CollectFragment.kt b/app/src/main/java/com/example/shakecraft/CollectFragment.kt index 7fe7ab6..951cb10 100644 --- a/app/src/main/java/com/example/shakecraft/CollectFragment.kt +++ b/app/src/main/java/com/example/shakecraft/CollectFragment.kt @@ -16,11 +16,11 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.ProgressBar import android.widget.TextView -import androidx.constraintlayout.widget.ConstraintLayout + import androidx.navigation.fragment.findNavController -import com.example.shakecraft.data.Stub + import com.example.shakecraft.model.Generator -import com.example.shakecraft.model.Player + import kotlin.math.pow import kotlin.math.sqrt @@ -43,7 +43,7 @@ class CollectFragment() : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - var player = (activity as MainActivity).currentPlayer + val player = (activity as MainActivity).currentPlayer // Récupérez une référence à la ProgressBar dans la vue val view = inflater.inflate(R.layout.fragment_collect, container, false) @@ -69,11 +69,12 @@ class CollectFragment() : Fragment() { event!!.values[0].pow(2) + event.values[1].pow(2) + event.values[2].pow(2) ) if(progressBar.progress == 100){ - val item = Generator.generateLootCollection(); - println(item); + val item = Generator.generateLootCollection() + println(item) - player.addItem(item); - progressBar.progress = 0; + player.addItem(item) + player.gainXp(item.xpReward) + progressBar.progress = 0 val vibrator = context?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator vibrator.vibrate(100) @@ -87,6 +88,7 @@ class CollectFragment() : Fragment() { maVue.visibility = View.VISIBLE image.setImageResource(item.image) name.text = item.name + xp.text = item.xpReward.toString() maVue.postDelayed({ maVue.visibility = View.GONE diff --git a/app/src/main/java/com/example/shakecraft/HomeFragment.kt b/app/src/main/java/com/example/shakecraft/HomeFragment.kt index f8409a5..33b9978 100644 --- a/app/src/main/java/com/example/shakecraft/HomeFragment.kt +++ b/app/src/main/java/com/example/shakecraft/HomeFragment.kt @@ -5,20 +5,15 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Button + +import android.widget.ProgressBar +import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.navigation.fragment.findNavController -// TODO: Rename parameter arguments, choose names that match -// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER -private const val ARG_PARAM1 = "param1" -private const val ARG_PARAM2 = "param2" -/** - * A simple [Fragment] subclass. - * Use the [HomeFragment.newInstance] factory method to - * create an instance of this fragment. - */ + + class HomeFragment : Fragment() { @@ -31,6 +26,8 @@ class HomeFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { + val player = (activity as MainActivity).currentPlayer + val view = inflater.inflate(R.layout.fragment_home,container,false) val buttonCollect = view.findViewById(R.id.buttonCollect) buttonCollect.setOnClickListener{ @@ -40,6 +37,21 @@ class HomeFragment : Fragment() { buttonBoss.setOnClickListener{ findNavController().navigate(R.id.action_homeFragment_to_bossFragment) } + + val pseudo = view.findViewById(R.id.pseudoTextView) + val progressbar = view.findViewById(R.id.levelProgressBar) + val level = view.findViewById(R.id.levelTextView) + val rank = view.findViewById(R.id.rankTextView) + val maxXp = view.findViewById(R.id.maxXpTextView) + val xp = view.findViewById(R.id.xpTextView) + pseudo.text = player.pseudo + level.text = player.level.toString() + rank.text = player.rank + xp.text = player.xp.toString() + maxXp.text = (player.level*100).toString() + progressbar.progress = player.xp + progressbar.max = player.level*100 + return view } diff --git a/app/src/main/java/com/example/shakecraft/data/Stub.kt b/app/src/main/java/com/example/shakecraft/data/Stub.kt index c3de05e..c6dfaf4 100644 --- a/app/src/main/java/com/example/shakecraft/data/Stub.kt +++ b/app/src/main/java/com/example/shakecraft/data/Stub.kt @@ -9,14 +9,14 @@ class Stub { fun load() : List{ val items : MutableList = mutableListOf() - items.add(Item(name = "Beech Log", rarity = 0, stack = 1, R.drawable.ic_anvil)); - items.add(Item(name = "Bronze Ore", rarity = 0, stack = 1, R.drawable.ic_anvil)); - items.add(Item(name = "Iron Ore", rarity = 0, stack = 1, R.drawable.ic_anvil)); - items.add(Item(name = "Diamond", rarity = 0, stack = 1, R.drawable.ic_anvil)); - return items; + items.add(Item(name = "Beech Log", rarity = 1, stack = 1, R.drawable.ic_anvil, xpReward = 10 )) + items.add(Item(name = "Bronze Ore", rarity = 2, stack = 1, R.drawable.ic_anvil, xpReward = 20)) + items.add(Item(name = "Iron Ore", rarity = 3, stack = 1, R.drawable.ic_anvil, xpReward = 30)) + items.add(Item(name = "Diamond", rarity = 3, stack = 1, R.drawable.ic_anvil, xpReward = 30)) + return items } - var currentPlayer : Player = Player("Winker",0); + var currentPlayer : Player = Player("Winker",0) } \ No newline at end of file diff --git a/app/src/main/java/com/example/shakecraft/model/Boss.kt b/app/src/main/java/com/example/shakecraft/model/Boss.kt index c3088d4..147342b 100644 --- a/app/src/main/java/com/example/shakecraft/model/Boss.kt +++ b/app/src/main/java/com/example/shakecraft/model/Boss.kt @@ -7,11 +7,12 @@ class Boss ( var life: Int, var maxlife: Int, var image: Int, + var xpReward: Int, ){ val possibleLoot: List> = listOf( - Pair(Item(name = "Monster Bones", rarity = 0, stack = 1, R.drawable.monster_bones), 0.7), - Pair(Item(name = "Monster Eye", rarity = 0, stack = 1, R.drawable.monster_eyes), 0.25), - Pair(Item(name = "Treasure Key", rarity = 0, stack = 1, R.drawable.treasure_key), 0.05), + Pair(Item(name = "Monster Bones", rarity = 1, stack = 1, R.drawable.monster_bones, 10), 0.7), + Pair(Item(name = "Monster Eye", rarity = 2, stack = 1, R.drawable.monster_eyes, 20), 0.25), + Pair(Item(name = "Treasure Key", rarity = 5, stack = 1, R.drawable.treasure_key, 50), 0.05), ) fun takeDamage(strength: Int) { this.life -= strength diff --git a/app/src/main/java/com/example/shakecraft/model/Generator.kt b/app/src/main/java/com/example/shakecraft/model/Generator.kt index 99cb0c9..20442a3 100644 --- a/app/src/main/java/com/example/shakecraft/model/Generator.kt +++ b/app/src/main/java/com/example/shakecraft/model/Generator.kt @@ -8,10 +8,10 @@ class Generator { companion object { fun generateLootCollection(): Item { val possibleLoot: List> = listOf( - Pair(Item(name = "Beech Log", rarity = 0, stack = 1, R.drawable.log2), 0.6), - Pair(Item(name = "Bronze Ore", rarity = 0, stack = 1, R.drawable.bronze_ore), 0.25), - Pair(Item(name = "Iron Ore", rarity = 0, stack = 1, R.drawable.iron_ore), 0.10), - Pair(Item(name = "Diamond", rarity = 0, stack = 1, R.drawable.diamond), 0.05), + Pair(Item(name = "Beech Log", rarity = 1, stack = 1, R.drawable.log2, 10), 0.6), + Pair(Item(name = "Bronze Ore", rarity = 2, stack = 1, R.drawable.bronze_ore, 20), 0.25), + Pair(Item(name = "Iron Ore", rarity = 2, stack = 1, R.drawable.iron_ore, 25), 0.10), + Pair(Item(name = "Diamond", rarity = 3, stack = 1, R.drawable.diamond, 30), 0.05), ) val rand = Random.nextDouble() @@ -43,11 +43,11 @@ class Generator { fun generateBoss(): Boss { val possibleBoss: List> = listOf( - Pair(Boss(name = "Margit the Fell Omen", life = 150, maxlife = 150, image = R.drawable.boss), 0.5), - Pair(Boss(name = "Godrick the Grafted", life = 200, maxlife = 200, image = R.drawable.skeleton), 0.2), - Pair(Boss(name = "Red Wolf of Radagon", life = 250, maxlife = 250, image = R.drawable.halberdier), 0.15), - Pair(Boss(name = "Old Banshee", life = 300, maxlife = 300, image = R.drawable.banshee), 0.10), - Pair(Boss(name = "Margit the Fell Omen", life = 500, maxlife = 500, image = R.drawable.lich), 0.05), + Pair(Boss(name = "Margit the Fell Omen", life = 150, maxlife = 150, image = R.drawable.boss, xpReward = 100), 0.5), + Pair(Boss(name = "Godrick the Grafted", life = 200, maxlife = 200, image = R.drawable.skeleton, xpReward = 130), 0.2), + Pair(Boss(name = "Red Wolf of Radagon", life = 250, maxlife = 250, image = R.drawable.halberdier, xpReward = 210), 0.15), + Pair(Boss(name = "Old Banshee", life = 300, maxlife = 300, image = R.drawable.banshee, xpReward = 300), 0.10), + Pair(Boss(name = "Margit the Fell Omen", life = 500, maxlife = 500, image = R.drawable.lich, xpReward = 500), 0.05), ) val rand = Random.nextDouble() diff --git a/app/src/main/java/com/example/shakecraft/model/Item.kt b/app/src/main/java/com/example/shakecraft/model/Item.kt index f73a6a1..4eb1b07 100644 --- a/app/src/main/java/com/example/shakecraft/model/Item.kt +++ b/app/src/main/java/com/example/shakecraft/model/Item.kt @@ -1,12 +1,12 @@ package com.example.shakecraft.model -import android.media.Image data class Item( var name: String, var rarity: Int, var stack: Int, var image: Int, + var xpReward: Int, ) diff --git a/app/src/main/java/com/example/shakecraft/model/Player.kt b/app/src/main/java/com/example/shakecraft/model/Player.kt index ff7bc5e..2a924f4 100644 --- a/app/src/main/java/com/example/shakecraft/model/Player.kt +++ b/app/src/main/java/com/example/shakecraft/model/Player.kt @@ -2,31 +2,67 @@ package com.example.shakecraft.model class Player(val pseudo: String, var xp: Int = 0) { var level: Int = 1 - private set val items: MutableList = mutableListOf() + var rank: String = "Beginner" + + fun changeRank(){ + if(this.level<2){ + this.rank = "Beginner" + } + else if(this.level<5){ + this.rank = "Intermediate" + } + else if(this.level<8){ + this.rank = "Proficient" + } + else if(this.level<11){ + this.rank = "Expert" + } + else if(this.level<14){ + this.rank = "Master" + } + else if(this.level<17){ + this.rank = "Professional" + } + else if(this.level<20){ + this.rank = "Champion" + } + else if(this.level<23){ + this.rank = "Beginner" + } + else if(this.level<26){ + this.rank = "Legend" + } + else if(this.level<26){ + this.rank = "Invincible" + } + else if(this.level<29){ + this.rank = "Divine" + } + } fun addItem(item: Item) { - var findItem = items.find { it.name == item.name } + val findItem = items.find { it.name == item.name } if(findItem!= null){ - findItem.stack += 1; + findItem.stack += 1 } else{items.add(item)} } + fun gainXp(xp: Int) { + this.xp += xp + if (this.xp >= this.level *100){ + this.level +=1 + this.xp = 0 + changeRank() + } + } + fun removeItem(item: Item) { items.remove(item) } - fun increaseXp(amount: Int) { - xp += amount - if (xp >= 100 * level) { - levelUp() - } - } - private fun levelUp() { - level++ - println("$pseudo a atteint le niveau $level !") - } + } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 8edec3b..e6c6bb6 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -15,7 +15,7 @@ android:layout_height="wrap_content" android:layout_marginTop="50dp" android:paddingBottom="20dp" - android:text="Home" + android:text="@string/home_title" android:textColor="@color/white" android:textSize="16sp" android:textStyle="bold" @@ -44,6 +44,7 @@ app:layout_constraintStart_toStartOf="parent"> + + + @@ -111,7 +129,7 @@