ajout du combat

This commit is contained in:
marc barbier
2021-01-03 23:08:04 +01:00
parent 7c344e11f8
commit db523a9d13
8 changed files with 219 additions and 32 deletions
@@ -43,7 +43,8 @@ public class GameLogicThread extends Thread{
private NetworkDeck deck;
private Hand hand;
private Board board;
private boolean isYourTurn;
private boolean isYourMainPhase;
private boolean isYourBattlePhase;
private boolean cancelled;
private String deckName;
private int mana=0;
@@ -51,9 +52,12 @@ public class GameLogicThread extends Thread{
//ces variable permette la comunication avec le thread android du tactile et le reseau en passant par ce thread
//cette variable controle la demande de gestion de placement de carte
private boolean requestPlaceCardDone =true;
private DrawableCard requestPlaceCardCard =null;
private int requestPlaceCardZone =-1;
//cette variable controle la demande de gestion de l'attaque
boolean requestAttackDone = true;
private DrawableCard requestDrawableCard =null;
private int requestCardZone =-1;
private boolean requestPlaceCardResult;
//si mise a true alors le thread va envoyer un message au serveur lui disant de passer a la phase suivante
@@ -71,8 +75,9 @@ public class GameLogicThread extends Thread{
hand = new Hand();
this.gameActivity=gameActivity;
GameActivity.setGameEngine(this);
isYourTurn=false;
isYourMainPhase =false;
cancelled=false;
isYourBattlePhase=false;
}
@Override
@@ -91,8 +96,8 @@ public class GameLogicThread extends Thread{
//Rectangle pos = new Rectangle(0F,0F,100F,100F);
ready=true;
final String host = "0.tcp.ngrok.io";//192.168.43.251tcp://2.tcp.ngrok.io:
final int port = 13562;
final String host = "2.tcp.ngrok.io";//192.168.43.251tcp://2.tcp.ngrok.io:
final int port = 13450;
try {
Socket client = new Socket(host, port);
@@ -108,18 +113,32 @@ public class GameLogicThread extends Thread{
//si quelquechose se passe alors c'est le server qu'il l'a dit
while(ready && !cancelled)
{
if(!requestPlaceCardDone && requestPlaceCardZone != -1 && requestPlaceCardCard != null)
if(!requestPlaceCardDone && requestCardZone != -1 && requestDrawableCard != null)
{
try {//on allonge le delais car sinon on skip l'autorisation serveur
coms.setUnlimitedTimeOut();
} catch (SocketException e) {}
requestPlaceCardResult = onCardPlayed(requestPlaceCardCard, requestPlaceCardZone);
requestPlaceCardZone =-1;
requestPlaceCardCard =null;
requestPlaceCardResult = onCardPlayed(requestDrawableCard, requestCardZone);
requestCardZone =-1;
requestDrawableCard =null;
Log.e("request","done");
requestPlaceCardDone =true;
}
if(!requestAttackDone && requestCardZone != -1 && requestDrawableCard != null)
{
int zoneAttaquant = board.getCardZone(requestDrawableCard);
try {
coms.send(Command.ATTACK);
coms.send(zoneAttaquant);
coms.send(requestCardZone);
} catch (IOException e) {
e.printStackTrace();
}
requestAttackDone=true;
}
if(requestEnd)
{
try {
@@ -129,9 +148,12 @@ public class GameLogicThread extends Thread{
e.printStackTrace();
}
requestEnd=false;
isYourBattlePhase=false;
}
try {
//on limite le temps du readobject pour eviter les blockaeg
coms.setLimitedTimeOut();
@@ -154,7 +176,8 @@ public class GameLogicThread extends Thread{
break;
case Command.YOURTURN:
isYourTurn=true;
isYourMainPhase =true;
isYourBattlePhase=false;
renderer.addToDraw(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));
break;
@@ -166,7 +189,7 @@ public class GameLogicThread extends Thread{
break;
case Command.ENEMYTURN:
isYourTurn=false;
isYourMainPhase =false;
//on update pas vu que l'instruction suivante va le faire
renderer.removeToDrawWithoutUpdate(BUTTONTURN_DRAWABLE_NAME);
@@ -217,10 +240,11 @@ public class GameLogicThread extends Thread{
cardPlayed.getDrawableCard().setOnBoard(true);
//ajout de la carte au rendu
cardPlayed.getDrawableCard().setCoordinates(((DrawableCard.getCardWith()+1)*zone+DrawableCard.getCardWith()),10F);
cardPlayed.getDrawableCard().setCoordinates(((DrawableCard.getCardWith()+1)*zone+20),10F);
renderer.addToDraw(cardPlayed.getDrawableCard());
//ajout la card au terain
cardPlayed.getDrawableCard().setDraggable(false);
board.setEnemyCard(zone,cardPlayed);
break;
@@ -230,6 +254,25 @@ public class GameLogicThread extends Thread{
int nbmeule = coms.recieveInt();
deck.draw(nbmeule);
case Command.BATTLE:
isYourBattlePhase=true;
isYourMainPhase=false;
break;
case Command.DESTROY_CARD:
//detruit la carte sur le terrain du joueur
int zoneOfTheDestroyedCard = coms.recieveInt();
Card cardToDestroy = board.removeCardOnPlayerBoard(zoneOfTheDestroyedCard);
renderer.removeToDraw(cardToDestroy);
break;
case Command.DESTROY_ADV_CARD:
//detruit la carte sur le terrain du joueur adverse
int zoneOfTheDestroyedEnemyCard = coms.recieveInt();
Card enemyCardToDestroy = board.removeCardOnEnemyPlayerBoard(zoneOfTheDestroyedEnemyCard);
renderer.removeToDraw(enemyCardToDestroy);
break;
case "timeout":
//ceci est une erreur et non une commande elle se doit donc de ne rien faire
break;
@@ -284,7 +327,7 @@ public class GameLogicThread extends Thread{
*/
private boolean onCardPlayed(DrawableCard card,int zone)
{
if(isYourTurn)
if(isYourMainPhase)
{
try {
//on veut jouer une carte
@@ -318,8 +361,8 @@ public class GameLogicThread extends Thread{
//on ne peut pas avoir 2 requette simultané
if(!requestPlaceCardDone)return false;
this.requestPlaceCardCard =card;
this.requestPlaceCardZone =zone;
this.requestDrawableCard =card;
this.requestCardZone =zone;
requestPlaceCardDone =false;
//on attends la fin de la requette
@@ -333,6 +376,38 @@ public class GameLogicThread extends Thread{
return requestPlaceCardResult;
}
public synchronized boolean setOnCardAttackRequest(DrawableCard card, int zoneCible) {
if(board.getAdvCardsOnBoard()[zoneCible] == null
|| card.getCard().getAttack() == 0)
{
return false;
}
//on ne peut pas avoir 2 requette simultané
while(!requestAttackDone) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.requestCardZone =zoneCible;
this.requestDrawableCard=card;
requestAttackDone =false;
//on attends la fin de la requette
while(!requestAttackDone) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return true;
}
/**
* cette fonction est appeller a chaque fin de frame
* CETTE FONCTION A UN IMPACT DIRECT SUR LES FPS ELLE SE DOIT D'être OPTIMAL
@@ -364,8 +439,8 @@ public class GameLogicThread extends Thread{
if(isReady())touch.onTouchEvent(event);
}
public boolean isYourTurn() {
return isYourTurn;
public boolean isYourMainPhase() {
return isYourMainPhase;
}
@@ -388,7 +463,7 @@ public class GameLogicThread extends Thread{
}
public void requestEndTurn() {
if(isYourTurn)
if(isYourMainPhase || isYourBattlePhase)
{
requestEnd=true;
}else{
@@ -398,4 +473,10 @@ public class GameLogicThread extends Thread{
t.show();
}
}
public boolean isYourBattlePhase() {
return isYourBattlePhase;
}
}