@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="deploymentTargetDropDown">
|
||||
<runningDeviceTargetSelectedWithDropDown>
|
||||
<Target>
|
||||
<type value="RUNNING_DEVICE_TARGET" />
|
||||
<deviceKey>
|
||||
<Key>
|
||||
<type value="SERIAL_NUMBER" />
|
||||
<value value="2208661a3b057ece" />
|
||||
</Key>
|
||||
</deviceKey>
|
||||
</Target>
|
||||
</runningDeviceTargetSelectedWithDropDown>
|
||||
<timeTargetWasSelectedWithDropDown value="2023-03-10T23:31:57.060360300Z" />
|
||||
</component>
|
||||
</project>
|
@ -1,35 +1,117 @@
|
||||
package com.example.shakecraft
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.hardware.Sensor
|
||||
import android.hardware.SensorEvent
|
||||
import android.hardware.SensorEventListener
|
||||
import android.hardware.SensorManager
|
||||
import android.os.Bundle
|
||||
import android.os.Vibrator
|
||||
import androidx.fragment.app.Fragment
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.ProgressBar
|
||||
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
|
||||
|
||||
// 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 [BossFragment.newInstance] factory method to
|
||||
* create an instance of this fragment.
|
||||
*/
|
||||
class BossFragment : Fragment() {
|
||||
class BossFragment(var player: Player) : Fragment() {
|
||||
|
||||
var stubdata = Stub().load();
|
||||
private lateinit var sensorManager: SensorManager
|
||||
private lateinit var accelerometer: Sensor
|
||||
private lateinit var accelerometerEventListener: SensorEventListener
|
||||
private lateinit var progressBar: ProgressBar
|
||||
private lateinit var image: ImageView
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
// Inflate the layout for this fragment
|
||||
return inflater.inflate(R.layout.fragment_boss, container, false)
|
||||
// Récupérez une référence à la ProgressBar dans la vue
|
||||
val view = inflater.inflate(R.layout.fragment_boss, container, false)
|
||||
|
||||
progressBar = view.findViewById(R.id.progressBar)
|
||||
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;
|
||||
image.setImageResource(boss.image)
|
||||
|
||||
|
||||
// Créez un écouteur de capteur d'accéléromètre pour écouter les secousses
|
||||
accelerometerEventListener = object : SensorEventListener {
|
||||
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
|
||||
// Ne faites rien ici
|
||||
}
|
||||
|
||||
@SuppressLint("ServiceCast")
|
||||
override fun onSensorChanged(event: SensorEvent?) {
|
||||
val acceleration = sqrt(
|
||||
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);
|
||||
image.setImageResource(boss.image)
|
||||
val vibrator = context?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
|
||||
vibrator.vibrate(100)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Enregistrez l'écouteur de capteur d'accéléromètre
|
||||
sensorManager.registerListener(
|
||||
accelerometerEventListener,
|
||||
accelerometer,
|
||||
SensorManager.SENSOR_DELAY_GAME
|
||||
)
|
||||
|
||||
|
||||
// Retournez la vue de fragment
|
||||
return view
|
||||
}
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
|
||||
val activity = requireActivity()
|
||||
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||
}
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
|
||||
// Désenregistrez l'écouteur de capteur d'accéléromètre lorsque le fragment est détruit
|
||||
sensorManager.unregisterListener(accelerometerEventListener)
|
||||
val activity = requireActivity()
|
||||
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package com.example.shakecraft.model
|
||||
|
||||
import com.example.shakecraft.R
|
||||
|
||||
class Boss (
|
||||
var name: String,
|
||||
var life: Int,
|
||||
var maxlife: Int,
|
||||
var image: Int,
|
||||
){
|
||||
val possibleLoot: List<Pair<Item, Double>> = 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_bones), 0.25),
|
||||
Pair(Item(name = "Treasure Key", rarity = 0, stack = 1, R.drawable.treasure_key), 0.05),
|
||||
)
|
||||
fun takeDamage(strength: Int) {
|
||||
this.life -= strength;
|
||||
}
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package com.example.shakecraft.model
|
||||
|
||||
import com.example.shakecraft.R
|
||||
import kotlin.random.Random
|
||||
|
||||
class Generator {
|
||||
|
||||
companion object {
|
||||
fun generateLootCollection(): Item {
|
||||
val possibleLoot: List<Pair<Item, Double>> = 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),
|
||||
)
|
||||
val rand = Random.nextDouble()
|
||||
|
||||
var cumulativeProb = 0.0
|
||||
for (element in possibleLoot) {
|
||||
cumulativeProb += element.second
|
||||
if (rand < cumulativeProb) {
|
||||
return element.first
|
||||
}
|
||||
}
|
||||
// Si aucun élément n'a été choisi, retourner le dernier élément de la liste
|
||||
return possibleLoot.last().first
|
||||
}
|
||||
|
||||
fun generateLootBoss( possibleLoot : List<Pair<Item, Double>>): Item {
|
||||
val rand = Random.nextDouble()
|
||||
|
||||
var cumulativeProb = 0.0
|
||||
for (element in possibleLoot) {
|
||||
cumulativeProb += element.second
|
||||
if (rand < cumulativeProb) {
|
||||
return element.first
|
||||
}
|
||||
}
|
||||
// Si aucun élément n'a été choisi, retourner le dernier élément de la liste
|
||||
return possibleLoot.last().first
|
||||
}
|
||||
|
||||
|
||||
fun generateBoss(): Boss {
|
||||
val possibleBoss: List<Pair<Boss, Double>> = 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),
|
||||
)
|
||||
val rand = Random.nextDouble()
|
||||
|
||||
var cumulativeProb = 0.0
|
||||
for (element in possibleBoss) {
|
||||
cumulativeProb += element.second
|
||||
if (rand < cumulativeProb) {
|
||||
return element.first
|
||||
}
|
||||
}
|
||||
// Si aucun élément n'a été choisi, retourner le dernier élément de la liste
|
||||
return possibleBoss.last().first
|
||||
}
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
package com.example.shakecraft.model
|
||||
|
||||
import com.example.shakecraft.R
|
||||
import kotlin.random.Random
|
||||
|
||||
class GeneratorLoot {
|
||||
|
||||
companion object {
|
||||
fun generateLootCollection(): Item {
|
||||
val possibleLoot: List<Pair<Item, Double>> = 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),
|
||||
)
|
||||
val rand = Random.nextDouble()
|
||||
|
||||
var cumulativeProb = 0.0
|
||||
for (element in possibleLoot) {
|
||||
cumulativeProb += element.second
|
||||
if (rand < cumulativeProb) {
|
||||
return element.first
|
||||
}
|
||||
}
|
||||
// Si aucun élément n'a été choisi, retourner le dernier élément de la liste
|
||||
return possibleLoot.last().first
|
||||
}
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 5.4 KiB |
@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/my_nav"
|
||||
app:startDestination="@id/mainActivity">
|
||||
|
||||
<activity
|
||||
android:id="@+id/mainActivity"
|
||||
android:name="com.example.shakecraft.MainActivity"
|
||||
android:label="fragment_home"
|
||||
tools:layout="@layout/fragment_home" />
|
||||
<fragment
|
||||
android:id="@+id/bossFragment"
|
||||
android:name="com.example.shakecraft.BossFragment"
|
||||
android:label="fragment_boss"
|
||||
tools:layout="@layout/fragment_boss" />
|
||||
<fragment
|
||||
android:id="@+id/collectFragment"
|
||||
android:name="com.example.shakecraft.CollectFragment"
|
||||
android:label="fragment_collect"
|
||||
tools:layout="@layout/fragment_collect" >
|
||||
<action
|
||||
android:id="@+id/action_collectFragment_to_homeFragment"
|
||||
app:destination="@id/homeFragment" />
|
||||
</fragment>
|
||||
<fragment
|
||||
android:id="@+id/inventoryFragment"
|
||||
android:name="com.example.shakecraft.InventoryFragment"
|
||||
android:label="fragment_inventory"
|
||||
tools:layout="@layout/fragment_inventory" />
|
||||
<fragment
|
||||
android:id="@+id/plusFragment"
|
||||
android:name="com.example.shakecraft.PlusFragment"
|
||||
android:label="fragment_plus"
|
||||
tools:layout="@layout/fragment_plus" />
|
||||
<fragment
|
||||
android:id="@+id/homeFragment"
|
||||
android:name="com.example.shakecraft.HomeFragment"
|
||||
android:label="HomeFragment" >
|
||||
<action
|
||||
android:id="@+id/action_homeFragment_to_collectFragment"
|
||||
app:destination="@id/collectFragment" />
|
||||
<action
|
||||
android:id="@+id/action_homeFragment_to_bossFragment"
|
||||
app:destination="@id/bossFragment" />
|
||||
</fragment>
|
||||
</navigation>
|