Mobile-DARTS  1.1
BTS SNIR LaSalle Avignon 2021
ActiviteJouerPartie.java
Aller à la documentation de ce fichier.
1 package com.lasalle84.mobile_darts;
2 
3 import android.app.Activity;
4 import android.bluetooth.BluetoothAdapter;
5 import android.content.Intent;
6 import android.os.Bundle;
7 import android.os.Handler;
8 import android.os.Message;
9 import android.util.Log;
10 import android.view.View;
11 import android.widget.ArrayAdapter;
12 import android.widget.Button;
13 import android.widget.ListView;
14 import android.widget.TextView;
15 
16 import androidx.appcompat.app.AppCompatActivity;
17 
18 import java.io.Serializable;
19 import java.util.ArrayList;
20 import java.util.Iterator;
21 import java.util.List;
22 
35 public class ActiviteJouerPartie extends AppCompatActivity
36 {
40  private final static String TAG = "_ActiviteJouerPartie_";
41  private final static int ACTIVITE_FIN_PARTIE = 0;
42 
45  private Peripherique cibleDarts = null;
46  private Peripherique ecranDarts = null;
47  private Handler handler = null;
48  private ArrayList<Joueur> mesJoueurs = null;
49  private BluetoothAdapter bluetoothAdapter = null;
50  private Partie maPartie = null;
51  private TypeJeu typePartie = null;
52  private ArrayAdapter<String> adapteur = null;
53  private ListView listJoueur = null;
54  private TextView affichageImpact = null;
55  private Button boutonTirManque;
56  private Button boutonLancerPartie;
57 
64  @Override
65  protected void onCreate(Bundle savedInstanceState)
66  {
67  Log.d(TAG,"onCreate()");
68  super.onCreate(savedInstanceState);
69  setContentView(R.layout.activity_activite_jouer_partie);
70 
76  maPartie = new Partie(mesJoueurs, typePartie, handler);
77  }
78 
82  @Override
83  protected void onStart()
84  {
85  super.onStart();
86  Log.d(TAG, "[onStart]");
87  }
88 
92  @Override
93  protected void onResume()
94  {
95  super.onResume();
96  Log.d(TAG, "[onResume]");
97  }
98 
102  @Override
103  protected void onPause()
104  {
105  super.onPause();
106  Log.d(TAG, "[onPause]");
107  }
108 
112  @Override
113  protected void onStop()
114  {
115  super.onStop();
116  Log.d(TAG, "[onStop]");
117  }
118 
122  @Override
123  protected void onDestroy()
124  {
125  super.onDestroy();
126  Log.d(TAG, "[onDestroy]");
127  }
128 
135  private void recupererPeripheriques()
136  {
137  Log.d(TAG,"recupererPeripheriques()");
138 
141 
142  if(cibleDarts != null)
143  cibleDarts.setHandlerActivite(handler);
144  if(ecranDarts != null)
145  ecranDarts.setHandlerActivite(handler);
146  }
147 
155  public void actualiserScoreIHM(String joueur, int score)
156  {
157  Log.d(TAG, "actualiserScoreIHM()");
158  int idJoueur = 0;
159 
160  for (int i = 0; i < mesJoueurs.size(); i++)
161  {
162  if (mesJoueurs.get(i).getNom().equals(joueur))
163  {
164  idJoueur = i;
165  }
166  }
167  mesJoueurs.get(idJoueur).setScore(score);
168  String string = mesJoueurs.get(idJoueur).getNom() + ": " + mesJoueurs.get(idJoueur).getScore();
169  adapteur.remove(adapteur.getItem(idJoueur));
170  adapteur.insert(string, idJoueur);
171  }
172 
179  public void afficherJoueurActuel(String joueur)
180  {
181  Log.d(TAG, "afficherJoueurActuel()");
182  String joueurActuel;
183  for (int i = 0; i < mesJoueurs.size(); i++)
184  {
185  if (mesJoueurs.get(i).getNom().equals(joueur))
186  {
187  joueurActuel = "-> " + mesJoueurs.get(i).getNom() + ": " + mesJoueurs.get(i).getScore();
188  }
189  else {
190  joueurActuel = mesJoueurs.get(i).getNom() + ": " + mesJoueurs.get(i).getScore();
191  }
192  adapteur.remove(adapteur.getItem(i));
193  adapteur.insert(joueurActuel, i);
194  }
195  affichageImpact.setText("");
196  }
197 
205  public void afficherGagnant(String gagnant)
206  {
207  Log.d(TAG, "afficherGagnant() : Le nom du gagnant est : " + gagnant);
208  Intent AfficherGagnant = new Intent(this, ActiviteFinPartie.class);
209  List<Joueur> lesJoueur = new ArrayList<Joueur>();
210  for (int i = 0; i < mesJoueurs.size(); i++)
211  {
212  if (mesJoueurs.get(i).getNom().equals(gagnant))
213  {
214  AfficherGagnant.putExtra("gagnant", mesJoueurs.get(i).getNom());
215  lesJoueur.add(mesJoueurs.get(i));
216  }
217  else
218  {
219  lesJoueur.add(mesJoueurs.get(i));
220  }
221 
222  AfficherGagnant.putExtra("joueurs", (Serializable) lesJoueur);
223 
224  }
225  startActivityForResult(AfficherGagnant,ACTIVITE_FIN_PARTIE);
226  finish();
227  }
228 
237  public void afficherImpact(int Touche, int multiplicateur)
238  {
239  Log.d(TAG, "afficherImpact()");
240  String multiplication = new String();
241  switch (multiplicateur)
242  {
243  case 0:
244  multiplication = "MISS";
245  break;
246  case 1:
247  multiplication = "Simple ";
248  break;
249  case 2:
250  multiplication = "Double ";
251  break;
252  case 3:
253  multiplication = "Triple ";
254  break;
255  }
256  if (multiplication == "MISS")
257  {
258  affichageImpact.setText(affichageImpact.getText().toString().concat("MISS "));
259  }
260  else
261  {
262  affichageImpact.setText(affichageImpact.getText().toString().concat(multiplication + Integer.toString(Touche) + " "));
263  }
264  }
265 
271  public void chargerLesParametres()
272  {
273  mesJoueurs = new ArrayList<Joueur>();
274  mesJoueurs = (ArrayList<Joueur>) getIntent().getSerializableExtra("LesJoueurs");
275  Iterator<Joueur> it = mesJoueurs.iterator();
276 
277  while(it.hasNext())
278  {
279  Log.d(TAG, "le joueur "+ it.next().getNom() + "est chargé");
280  }
281  typePartie = new TypeJeu(getIntent().getIntExtra("TypeMode",0));
282  }
283 
284  public void envoyerAquitement()
285  {
286  Log.d(TAG, "envoyerAquittement()");
287  cibleDarts.envoyer("$DARTS;OK;" + "\\r\\n");
288  }
289 
293  private void initialiserWidgets()
294  {
295  Log.d(TAG,"initialiserWidgets()");
296  boutonTirManque = (Button) findViewById(R.id.TirManque);
297  boutonTirManque.setVisibility(View.INVISIBLE);
298  boutonTirManque.setOnClickListener(view -> {
299  Log.d(TAG, "[onClick] boutonTirManque");
300  maPartie.cibleManquee();
301  });
302 
303  boutonLancerPartie = (Button) findViewById(R.id.LancerPartie);
304  boutonLancerPartie.setOnClickListener(view -> {
305  Log.d(TAG, "[onClick] boutonLancerPartie");
307  new Thread()
308  {
309  @Override
310  public void run() {
311  super.run();
312  maPartie.demarrerPartie();
313  }
314  }.start();
315  boutonLancerPartie.setVisibility(View.INVISIBLE);
316  boutonTirManque.setVisibility(View.VISIBLE);
317  });
318  listJoueur = (ListView) findViewById(R.id.MesJoueur);
319  affichageImpact = (TextView) findViewById(R.id.Impact);
320  }
321 
325  private void initialiserHandler()
326  {
327  Log.d(TAG,"[initialiserHandler]");
328  this.handler = new Handler(this.getMainLooper())
329  {
330  @Override
331  public void handleMessage(Message msg)
332  {
333  super.handleMessage(msg);
334  Bundle b = msg.getData();
335  switch(msg.what)
336  {
338  if(b.getString("nom").equals(Peripherique.NOM_CIBLE))
339  {
340  String donnees = b.getString("donnees");
341  Log.d(TAG,"[handleMessage] Nom : " + b.getString("nom") + " - Adresse : " + b.getString("adresse") + " -> " + b.getString("donnees"));
342  maPartie.traiterTrame(donnees);
343  }
344  else if(b.getString("nom").equals(Peripherique.NOM_ECRAN))
345  {
346  String donnees = b.getString("donnees");
347  Log.d(TAG,"[handleMessage] Nom : " + b.getString("nom") + " - Adresse : " + b.getString("adresse") + " -> " + b.getString("donnees"));
348  maPartie.traiterTrame(donnees);
349  }
350  break;
351  case Partie.SET_SCORE:
352  Log.d(TAG, "[handleMessage] : SET_SCORE " + "Joueur: " + b.getString("joueur") + " Score: " + b.getInt("score"));
353  actualiserScoreIHM(b.getString("joueur"), b.getInt("score"));
354  break;
355  case Partie.IMPACT:
356  Log.d(TAG, "[handleMessage] : IMPACT " + "Joueur: " + b.getString("joueur") + " Touche: " + b.getInt("Touche") + " Multiplicateur Touche: " + b.getInt("MultiplicateurTouche"));
357  afficherImpact( b.getInt("Touche"),b.getInt("MultiplicateurTouche"));
358  if(ecranDarts != null)
359  {
360  ecranDarts.envoyer("$DARTS;HIT;" + b.getInt("Touche") + ";" + b.getInt("MultiplicateurTouche") + ";" + b.getInt("ID") + "\r\n");
361  }
362  break;
363  case Partie.JOUEUR_SUIVANT:
364  Log.d(TAG, "[handleMessage] : JOUEUR_SUIVANT " + "Joueur: " + b.getString("joueur"));
365  afficherJoueurActuel(b.getString("joueur"));
366  break;
368  Log.d(TAG, "[handleMessage] : ENVOYER_AQUITTEMENT");
370  break;
371  case Partie.GAGNANT:
372  Log.d(TAG, "[handleMessage] : AFFICHER_GAGNANT");
373  if(ecranDarts != null)
374  {
375  ecranDarts.envoyer("$DARTS;END;"+b.getString("gagnant")+"\r\n");
376  }
377  cibleDarts.envoyer("$DARTS;RESET\r\n");
378  afficherGagnant(b.getString("gagnant"));
379  break;
380  }
381  }
382  };
383  }
384 
388  public void initialiserPartie() {
389  Log.d(TAG, "initialiserPartie()");
390  Iterator<Joueur> it = mesJoueurs.iterator();
391  String trameNomJoueurs = new String();
392  while(it.hasNext())
393  {
394  Joueur monJoueur = it.next();
395  monJoueur.setScore(typePartie.getPointDepart());
396  actualiserScoreIHM(monJoueur.getNom(),typePartie.getPointDepart());
397  trameNomJoueurs = trameNomJoueurs.concat(";" +monJoueur.getNom());
398  }
399  cibleDarts.envoyer("$DARTS;START;" + typePartie.getTypeJeu() + ";" + mesJoueurs.size() + trameNomJoueurs + "\r\n");
400  //Log.d(TAG,"$DARTS;START;" + typePartie.getTypeJeu() + ";" + mesJoueurs.size() + trameNomJoueurs + "\r\n");
401  if(ecranDarts != null)
402  {
403  ecranDarts.envoyer("$DARTS;START;" + typePartie.getTypeJeu() + ";" + mesJoueurs.size() + trameNomJoueurs + "\r\n");
404  }
405  Log.d(TAG,"Envoi de la trame à la cible et à l'écran");
406  }
407 
412  {
413  Log.d(TAG, "initialiserListeJoueur()");
414  adapteur = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item);
415  for (int i = 0; i < mesJoueurs.size(); i++)
416  {
417  adapteur.add(mesJoueurs.get(i).getNom());
418  }
419  listJoueur.setAdapter(adapteur);
420  }
421 
425  protected void onActivityResult(int requestCode, int resultCode, Intent data)
426  {
427  super.onActivityResult(requestCode, resultCode, data);
428  Log.d(TAG, "[onActivityResult] Fin ActiviteFinPartie");
429  if (ecranDarts != null)
430  {
431  ecranDarts.deconnecter();
432  }
433  cibleDarts.deconnecter();
434  super.finish();
435  }
436 }
void cibleManquee()
Méthode envoyant une fléchette manquée.
Definition: Partie.java:254
Handler handler
Le Handler qui permet de communiquer avec le thread.
void initialiserPartie()
Initialisation de la partie.
La classe qui contient toute la gestion de partie.
Definition: Partie.java:25
static final int JOUEUR_SUIVANT
Definition: Partie.java:36
void onCreate(Bundle savedInstanceState)
Méthode appelée à la création de l&#39;activité
void demarrerPartie()
Méthode permettant de démarrer la partie.
Definition: Partie.java:72
void onPause()
Méthode appelée après qu&#39;une boîte de dialogue s&#39;est affichée (on reprend sur un onResume()) ou avant...
void initialiserWidgets()
Initialisation des Widgets.
L&#39;activité ActiviteLancerPartie.
ArrayAdapter< String > adapteur
Adapteur qui affiche quel joueur doit joueur et son score.
void afficherImpact(int Touche, int multiplicateur)
La classe qui contient toute la gestion des periphériques.
TextView affichageImpact
Texte qui affiche la vollée actuelle.
static final int ENVOYER_AQUITTEMENT
Definition: Partie.java:40
L&#39;activité ActiviteFinPartie.
void initialiserListeJoueur()
Initialisation des joueurs.
static final String NOM_ECRAN
Le nom du module Bluetooth de l&#39;écran.
La classe qui contient toute la gestion des types de parties.
Definition: TypeJeu.java:17
void onStart()
Méthode appelée au démarrage après le onCreate() ou un restart après un onStop()
ArrayList< Joueur > mesJoueurs
liste des Joueurs
void onDestroy()
Méthode appelée à la destruction de l&#39;application (après onStop() et détruite par le système Android)...
Button boutonTirManque
Bouton pour la commande de tir manqué
Button boutonLancerPartie
Bouton permettant le lancement de la partie.
void deconnecter()
Méthode pour se deconnecter sur le periphérique en Bluetooth.
void traiterTrame(String trame)
Definition: Partie.java:265
Peripherique cibleDarts
Le periphérique Bluetooth de la cible.
void setHandlerActivite(Handler handler)
Méthode qui permet de changer d&#39;handler.
void onResume()
Méthode appelée après onStart() ou après onPause()
La classe qui contient toute la gestion des joueurs.
Definition: Joueur.java:19
void initialiserHandler()
Initialisation du handler.
static final int SET_SCORE
Definition: Partie.java:37
static final int CODE_RECEPTION
Code de TReception.
BluetoothAdapter bluetoothAdapter
Bluetooth Adapteur.
L&#39;activité ActiviteJouerPartie.
void onStop()
Méthode appelée lorsque l&#39;activité n&#39;est plus visible.
static final int ACTIVITE_FIN_PARTIE
Code pour l&#39;Activite fin partie.
String getNom()
Accesseur du nom du joueur.
Definition: Joueur.java:52
void onActivityResult(int requestCode, int resultCode, Intent data)
Traite le retour des activités.
static final String NOM_CIBLE
Le nom du module Bluetooth de la cible-darts 2021.
void envoyer(final String data)
Méthode pour envoyer une trame en Bluetooth.
Peripherique ecranDarts
Le periphérique Bluetooth de l&#39;écran.