deplacement des chaines de caractére dans strings.xml et amélioratoin des toast

This commit is contained in:
marc barbier
2021-01-10 14:29:18 +01:00
parent 5f67e85598
commit bead53795d
6 changed files with 110 additions and 64 deletions
@@ -12,13 +12,11 @@ import android.media.SoundPool;
import android.os.Build; import android.os.Build;
import android.util.Log; import android.util.Log;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.widget.Toast;
import com.iutlaval.myapplication.Game.Cards.Card; import com.iutlaval.myapplication.Game.Cards.Card;
import com.iutlaval.myapplication.Game.Cards.CardRegistery; import com.iutlaval.myapplication.Game.Cards.CardRegistery;
import com.iutlaval.myapplication.GameActivity; import com.iutlaval.myapplication.GameActivity;
import com.iutlaval.myapplication.MainActivity; import com.iutlaval.myapplication.MainActivity;
import com.iutlaval.myapplication.PopupRunable;
import com.iutlaval.myapplication.R; import com.iutlaval.myapplication.R;
import com.iutlaval.myapplication.Video.Drawables.DrawableBitmap; import com.iutlaval.myapplication.Video.Drawables.DrawableBitmap;
import com.iutlaval.myapplication.Video.Drawables.DrawableCard; import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
@@ -42,8 +40,15 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
public static final int BUTTON_X_POS = 0; public static final int BUTTON_X_POS = 0;
public static final float BUTTON_X_SIZE = 20F; public static final float BUTTON_X_SIZE = 20F;
public static final float BUTTON_Y_SIZE = 10F; public static final float BUTTON_Y_SIZE = 10F;
public static final String BUTTONTURN_DRAWABLE_NAME = "buttonturn"; public static final String BUTTON_TURN_DRAWABLE_NAME = "buttonturn";
private Context cont;
//les constantes des id des sons
public static final String CARD_SOUND = "card";
public static final String FIGHT_SOUND = "fight";
public static final String WIN_SOUND = "win";
public static final String LOSE_SOUND = "lose";
private Renderer renderer; private Renderer renderer;
private boolean ready; private boolean ready;
private TouchHandler touch; private TouchHandler touch;
@@ -81,15 +86,15 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
public GameLogicThread(GameActivity gameActivity, String deckName, Renderer renderer) public GameLogicThread(GameActivity gameActivity, String deckName, Renderer renderer)
{ {
this.gameActivity = gameActivity;
this.deckName=deckName; this.deckName=deckName;
this.renderer = renderer;
Log.e("RESOLUTION:",""+GameActivity.screenWidth+"x"+GameActivity.screenHeight); Log.e("RESOLUTION:",""+GameActivity.screenWidth+"x"+GameActivity.screenHeight);
ready=false; ready=false;
this.cont = gameActivity;
this.renderer = renderer;
board=new Board(); board=new Board();
touch = new TouchHandler(renderer,this,gameActivity); touch = new TouchHandler(renderer,this,gameActivity);
hand = new Hand(); hand = new Hand();
this.gameActivity=gameActivity;
GameActivity.setGameEngine(this); GameActivity.setGameEngine(this);
isYourMainPhase =false; isYourMainPhase =false;
cancelled=false; cancelled=false;
@@ -106,8 +111,8 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
Bitmap bitmapEnemyTurn = BitmapFactory.decodeResource(renderer.getResources(),R.drawable.t_pb_enemy_turn); Bitmap bitmapEnemyTurn = BitmapFactory.decodeResource(renderer.getResources(),R.drawable.t_pb_enemy_turn);
Bitmap bitmapBattlePhase = BitmapFactory.decodeResource(renderer.getResources(),R.drawable.t_pb_battlephase); Bitmap bitmapBattlePhase = BitmapFactory.decodeResource(renderer.getResources(),R.drawable.t_pb_battlephase);
Bitmap bitmapButtonEnd = BitmapFactory.decodeResource(renderer.getResources(),R.drawable.t_btn_boutonfintour); Bitmap bitmapButtonEnd = BitmapFactory.decodeResource(renderer.getResources(),R.drawable.t_btn_boutonfintour);
Bitmap bitmapVictory = BitmapFactory.decodeResource(cont.getResources(), R.drawable.t_pb_victory); Bitmap bitmapVictory = BitmapFactory.decodeResource(gameActivity.getResources(), R.drawable.t_pb_victory);
Bitmap bitmapDefeat = BitmapFactory.decodeResource(cont.getResources(), R.drawable.t_pb_defeat); Bitmap bitmapDefeat = BitmapFactory.decodeResource(gameActivity.getResources(), R.drawable.t_pb_defeat);
Log.i("loading","prefs"); Log.i("loading","prefs");
SharedPreferences sharedPref = gameActivity.getSharedPreferences("handicape",Context.MODE_PRIVATE); SharedPreferences sharedPref = gameActivity.getSharedPreferences("handicape",Context.MODE_PRIVATE);
@@ -116,9 +121,9 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
Bitmap bitmapBackground; Bitmap bitmapBackground;
if(!modeHandicape) if(!modeHandicape)
{ {
bitmapBackground = BitmapFactory.decodeResource(cont.getResources(), R.drawable.t_b_board_background); bitmapBackground = BitmapFactory.decodeResource(gameActivity.getResources(), R.drawable.t_b_board_background);
}else{ }else{
bitmapBackground = BitmapFactory.decodeResource(cont.getResources(), R.drawable.t_b_board_background_handicapted); bitmapBackground = BitmapFactory.decodeResource(gameActivity.getResources(), R.drawable.t_b_board_background_handicapted);
} }
final int maxAudioStream = 2; final int maxAudioStream = 2;
@@ -132,10 +137,10 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
} }
soundPool.setOnLoadCompleteListener(this); soundPool.setOnLoadCompleteListener(this);
soundMap=new HashMap<>(); soundMap=new HashMap<>();
soundMap.put("fight",soundPool.load(cont,R.raw.combat_sfx,1)); soundMap.put(FIGHT_SOUND,soundPool.load(gameActivity,R.raw.combat_sfx,1));
soundMap.put("card",soundPool.load(cont,R.raw.carte_jouer_sfx,1)); soundMap.put(CARD_SOUND,soundPool.load(gameActivity,R.raw.carte_jouer_sfx,1));
soundMap.put("win",soundPool.load(cont,R.raw.victoire,1)); soundMap.put(WIN_SOUND,soundPool.load(gameActivity,R.raw.victoire,1));
soundMap.put("lose",soundPool.load(cont,R.raw.defaite,1)); soundMap.put(LOSE_SOUND,soundPool.load(gameActivity,R.raw.defaite,1));
@@ -158,7 +163,7 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
loopMusic =R.raw.renaissence_loop; loopMusic =R.raw.renaissence_loop;
break; break;
} }
backgroundMusicPlayer = MediaPlayer.create(cont,startSound); backgroundMusicPlayer = MediaPlayer.create(gameActivity,startSound);
backgroundMusicPlayer.setVolume(0.5F,0.5F); backgroundMusicPlayer.setVolume(0.5F,0.5F);
backgroundMusicPlayer.setOnCompletionListener(this); backgroundMusicPlayer.setOnCompletionListener(this);
backgroundMusicPlayer.setScreenOnWhilePlaying(true); backgroundMusicPlayer.setScreenOnWhilePlaying(true);
@@ -173,8 +178,8 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
ready=true; ready=true;
final String host = "2.tcp.ngrok.io";//192.168.43.251tcp://2.tcp.ngrok.io: final String host = "2.tcp.ngrok.io"; // adresse du serveur
final int port = 17057; final int port = 17057; // port du serveur
//on fait trois essay de connection //on fait trois essay de connection
@@ -191,7 +196,7 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
if(coms == null) if(coms == null)
{ {
Log.e("ERROR SERVER DEAD","srv"); Log.e("ERROR SERVER DEAD","srv");
gameActivity.runOnUiThread(new PopupRunable("erreur de comunication avec le serveur",gameActivity)); PopupRunable.makePopup(gameActivity,R.string.comserr);
//on arette le moteur de rendu //on arette le moteur de rendu
renderer.terminate(); renderer.terminate();
//et on retourne la 'activité precedente //et on retourne la 'activité precedente
@@ -259,7 +264,7 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
case Command.GET_DECK: case Command.GET_DECK:
coms.send(deckName); coms.send(deckName);
String deckstr = coms.recieve(); String deckstr = coms.recieve();
deck = new NetworkDeck(deckstr,gameActivity.getBaseContext()); deck = new NetworkDeck(deckstr, gameActivity.getBaseContext());
Log.e("got deck",deckstr); Log.e("got deck",deckstr);
break; break;
case Command.DRAW: case Command.DRAW:
@@ -273,34 +278,34 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
isYourMainPhase =true; isYourMainPhase =true;
isYourBattlePhase=false; isYourBattlePhase=false;
renderer.addToDrawWithoutUpdate(new DrawableSelfRemoving(new DrawableBitmap(bitmapYourTurn,0,0,"yourTurn",100F,50F),1)); renderer.addToDrawWithoutUpdate(new DrawableSelfRemoving(new DrawableBitmap(bitmapYourTurn,0,0,"yourTurn",100F,50F),1));
renderer.addToDraw(new DrawableBitmap(bitmapButtonEnd, BUTTON_X_POS, BUTTON_Y_POS, BUTTONTURN_DRAWABLE_NAME, BUTTON_X_SIZE, BUTTON_Y_SIZE)); renderer.addToDraw(new DrawableBitmap(bitmapButtonEnd, BUTTON_X_POS, BUTTON_Y_POS, BUTTON_TURN_DRAWABLE_NAME, BUTTON_X_SIZE, BUTTON_Y_SIZE));
break; break;
case Command.SETMANA: case Command.SETMANA:
renderer.removeToDrawWithoutUpdate("mana"); renderer.removeToDrawWithoutUpdate("mana");
mana = coms.recieveInt(); mana = coms.recieveInt();
renderer.addToDraw(new DrawableText("Mana : "+mana,85F,60F,"mana",13.3F,6.65F,20, 100,30,Color.WHITE)); renderer.addToDraw(new DrawableText( gameActivity.getResources().getString(R.string.mana)+" : "+mana,85F,60F,"mana",13.3F,6.65F,20, 100,30,Color.WHITE));
break; break;
case Command.ENEMYTURN: case Command.ENEMYTURN:
isYourMainPhase =false; isYourMainPhase =false;
renderer.removeToDraw(BUTTONTURN_DRAWABLE_NAME); renderer.removeToDraw(BUTTON_TURN_DRAWABLE_NAME);
renderer.removeToDraw("battlePhase"); renderer.removeToDraw("battlePhase");
renderer.addToDraw(new DrawableSelfRemoving(new DrawableBitmap(bitmapEnemyTurn,0,0,"enemyTurn",100F,50F),1)); renderer.addToDraw(new DrawableSelfRemoving(new DrawableBitmap(bitmapEnemyTurn,0,0,"enemyTurn",100F,50F),1));
break; break;
case Command.POPUP: case Command.POPUP:
String recivedMessage = coms.recieve(); String recivedMessage = coms.recieve();
gameActivity.runOnUiThread(new PopupRunable(recivedMessage,gameActivity)); PopupRunable.makePopup(gameActivity,recivedMessage);
Log.e("popup",recivedMessage); Log.e("popup",recivedMessage);
break; break;
case Command.WIN: case Command.WIN:
//on termine la parite //on termine la parite
backgroundMusicPlayer.stop(); backgroundMusicPlayer.stop();
playSound("win"); playSound(WIN_SOUND);
gameActivity.runOnUiThread(new PopupRunable("bravo ! vous avez gagné",gameActivity)); PopupRunable.makePopup(gameActivity,R.string.victoire);
renderer.addToDraw(new DrawableBitmap(bitmapVictory,0,0,"victory",100F,50F)); renderer.addToDraw(new DrawableBitmap(bitmapVictory,0,0,"victory",100F,50F));
renderer.updateFrame(); renderer.updateFrame();
cancelled = true; cancelled = true;
@@ -311,8 +316,8 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
case Command.LOSE: case Command.LOSE:
//on termine la partie //on termine la partie
backgroundMusicPlayer.stop(); backgroundMusicPlayer.stop();
playSound("lose"); playSound(LOSE_SOUND);
gameActivity.runOnUiThread(new PopupRunable("vous avez perdu!",gameActivity)); PopupRunable.makePopup(gameActivity,R.string.lose);
renderer.addToDraw(new DrawableBitmap(bitmapDefeat,0,0,"defeat",100F,50F)); renderer.addToDraw(new DrawableBitmap(bitmapDefeat,0,0,"defeat",100F,50F));
renderer.updateFrame(); renderer.updateFrame();
cancelled=true; cancelled=true;
@@ -335,7 +340,7 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
//on instancie la carte recu //on instancie la carte recu
Class<? extends Card> c = CardRegistery.get(cardId); Class<? extends Card> c = CardRegistery.get(cardId);
Constructor con = c.getConstructor(String.class, Context.class); Constructor con = c.getConstructor(String.class, Context.class);
Card cardPlayed = (Card) con.newInstance("enemy"+zone,gameActivity); Card cardPlayed = (Card) con.newInstance("enemy"+zone, gameActivity);
cardPlayed.getDrawableCard().setOnBoard(true); cardPlayed.getDrawableCard().setOnBoard(true);
//ajout de la carte au rendu //ajout de la carte au rendu
@@ -345,7 +350,7 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
//ajout la card au terain //ajout la card au terain
cardPlayed.getDrawableCard().setDraggable(false); cardPlayed.getDrawableCard().setDraggable(false);
board.setEnemyCard(zone,cardPlayed); board.setEnemyCard(zone,cardPlayed);
playSound("card"); playSound(CARD_SOUND);
break; break;
case Command.MEULE: case Command.MEULE:
@@ -377,13 +382,13 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
case Command.SET_ENEMY_HP: case Command.SET_ENEMY_HP:
renderer.removeToDrawWithoutUpdate("advHp"); renderer.removeToDrawWithoutUpdate("advHp");
renderer.addToDraw(new DrawableText(" Hp : " + coms.recieve(),1F,10F,"advHp",13.3F,6.65F,20, 100,30,Color.WHITE)); renderer.addToDraw(new DrawableText(gameActivity.getResources().getString(R.string.hp)+" : " + coms.recieve(),1F,10F,"advHp",13.3F,6.65F,20, 100,30,Color.WHITE));
break; break;
case Command.SET_HP: case Command.SET_HP:
renderer.removeToDrawWithoutUpdate("playerHp"); renderer.removeToDrawWithoutUpdate("playerHp");
renderer.addToDraw(new DrawableText(" Hp : " + coms.recieve(),85F,80F,"playerHp",13.3F,6.65F,20, 100,30,Color.WHITE)); renderer.addToDraw(new DrawableText(gameActivity.getResources().getString(R.string.hp)+ " : " + coms.recieve(),85F,80F,"playerHp",13.3F,6.65F,20, 100,30,Color.WHITE));
break; break;
case Command.SET_CARD_HP : case Command.SET_CARD_HP :
@@ -519,8 +524,6 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
protected synchronized boolean setOnCardPlayedRequest(DrawableCard card,int zone) protected synchronized boolean setOnCardPlayedRequest(DrawableCard card,int zone)
{ {
Log.e("request","recived");
//on ne peut pas avoir 2 requette simultané //on ne peut pas avoir 2 requette simultané
while(!requestPlaceCardDone) while(!requestPlaceCardDone)
{ {
@@ -543,7 +546,7 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
} }
if(requestPlaceCardResult) if(requestPlaceCardResult)
{ {
playSound("card"); playSound(CARD_SOUND);
} }
return requestPlaceCardResult; return requestPlaceCardResult;
} }
@@ -576,7 +579,7 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
} }
} }
playSound("fight"); playSound(FIGHT_SOUND);
return true; return true;
} }
@@ -628,10 +631,7 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
{ {
requestEnd=true; requestEnd=true;
}else{ }else{
Toast t = new Toast(gameActivity); PopupRunable.makePopup(gameActivity,R.string.notYourTurn);
t.setText("IT'S NOT YOUR TURN BE PATIENT");
t.setDuration(Toast.LENGTH_SHORT);
t.show();
} }
} }
@@ -660,10 +660,14 @@ public class GameLogicThread extends Thread implements SoundPool.OnLoadCompleteL
} }
} }
/**
* lance la boucle de la musique a la fin de l'introduction de la mussique
* @param mp
*/
@Override @Override
public void onCompletion(MediaPlayer mp) { public void onCompletion(MediaPlayer mp) {
mp.reset(); mp.reset();
backgroundMusicPlayer = MediaPlayer.create(cont, loopMusic); backgroundMusicPlayer = MediaPlayer.create(gameActivity, loopMusic);
backgroundMusicPlayer.setVolume(0.5F,0.5F); backgroundMusicPlayer.setVolume(0.5F,0.5F);
backgroundMusicPlayer.setOnCompletionListener(this); backgroundMusicPlayer.setOnCompletionListener(this);
backgroundMusicPlayer.setScreenOnWhilePlaying(true); backgroundMusicPlayer.setScreenOnWhilePlaying(true);
@@ -0,0 +1,48 @@
package com.iutlaval.myapplication.Game;
import android.app.Activity;
import android.content.Context;
import android.widget.Toast;
import com.iutlaval.myapplication.R;
/**
* cette classe permet de faire des toast en dehors de du thread de l'activité
*/
public class PopupRunable implements Runnable{
String recivedMessage;
Context context;
private PopupRunable(Activity cont, String recivedMessage)
{
this.recivedMessage=recivedMessage;
this.context=cont;
}
@Override
public void run() {
Toast popupToast = Toast.makeText(context,recivedMessage,Toast.LENGTH_LONG);
popupToast.show();
}
/**
* affiche un toast avec le texte provenant de l'id donné (R.string.*)
* @param activity
* @param stringId
*/
public static void makePopup(Activity activity,int stringId)
{
String recivedMessage = activity.getResources().getString(stringId);
new PopupRunable(activity,recivedMessage).run();
}
/**
* affiche un toast avec le texte passé en argument
* @param activity
* @param message
*/
public static void makePopup(Activity activity,String message)
{
new PopupRunable(activity,message).run();
}
}
@@ -73,8 +73,10 @@ public class MainActivity extends AppCompatActivity {
if(!disabledMode) if(!disabledMode)
{ {
handicapeButton.setImageBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.t_h_handicape)); handicapeButton.setImageBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.t_h_handicape));
handicapeButton.setContentDescription(getResources().getString(R.string.handicapeButtonon));
}else{ }else{
handicapeButton.setImageBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.t_h_handicape_greyed)); handicapeButton.setImageBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.t_h_handicape_greyed));
handicapeButton.setContentDescription(getResources().getString(R.string.handicapeButtonoff));
} }
disabledMode = ! disabledMode; disabledMode = ! disabledMode;
@@ -1,21 +0,0 @@
package com.iutlaval.myapplication;
import android.content.Context;
import android.widget.Toast;
public class PopupRunable implements Runnable{
String recivedMessage;
Context context;
public PopupRunable(String recivedMessage, Context context)
{
this.recivedMessage=recivedMessage;
this.context=context;
}
@Override
public void run() {
Toast popupToast = Toast.makeText(context,recivedMessage,Toast.LENGTH_LONG);
popupToast.show();
}
}
+4 -2
View File
@@ -13,6 +13,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:alpha="1" android:alpha="1"
android:contentDescription="@string/acceuilphoto"
android:rotation="0" android:rotation="0"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@@ -26,7 +27,7 @@
android:id="@+id/playButton" android:id="@+id/playButton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Jouer" android:text="@string/play"
android:textScaleX="1" android:textScaleX="1"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@@ -40,7 +41,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="12dp" android:layout_marginTop="12dp"
android:text="Carte" android:text="@string/card"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/playButton" app:layout_constraintEnd_toEndOf="@+id/playButton"
app:layout_constraintHorizontal_bias="1.0" app:layout_constraintHorizontal_bias="1.0"
@@ -55,6 +56,7 @@
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginBottom="32dp" android:layout_marginBottom="32dp"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:contentDescription="@string/handicapeButtonoff"
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:src="@drawable/t_h_handicape_greyed" android:src="@drawable/t_h_handicape_greyed"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
+11
View File
@@ -7,4 +7,15 @@
<string name="credit">Qui sommes nous</string> <string name="credit">Qui sommes nous</string>
<string name="creditText">"Nous sommes un groupe quatre étudiants du département informatique de l\'IUT de Laval nommés Marc BARBIER, Antoine GALBRUN, Clément CHERBONNIER et Adrien LIGOT. Cette application a été créée dans le cadre de notre projet tuteuré du semestre 3 en s'inspirant des jeux Hearthstone et Magic The Gathering mais sur un thème historique."</string> <string name="creditText">"Nous sommes un groupe quatre étudiants du département informatique de l\'IUT de Laval nommés Marc BARBIER, Antoine GALBRUN, Clément CHERBONNIER et Adrien LIGOT. Cette application a été créée dans le cadre de notre projet tuteuré du semestre 3 en s'inspirant des jeux Hearthstone et Magic The Gathering mais sur un thème historique."</string>
<string name="copyright">les effet sonores de victoires et de defaite vienne de mixkit.co</string> <string name="copyright">les effet sonores de victoires et de defaite vienne de mixkit.co</string>
<string name="play">Jouer</string>
<string name="card">Carte</string>
<string name="handicapeButtonoff">bouton handicape off</string>
<string name="handicapeButtonon">bouton handicape on</string>
<string name="acceuilphoto">Le choc des Histoires </string>
<string name="mana">mana</string>
<string name="victoire">bravo vous avez gagné</string>
<string name="hp">PV</string>
<string name="lose">vous avez perdu</string>
<string name="notYourTurn">"ce n\'est pas votre tours soyez patient"</string>
<string name="comserr">"erreur de comunication avec le serveur"</string>
</resources> </resources>