Mobile-DARTS  1.1
BTS SNIR LaSalle Avignon 2021
Partie.java
Aller à la documentation de ce fichier.
1 package com.lasalle84.mobile_darts;
2 
3 import android.os.Bundle;
4 import android.os.Handler;
5 import android.os.Message;
6 import android.util.Log;
7 
8 import java.util.ArrayList;
9 import java.util.Iterator;
10 
11 import static android.os.SystemClock.sleep;
12 
25 public class Partie
26 {
30  private final static String TAG = "_Partie_";
31  public final static int NB_FLECHETTE = 3;
32 
36  public final static int JOUEUR_SUIVANT = 3;
37  public final static int SET_SCORE = 4;
38  public final static int IMPACT = 5;
39  public final static int GAGNANT = 6;
40  public final static int ENVOYER_AQUITTEMENT = 7;
41 
45  private int nbJoueurs;
46  private int nbManche;
47  private TypeJeu typeJeu;
48  private ArrayList<Joueur> lesJoueurs;
49  private int impact[];
50  private boolean impactEstRecu;
51  private boolean estFini = false;
52  private Handler handlerUI = null;
53  private boolean estDoubleImpact = false;
54  private boolean estAuSuivant = false;
55 
56  public Partie(ArrayList<Joueur> lesJoueurs, TypeJeu typeJeu, Handler handlerUI)
57  {
58  this.lesJoueurs = lesJoueurs;
59  this.typeJeu = typeJeu;
60  this.handlerUI = handlerUI;
61  this.nbManche = 0;
62  this.nbJoueurs = this.lesJoueurs.size();
63  impact = new int[3];
64  }
65 
72  public void demarrerPartie() {
73  Log.d(TAG, "demarrerPartie()");
74  estAuSuivant = true;
75  do
76  {
77  nbManche++;
78  Iterator<Joueur> it = lesJoueurs.iterator();
79  Log.d(TAG, "Manche numéro " + nbManche);
80  while (it.hasNext())
81  {
82  Joueur monJoueur = it.next();
83  envoyerGagnantIHM(monJoueur);
84  Log.d(TAG, "C'est le tour de " + monJoueur.getNom());
86  actualiserJoueurIHM(monJoueur.getNom());
87  int pointVollee = 0;
88 
89  for(int i = 0; i < NB_FLECHETTE; i++)
90  {
91  if (monJoueur.isaFini())
92  {
93  envoyerGagnantIHM(monJoueur);
94  i = NB_FLECHETTE;
95  estFini = true;
96  }
97  else
98  {
99  impactEstRecu = false;
100  attendreImpact();
101  pointVollee =+ impact[0]*impact[1];
102  if(!monJoueur.retirerPoint(pointVollee, this))
103  {
104  i = NB_FLECHETTE;
105  pointVollee = 0;
106  }
107  else if (monJoueur.getScore() == 0 && !typeJeu.estDoubleOut())
108  {
109  envoyerGagnantIHM(monJoueur);
110  i = NB_FLECHETTE;
111  estFini = true;
112  }
113  else if (monJoueur.getScore() == 0 && typeJeu.estDoubleOut() && estDoubleImpact)
114  {
115  envoyerGagnantIHM(monJoueur);
116  i = NB_FLECHETTE;
117  estFini = true;
118  }
119  }
120  }
121  actualiserScoreIHM(monJoueur, monJoueur.getScore());
122  }
123  }while (!estFini);
124  }
130  public void attendreImpact() {
131  Log.d(TAG, "attendreImpact()");
132  while (!impactEstRecu)
133  {
134  sleep(1000);
135  }
136  impactIHM(impact[0],impact[1],impact[2]);
137 
138  if (impact[1] == 2)
139  {
140  estDoubleImpact = true;
141  }
142  else
143  {
144  estDoubleImpact = false;
145  }
146 
147  Log.d(TAG, "Valeur Touche" + impact[0]+ "; Multiplicateur Touche:" + impact[1] + "; ID Touche :" + impact[2]);
148 
149  }
150  public void attendreJoueurSuivant()
151  {
152  Log.d(TAG, "attendreJoueurSuivant()");
153  while (!estAuSuivant)
154  {
155  sleep(1000);
156  }
157  Log.d(TAG, "Au suivant" + estAuSuivant);
158  estAuSuivant = false;
159  }
160 
168  public void actualiserScoreIHM(Joueur monJoueur, int score)
169  {
170  Log.d(TAG, "actualiserScoreIHM()");
171  Message msg = Message.obtain();
172  msg.what = SET_SCORE;
173  Bundle b = new Bundle();
174  b.putString("joueur", monJoueur.getNom());
175  b.putInt("score", score);
176  msg.setData(b);
177  handlerUI.sendMessage(msg);
178  }
179 
186  public void actualiserJoueurIHM(String monJoueur)
187  {
188  Log.d(TAG, "actualiserJoueurIHM()");
189  Message msg = Message.obtain();
190  msg.what = JOUEUR_SUIVANT;
191  Bundle b = new Bundle();
192  b.putString("joueur", monJoueur);
193  msg.setData(b);
194  handlerUI.sendMessage(msg);
195  }
196 
205  public void impactIHM(int Touche, int MultiplicateurTouche, int ID)
206  {
207  Log.d(TAG, "impactIHM() " + Touche + " - " + MultiplicateurTouche);
208  Message msg = Message.obtain();
209  msg.what = IMPACT;
210  Bundle b = new Bundle();
211  b.putInt("Touche",Touche);
212  b.putInt("MultiplicateurTouche",MultiplicateurTouche);
213  b.putInt("ID", ID);
214  msg.setData(b);
215  handlerUI.sendMessage(msg);
216  }
217 
224  public void envoyerAquittement()
225  {
226  Log.d(TAG, "envoyerAquittement() ");
227  Message msg = Message.obtain();
228  msg.what = ENVOYER_AQUITTEMENT;
229  handlerUI.sendMessage(msg);
230  }
231 
238  public void envoyerGagnantIHM(Joueur monJoueur)
239  {
240  Log.d(TAG, "envoyerGagnantIHM() " + monJoueur.getNom());
241  estFini = true;
242  Message msg = Message.obtain();
243  msg.what = GAGNANT;
244  Bundle b = new Bundle();
245  b.putString("gagnant",monJoueur.getNom());
246  msg.setData(b);
247  handlerUI.sendMessage(msg);
248  }
254  public void cibleManquee()
255  {
256  impact[0] = 0;
257  impact[1] = 0;
258  impactEstRecu = true;
259  }
265  public void traiterTrame(String trame)
266  {
267  Log.d(TAG, "traiterTrame() " + trame);
268  trame = trame.replace("\r\n", "");
269  String[] trameSectionee = trame.split(";", 5);
270  for(int i=0; i < trameSectionee.length; ++i)
271  {
272  Log.d(TAG, "traiterTrame() trameSectionee[" + i + "] = " + trameSectionee[i]);
273  }
274 
275  switch (trameSectionee[1])
276  {
277  case("HIT"):
278  Log.d(TAG, "traiterTrame : HIT");
279  impact[0] = Integer.parseInt(trameSectionee[2]);
280  impact[1] = Integer.parseInt(trameSectionee[3]);
281  impact[2] = Integer.parseInt(trameSectionee[4]);
283  impactEstRecu = true;
284  break;
285  case("NEXT"):
286  Log.d(TAG, "traiterTrame : NEXT");
287  estAuSuivant = true;
288  break;
289  }
290  }
291 
293  {
294  return typeJeu;
295  }
296 }
TypeJeu typeJeu
Mode de jeu.
Definition: Partie.java:47
void cibleManquee()
Méthode envoyant une fléchette manquée.
Definition: Partie.java:254
La classe qui contient toute la gestion de partie.
Definition: Partie.java:25
static final int JOUEUR_SUIVANT
Definition: Partie.java:36
int nbJoueurs
Nombre de joueurs.
Definition: Partie.java:45
void demarrerPartie()
Méthode permettant de démarrer la partie.
Definition: Partie.java:72
Handler handlerUI
Handler pour gérer l&#39;interface.
Definition: Partie.java:52
void attendreImpact()
Méthode permettant d&#39;attendre qu&#39;un nouvel impact arrive.
Definition: Partie.java:130
void actualiserJoueurIHM(String monJoueur)
Actualiser le joueur à IHM.
Definition: Partie.java:186
static final int ENVOYER_AQUITTEMENT
Definition: Partie.java:40
void envoyerGagnantIHM(Joueur monJoueur)
Envoyer le gagnant a IHM.
Definition: Partie.java:238
La classe qui contient toute la gestion des types de parties.
Definition: TypeJeu.java:17
boolean retirerPoint(int scoreLancer, Partie maPartie)
Fonction permettant le retrait ou non de points d&#39;un joueur.
Definition: Joueur.java:96
Partie(ArrayList< Joueur > lesJoueurs, TypeJeu typeJeu, Handler handlerUI)
Definition: Partie.java:56
void traiterTrame(String trame)
Definition: Partie.java:265
int nbManche
Nombre de manches.
Definition: Partie.java:46
static final String TAG
Tag pour Log.
Definition: Partie.java:30
La classe qui contient toute la gestion des joueurs.
Definition: Joueur.java:19
static final int SET_SCORE
Definition: Partie.java:37
boolean estFini
Booléen pour savoir si la partie est finie.
Definition: Partie.java:51
ArrayList< Joueur > lesJoueurs
Les objets Joueur stockeés dans un conteneur (Queue)
Definition: Partie.java:48
boolean estDoubleImpact
Booléen pour savoir si le dernier impact est du type double.
Definition: Partie.java:53
boolean estAuSuivant
Booléen permettant de savoir si il faut passer au joueur suivant.
Definition: Partie.java:54
String getNom()
Accesseur du nom du joueur.
Definition: Joueur.java:52
boolean impactEstRecu
Booléen pour savoir quand on reçoit une trame impact.
Definition: Partie.java:50
void actualiserScoreIHM(Joueur monJoueur, int score)
Méthode permettant d&#39;actualiser le score du joueur à IHM.
Definition: Partie.java:168
void impactIHM(int Touche, int MultiplicateurTouche, int ID)
Envoyer impact à IHM.
Definition: Partie.java:205
static final int NB_FLECHETTE
Nombre de flechettes par volee.
Definition: Partie.java:31
int impact[]
Les impacts.
Definition: Partie.java:49
void envoyerAquittement()
Envoyer Aquittement à la cible.
Definition: Partie.java:224