apparition des taupes de maniere random, utilisation d'une coroutine.

MenuNav
Pierre FERREIRA 2 years ago
parent 0b43f3e3ed
commit 14d76dfe0b

@ -44,6 +44,7 @@ android {
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
implementation 'androidx.fragment:fragment-ktx:1.3.0'
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.6.1'

@ -1,4 +1,4 @@
#Fri Apr 07 15:12:07 CEST 2023
#Fri Apr 07 15:42:17 CEST 2023
iut.android.pierrepierre.app-main-7\:/drawable/limule_dead.png=/home/UCA/piferreira/2A/Android/testsansgradle/ProjetAndroid/app/build/intermediates/merged_res/debug/drawable_limule_dead.png.flat
iut.android.pierrepierre.app-pngs-0\:/drawable-ldpi/ic_launcher_background.png=/home/UCA/piferreira/2A/Android/testsansgradle/ProjetAndroid/app/build/intermediates/merged_res/debug/drawable-ldpi_ic_launcher_background.png.flat
iut.android.pierrepierre.app-main-7\:/mipmap-anydpi-v26/ic_launcher.xml=/home/UCA/piferreira/2A/Android/testsansgradle/ProjetAndroid/app/build/intermediates/merged_res/debug/mipmap-anydpi-v26_ic_launcher.xml.flat

@ -1,4 +1,4 @@
#Fri Apr 07 15:12:08 CEST 2023
#Fri Apr 07 15:42:18 CEST 2023
iut.android.pierrepierre.app-main-6\:/mipmap-xhdpi/ic_launcher_round.webp=/home/UCA/piferreira/2A/Android/testsansgradle/ProjetAndroid/app/build/intermediates/packaged_res/debug/mipmap-xhdpi-v4/ic_launcher_round.webp
iut.android.pierrepierre.app-packageDebugResources-3\:/layout/main_activity.xml=/home/UCA/piferreira/2A/Android/testsansgradle/ProjetAndroid/app/build/intermediates/packaged_res/debug/layout/main_activity.xml
iut.android.pierrepierre.app-main-6\:/mipmap-hdpi/ic_launcher.webp=/home/UCA/piferreira/2A/Android/testsansgradle/ProjetAndroid/app/build/intermediates/packaged_res/debug/mipmap-hdpi-v4/ic_launcher.webp

@ -1,4 +1,4 @@
#Fri Apr 07 15:12:11 CEST 2023
#Fri Apr 07 17:06:43 CEST 2023
base.0=/home/UCA/piferreira/2A/Android/testsansgradle/ProjetAndroid/app/build/intermediates/dex/debug/mergeDexDebug/classes.dex
renamed.0=classes.dex
path.0=classes.dex

@ -13,9 +13,11 @@ drawable limule
drawable limule_dead
id CountDown
id MoleGrid
id closeButton
id grid_image
id progressBar
id score_display
layout game_over
layout main_activity
layout mole_grid
layout moleitem
@ -24,7 +26,10 @@ mipmap ic_launcher_round
string Item
string _0
string app_name
string game_over
string mole
string retour_au_menu
string temps_coul
string timer
style Theme.PierrePierre
xml backup_rules

@ -23,14 +23,14 @@
"merged": "/home/scratch/piferreira/.gradle/daemon/7.4/iut.android.pierrepierre.app-merged_res-5:/mipmap-mdpi_ic_launcher_round.webp.flat",
"source": "/home/scratch/piferreira/.gradle/daemon/7.4/iut.android.pierrepierre.app-main-7:/mipmap-mdpi/ic_launcher_round.webp"
},
{
"merged": "/home/scratch/piferreira/.gradle/daemon/7.4/iut.android.pierrepierre.app-merged_res-5:/mipmap-anydpi-v26_ic_launcher.xml.flat",
"source": "/home/scratch/piferreira/.gradle/daemon/7.4/iut.android.pierrepierre.app-main-7:/mipmap-anydpi-v26/ic_launcher.xml"
},
{
"merged": "/home/scratch/piferreira/.gradle/daemon/7.4/iut.android.pierrepierre.app-merged_res-5:/layout_main_activity.xml.flat",
"source": "/home/scratch/piferreira/.gradle/daemon/7.4/iut.android.pierrepierre.app-main-7:/layout/main_activity.xml"
},
{
"merged": "/home/scratch/piferreira/.gradle/daemon/7.4/iut.android.pierrepierre.app-merged_res-5:/mipmap-anydpi-v26_ic_launcher.xml.flat",
"source": "/home/scratch/piferreira/.gradle/daemon/7.4/iut.android.pierrepierre.app-main-7:/mipmap-anydpi-v26/ic_launcher.xml"
},
{
"merged": "/home/scratch/piferreira/.gradle/daemon/7.4/iut.android.pierrepierre.app-merged_res-5:/layout_moleitem.xml.flat",
"source": "/home/scratch/piferreira/.gradle/daemon/7.4/iut.android.pierrepierre.app-main-7:/layout/moleitem.xml"

@ -10,7 +10,10 @@
<string name="Item">Item</string>
<string name="_0">0</string>
<string name="app_name">Pierre&amp;Pierre</string>
<string name="game_over">Game Over!</string>
<string name="mole">Mole</string>
<string name="retour_au_menu">Retour au menu</string>
<string name="temps_coul">Temps écoulé!</string>
<string name="timer">[0%1$d:%2$s]</string>
<style name="Theme.PierrePierre" parent="Theme.MaterialComponents.DayNight.DarkActionBar">

@ -2841,6 +2841,7 @@ int id clear_text 0x7f080069
int id clip_horizontal 0x7f08006a
int id clip_vertical 0x7f08006b
int id clockwise 0x7f08006c
int id closeButton 0x7f0801c5
int id collapseActionView 0x7f08006d
int id compress 0x7f08006e
int id confirm_button 0x7f08006f
@ -3307,6 +3308,7 @@ int layout design_navigation_menu 0x7f0b0028
int layout design_navigation_menu_item 0x7f0b0029
int layout design_text_input_end_icon 0x7f0b002a
int layout design_text_input_start_icon 0x7f0b002b
int layout game_over 0x7f0b006c
int layout m3_alert_dialog 0x7f0b002c
int layout m3_alert_dialog_actions 0x7f0b002d
int layout m3_alert_dialog_title 0x7f0b002e
@ -3421,6 +3423,7 @@ int string error_icon_content_description 0x7f0f002b
int string exposed_dropdown_menu_content_description 0x7f0f002c
int string fab_transformation_scrim_behavior 0x7f0f002d
int string fab_transformation_sheet_behavior 0x7f0f002e
int string game_over 0x7f0f009f
int string hide_bottom_view_on_scroll_behavior 0x7f0f002f
int string icon_content_description 0x7f0f0030
int string item_view_role_description 0x7f0f0031
@ -3525,6 +3528,7 @@ int string path_password_eye 0x7f0f0093
int string path_password_eye_mask_strike_through 0x7f0f0094
int string path_password_eye_mask_visible 0x7f0f0095
int string path_password_strike_through 0x7f0f0096
int string retour_au_menu 0x7f0f00a0
int string search_menu_title 0x7f0f0097
int string searchbar_scrolling_view_behavior 0x7f0f0098
int string searchview_clear_text_content_description 0x7f0f0099
@ -3532,6 +3536,7 @@ int string searchview_navigation_content_description 0x7f0f009a
int string side_sheet_accessibility_pane_title 0x7f0f009b
int string side_sheet_behavior 0x7f0f009c
int string status_bar_notification_info_overflow 0x7f0f009d
int string temps_coul 0x7f0f00a1
int string timer 0x7f0f009e
int style AlertDialog_AppCompat 0x7f100000
int style AlertDialog_AppCompat_Light 0x7f100001

@ -2842,6 +2842,7 @@ id clear_text
id clip_horizontal
id clip_vertical
id clockwise
id closeButton
id collapseActionView
id compress
id confirm_button
@ -3308,6 +3309,7 @@ layout design_navigation_menu
layout design_navigation_menu_item
layout design_text_input_end_icon
layout design_text_input_start_icon
layout game_over
layout m3_alert_dialog
layout m3_alert_dialog_actions
layout m3_alert_dialog_title
@ -3422,6 +3424,7 @@ string error_icon_content_description
string exposed_dropdown_menu_content_description
string fab_transformation_scrim_behavior
string fab_transformation_sheet_behavior
string game_over
string hide_bottom_view_on_scroll_behavior
string icon_content_description
string item_view_role_description
@ -3526,6 +3529,7 @@ string path_password_eye
string path_password_eye_mask_strike_through
string path_password_eye_mask_visible
string path_password_strike_through
string retour_au_menu
string search_menu_title
string searchbar_scrolling_view_behavior
string searchview_clear_text_content_description
@ -3533,6 +3537,7 @@ string searchview_navigation_content_description
string side_sheet_accessibility_pane_title
string side_sheet_behavior
string status_bar_notification_info_overflow
string temps_coul
string timer
style AlertDialog_AppCompat
style AlertDialog_AppCompat_Light

@ -8,10 +8,12 @@ import android.hardware.SensorEventListener
import android.hardware.SensorManager
import android.os.Bundle
import android.os.CountDownTimer
import android.util.Log
import android.widget.ProgressBar
import android.widget.TextView
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import iut.android.pierrepierre.model.Class.Mole
@ -19,6 +21,11 @@ import iut.android.pierrepierre.model.Adapter.MyGridAdapter
import iut.android.pierrepierre.R
import iut.android.pierrepierre.model.Class.User
import iut.android.pierrepierre.model.fragments.MenuFragment
import kotlinx.coroutines.*
import kotlin.random.Random
//TODO navigation, rotation, dao pour persistance, API, algorithme.
class MoleGridActivity : AppCompatActivity() {
///https://developer.android.com/topic/libraries/view-binding#kotlin
@ -39,6 +46,9 @@ class MoleGridActivity : AppCompatActivity() {
private lateinit var countDownTimer: CountDownTimer
private lateinit var DisplaycountDownTimer: TextView
//coroutine
private var moleUpdateJob: Job? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.mole_grid)
@ -51,15 +61,15 @@ class MoleGridActivity : AppCompatActivity() {
override fun onResume() {
super.onResume()
val moleList = mutableListOf<Mole>().apply {
repeat(12) {
val mole = Mole(false)
val mole = Mole(true)
add(mole)
}
}
//lancement d'une coroutine random
startMoleUpdateCoroutine(moleList)
val shakeSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
@ -89,7 +99,7 @@ class MoleGridActivity : AppCompatActivity() {
}, shakeSensor, SensorManager.SENSOR_DELAY_GAME)
// utilisation d'un objet anno
countDownTimer = object : CountDownTimer(10000, 1000) {
countDownTimer = object : CountDownTimer(60000, 1000) {
override fun onTick(millisUntilFinished: Long) {
@ -115,9 +125,47 @@ class MoleGridActivity : AppCompatActivity() {
gridViewMole.adapter = MyGridAdapter(user, moleList, progressBar, scoreDisplay)
}
override fun onPause() {
super.onPause()
sensorManager.unregisterListener(sensorEventListener)
countDownTimer.cancel()
//coroutine
moleUpdateJob?.cancel()
moleUpdateJob = null
}
//TODO voir si utiliser une coroutine est optimal, ou si mettre en lien avec le timer ne serai pas mieux
//Fonction pour mettre une seule taupe aléatoire
private fun startMoleUpdateCoroutine(moleList: MutableList<Mole>) {
moleUpdateJob = lifecycleScope.launch {
// Boucle pour mettre à jour les moles aléatoirement pendant 5 secondes
val endTime = System.currentTimeMillis() + 60000 //durée de 5s
while (System.currentTimeMillis() < endTime) {
// Mettre à jour une taupe aléatoire
if (!allListAlive(moleList)){
var index = Random.nextInt(0, 11)//(0 until moleList.size).random()
if (!moleList[index].isDead()) {
while (!moleList[index].isDead()) {
index = Random.nextInt(0, 11)//(0 until moleList.size).random()
}
}
moleList[index].changeState()
moleList[index].onMoleStateChanged(moleList[index])
Log.d("index", index.toString())
}
// Attendre un court moment avant de mettre à jour une autre taupe
delay(1000)
}
}
}
private fun allListAlive(moleList: MutableList<Mole>) : Boolean{
moleList.forEach { if (it.dead) return false }
return true
}
}

@ -30,7 +30,7 @@ class MyGridAdapter(var user: User, var MoleList: MutableList<Mole>, var progres
Log.d("onclick", "clicked")
if (!MoleList[position].isDead()){
Log.d("passed", "if passed")
MoleList[position].takeHit()
MoleList[position].takeHit() //kill + attribut les points
progressBar.progress = progressBar.progress + 10 //Augmentation de la progress bar
user.score += 100
scoreDisplay.text = user.score.toString() //optimiser avec un observable ou bind ?
@ -54,7 +54,7 @@ class MyGridAdapter(var user: User, var MoleList: MutableList<Mole>, var progres
if (index != -1) {
// MoleList[index] = mole
MoleList[index].apply {
mole.dead = true
mole.dead = false
}
notifyItemChanged(index)
}

@ -6,7 +6,7 @@ import iut.android.pierrepierre.R
public class Mole (var dead : Boolean) : MoleObserver{
var nbPoint = 0 //recompter tout les points avec cette attribut ?
var pdp = R.drawable.limule
var pdp = R.drawable.limule_dead

Loading…
Cancel
Save