@ -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
|
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.hardware.SensorManager
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.os.Vibrator
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
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"
|
|
||||||
|
|
||||||
/**
|
class BossFragment(var player: Player) : Fragment() {
|
||||||
* A simple [Fragment] subclass.
|
|
||||||
* Use the [BossFragment.newInstance] factory method to
|
var stubdata = Stub().load();
|
||||||
* create an instance of this fragment.
|
private lateinit var sensorManager: SensorManager
|
||||||
*/
|
private lateinit var accelerometer: Sensor
|
||||||
class BossFragment : Fragment() {
|
private lateinit var accelerometerEventListener: SensorEventListener
|
||||||
|
private lateinit var progressBar: ProgressBar
|
||||||
|
private lateinit var image: ImageView
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View? {
|
||||||
// Inflate the layout for this fragment
|
// Récupérez une référence à la ProgressBar dans la vue
|
||||||
return inflater.inflate(R.layout.fragment_boss, container, false)
|
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>
|