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 { dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
implementation 'androidx.fragment:fragment-ktx:1.3.0' implementation 'androidx.fragment:fragment-ktx:1.3.0'
implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.6.1' 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-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-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 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-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-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 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 base.0=/home/UCA/piferreira/2A/Android/testsansgradle/ProjetAndroid/app/build/intermediates/dex/debug/mergeDexDebug/classes.dex
renamed.0=classes.dex renamed.0=classes.dex
path.0=classes.dex path.0=classes.dex

@ -13,9 +13,11 @@ drawable limule
drawable limule_dead drawable limule_dead
id CountDown id CountDown
id MoleGrid id MoleGrid
id closeButton
id grid_image id grid_image
id progressBar id progressBar
id score_display id score_display
layout game_over
layout main_activity layout main_activity
layout mole_grid layout mole_grid
layout moleitem layout moleitem
@ -24,7 +26,10 @@ mipmap ic_launcher_round
string Item string Item
string _0 string _0
string app_name string app_name
string game_over
string mole string mole
string retour_au_menu
string temps_coul
string timer string timer
style Theme.PierrePierre style Theme.PierrePierre
xml backup_rules 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", "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" "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", "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" "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", "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" "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="Item">Item</string>
<string name="_0">0</string> <string name="_0">0</string>
<string name="app_name">Pierre&amp;Pierre</string> <string name="app_name">Pierre&amp;Pierre</string>
<string name="game_over">Game Over!</string>
<string name="mole">Mole</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> <string name="timer">[0%1$d:%2$s]</string>
<style name="Theme.PierrePierre" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <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_horizontal 0x7f08006a
int id clip_vertical 0x7f08006b int id clip_vertical 0x7f08006b
int id clockwise 0x7f08006c int id clockwise 0x7f08006c
int id closeButton 0x7f0801c5
int id collapseActionView 0x7f08006d int id collapseActionView 0x7f08006d
int id compress 0x7f08006e int id compress 0x7f08006e
int id confirm_button 0x7f08006f 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_navigation_menu_item 0x7f0b0029
int layout design_text_input_end_icon 0x7f0b002a int layout design_text_input_end_icon 0x7f0b002a
int layout design_text_input_start_icon 0x7f0b002b int layout design_text_input_start_icon 0x7f0b002b
int layout game_over 0x7f0b006c
int layout m3_alert_dialog 0x7f0b002c int layout m3_alert_dialog 0x7f0b002c
int layout m3_alert_dialog_actions 0x7f0b002d int layout m3_alert_dialog_actions 0x7f0b002d
int layout m3_alert_dialog_title 0x7f0b002e 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 exposed_dropdown_menu_content_description 0x7f0f002c
int string fab_transformation_scrim_behavior 0x7f0f002d int string fab_transformation_scrim_behavior 0x7f0f002d
int string fab_transformation_sheet_behavior 0x7f0f002e int string fab_transformation_sheet_behavior 0x7f0f002e
int string game_over 0x7f0f009f
int string hide_bottom_view_on_scroll_behavior 0x7f0f002f int string hide_bottom_view_on_scroll_behavior 0x7f0f002f
int string icon_content_description 0x7f0f0030 int string icon_content_description 0x7f0f0030
int string item_view_role_description 0x7f0f0031 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_strike_through 0x7f0f0094
int string path_password_eye_mask_visible 0x7f0f0095 int string path_password_eye_mask_visible 0x7f0f0095
int string path_password_strike_through 0x7f0f0096 int string path_password_strike_through 0x7f0f0096
int string retour_au_menu 0x7f0f00a0
int string search_menu_title 0x7f0f0097 int string search_menu_title 0x7f0f0097
int string searchbar_scrolling_view_behavior 0x7f0f0098 int string searchbar_scrolling_view_behavior 0x7f0f0098
int string searchview_clear_text_content_description 0x7f0f0099 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_accessibility_pane_title 0x7f0f009b
int string side_sheet_behavior 0x7f0f009c int string side_sheet_behavior 0x7f0f009c
int string status_bar_notification_info_overflow 0x7f0f009d int string status_bar_notification_info_overflow 0x7f0f009d
int string temps_coul 0x7f0f00a1
int string timer 0x7f0f009e int string timer 0x7f0f009e
int style AlertDialog_AppCompat 0x7f100000 int style AlertDialog_AppCompat 0x7f100000
int style AlertDialog_AppCompat_Light 0x7f100001 int style AlertDialog_AppCompat_Light 0x7f100001

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

@ -8,10 +8,12 @@ import android.hardware.SensorEventListener
import android.hardware.SensorManager import android.hardware.SensorManager
import android.os.Bundle import android.os.Bundle
import android.os.CountDownTimer import android.os.CountDownTimer
import android.util.Log
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import iut.android.pierrepierre.model.Class.Mole 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.R
import iut.android.pierrepierre.model.Class.User import iut.android.pierrepierre.model.Class.User
import iut.android.pierrepierre.model.fragments.MenuFragment 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() { class MoleGridActivity : AppCompatActivity() {
///https://developer.android.com/topic/libraries/view-binding#kotlin ///https://developer.android.com/topic/libraries/view-binding#kotlin
@ -39,6 +46,9 @@ class MoleGridActivity : AppCompatActivity() {
private lateinit var countDownTimer: CountDownTimer private lateinit var countDownTimer: CountDownTimer
private lateinit var DisplaycountDownTimer: TextView private lateinit var DisplaycountDownTimer: TextView
//coroutine
private var moleUpdateJob: Job? = null
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.mole_grid) setContentView(R.layout.mole_grid)
@ -51,15 +61,15 @@ class MoleGridActivity : AppCompatActivity() {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
val moleList = mutableListOf<Mole>().apply { val moleList = mutableListOf<Mole>().apply {
repeat(12) { repeat(12) {
val mole = Mole(false) val mole = Mole(true)
add(mole) add(mole)
} }
} }
//lancement d'une coroutine random
startMoleUpdateCoroutine(moleList)
val shakeSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) val shakeSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
@ -89,7 +99,7 @@ class MoleGridActivity : AppCompatActivity() {
}, shakeSensor, SensorManager.SENSOR_DELAY_GAME) }, shakeSensor, SensorManager.SENSOR_DELAY_GAME)
// utilisation d'un objet anno // utilisation d'un objet anno
countDownTimer = object : CountDownTimer(10000, 1000) { countDownTimer = object : CountDownTimer(60000, 1000) {
override fun onTick(millisUntilFinished: Long) { override fun onTick(millisUntilFinished: Long) {
@ -115,9 +125,47 @@ class MoleGridActivity : AppCompatActivity() {
gridViewMole.adapter = MyGridAdapter(user, moleList, progressBar, scoreDisplay) gridViewMole.adapter = MyGridAdapter(user, moleList, progressBar, scoreDisplay)
} }
override fun onPause() { override fun onPause() {
super.onPause() super.onPause()
sensorManager.unregisterListener(sensorEventListener) sensorManager.unregisterListener(sensorEventListener)
countDownTimer.cancel() 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") Log.d("onclick", "clicked")
if (!MoleList[position].isDead()){ if (!MoleList[position].isDead()){
Log.d("passed", "if passed") 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 progressBar.progress = progressBar.progress + 10 //Augmentation de la progress bar
user.score += 100 user.score += 100
scoreDisplay.text = user.score.toString() //optimiser avec un observable ou bind ? 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) { if (index != -1) {
// MoleList[index] = mole // MoleList[index] = mole
MoleList[index].apply { MoleList[index].apply {
mole.dead = true mole.dead = false
} }
notifyItemChanged(index) notifyItemChanged(index)
} }

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

Loading…
Cancel
Save