fix effet de carte mal atribué + changement le fight back ne nessecite plus la survie de la victime + patch but d'actualisation de carte + ajout de details aux logs

This commit is contained in:
marc barbier
2021-01-10 22:55:59 +01:00
parent 3b7f0a6aea
commit cfe54c413c
11 changed files with 121 additions and 123 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+13 -1
View File
@@ -9,6 +9,7 @@ public class ComsJoueur {
private ObjectOutputStream serverOut; private ObjectOutputStream serverOut;
private ObjectInputStream serverIn; private ObjectInputStream serverIn;
private Socket socket; private Socket socket;
private String name=null;
public ComsJoueur(Socket connection) throws IOException public ComsJoueur(Socket connection) throws IOException
{ {
@@ -27,7 +28,10 @@ public class ComsJoueur {
public void send(String message) throws IOException public void send(String message) throws IOException
{ {
serverOut.writeObject(message); serverOut.writeObject(message);
System.out.println("Sending "+message); if(name == null)
System.out.println("Sending "+message);
else
System.out.println("Sending "+message+" to "+name);
} }
@@ -40,6 +44,10 @@ public class ComsJoueur {
{ {
try { try {
String message = (String) serverIn.readObject(); String message = (String) serverIn.readObject();
if(name == null)
System.out.println("Sending "+message);
else
System.out.println("Sending "+message+" to "+name);
return message; return message;
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
System.err.println("ERREUR une classe non trouvé a éte transimise , essayer de n'evoyer que des String"); System.err.println("ERREUR une classe non trouvé a éte transimise , essayer de n'evoyer que des String");
@@ -76,4 +84,8 @@ public class ComsJoueur {
send(""+message); send(""+message);
} }
public void setName(String name) {
this.name=name;
}
} }
+78 -92
View File
@@ -16,6 +16,8 @@ import game.deck.Deck;
import game.deck.DeckRegistery; import game.deck.DeckRegistery;
public class Joueur { public class Joueur {
//utile pour les logs
private String name;
private ComsJoueur coms; private ComsJoueur coms;
private Deck deck; private Deck deck;
private Hand hand; private Hand hand;
@@ -26,15 +28,18 @@ public class Joueur {
// la mana actuele du joueur // la mana actuele du joueur
private int mana; private int mana;
public Joueur(ComsJoueur connectionJoueur) { public Joueur(ComsJoueur connectionJoueur,String name) {
this.name=name;
coms = connectionJoueur; coms = connectionJoueur;
pV = 20; pV = 20;
this.board = new Board(); this.board = new Board();
} }
/** /**
* cette fonction permet d'obtenir le deck du joueur et de préparer la main * cette fonction permet d'obtenir le deck du joueur et de préparer la main /!\\
* /!\\ l'appele de cette fonction doit être protegé par la verification de la tille du deck * l'appele de cette fonction doit être protegé par la verification de la tille
* du deck
*
* @throws IOException * @throws IOException
*/ */
public void requestDataEarlyGameData() throws IOException { public void requestDataEarlyGameData() throws IOException {
@@ -43,6 +48,7 @@ public class Joueur {
deck = DeckRegistery.get(deckname); deck = DeckRegistery.get(deckname);
deck.shuffle(); deck.shuffle();
hand = new Hand(deck); hand = new Hand(deck);
coms.setName(name);
coms.send(DeckSerializer.serializeDeck(deck)); coms.send(DeckSerializer.serializeDeck(deck));
draw(5); draw(5);
coms.send(Command.SET_HP); coms.send(Command.SET_HP);
@@ -53,8 +59,9 @@ public class Joueur {
} }
/** /**
* cette fonction permet de pioche une quantité donné * cette fonction permet de pioche une quantité donné /!\\ l'appele de cette
* /!\\ l'appele de cette fonction doit être protegé par la verification de la tille du deck * fonction doit être protegé par la verification de la tille du deck
*
* @param amount la quantié * @param amount la quantié
* @throws IOException * @throws IOException
*/ */
@@ -126,7 +133,7 @@ public class Joueur {
coms.getSocket().setSoTimeout(Integer.MAX_VALUE); coms.getSocket().setSoTimeout(Integer.MAX_VALUE);
if (command != null && !command.equals("time out")) { if (command != null && !command.equals("time out")) {
alive = 0; alive = 0;
System.out.println("GOT COMMAND :" + command); System.out.println("\rGOT COMMAND :" + command);
switch (command) { switch (command) {
@@ -176,7 +183,7 @@ public class Joueur {
int cardId = Integer.parseInt(info); int cardId = Integer.parseInt(info);
Class<? extends Card> cardClass = CardRegistery.get(cardId); Class<? extends Card> cardClass = CardRegistery.get(cardId);
System.out.println("searching :"+cardClass.getSimpleName()); System.out.println("searching :" + cardClass.getSimpleName());
int zone = Integer.parseInt(coms.recieve()); int zone = Integer.parseInt(coms.recieve());
@@ -239,13 +246,12 @@ public class Joueur {
*/ */
public void endPhase() { public void endPhase() {
Iterator<Card> it = board.getIterator(); Iterator<Card> it = board.getIterator();
while(it.hasNext()) while (it.hasNext()) {
{ Card c = it.next();
Card c = it.next(); if (c != null) {
if (c != null) { c.resetAttack();
c.resetAttack(); }
} }
}
} }
public ComsJoueur getComs() { public ComsJoueur getComs() {
@@ -314,7 +320,7 @@ public class Joueur {
String command = coms.recieve(); String command = coms.recieve();
coms.getSocket().setSoTimeout(Integer.MAX_VALUE); coms.getSocket().setSoTimeout(Integer.MAX_VALUE);
if (command != null && !command.equals("time out")) { if (command != null && !command.equals("time out")) {
System.out.println("GOT COMMAND :" + command); System.out.println("\rGOT COMMAND :" + command);
switch (command) { switch (command) {
@@ -336,23 +342,21 @@ public class Joueur {
Card attackingCard = board.getCardInZone(Integer.parseInt(carteAttaquante)); Card attackingCard = board.getCardInZone(Integer.parseInt(carteAttaquante));
if (attackingCard == null) { if (attackingCard == null) {
throw new RuntimeException("invalid attack"); throw new RuntimeException("invalid attack");
} else { } else {
if (carteCible.contains("100")) { if (carteCible.contains("100")) {
if(!attackingCard.hasAlreadyAttacked()) if (!attackingCard.hasAlreadyAttacked()) {
{
boolean isadvDead = handleAttackAgainstPlayer(attackingCard, adversaire); boolean isadvDead = handleAttackAgainstPlayer(attackingCard, adversaire);
if(isadvDead) if (isadvDead) {
{
phaseActive = false; phaseActive = false;
} }
attackingCard.hasAttacked(); attackingCard.hasAttacked();
} }
} else { } else {
Card attackedCard = adversaire.getBoard().getCardInZone(Integer.parseInt(carteCible)); Card attackedCard = adversaire.getBoard().getCardInZone(Integer.parseInt(carteCible));
if (!attackingCard.hasAlreadyAttacked() && !(attackedCard instanceof IInvisible) && !(attackingCard instanceof IPlayerFocused)) { if (!attackingCard.hasAlreadyAttacked() && !(attackedCard instanceof IInvisible)
&& !(attackingCard instanceof IPlayerFocused)) {
handleAttackAgainstCard(carteAttaquante, carteCible, adversaire); handleAttackAgainstCard(carteAttaquante, carteCible, adversaire);
attackingCard.hasAttacked(); attackingCard.hasAttacked();
} }
@@ -369,20 +373,17 @@ public class Joueur {
} }
private boolean handleAttackAgainstPlayer(Card attackingCard, Joueur adversaire) throws IOException { private boolean handleAttackAgainstPlayer(Card attackingCard, Joueur adversaire) throws IOException {
int damage = attackingCard.getAttack(); int damage = attackingCard.getAttack();
if(attackingCard instanceof IAntiPlayer) if (attackingCard instanceof IAntiPlayer) {
{
damage *= 2; damage *= 2;
} }
if(attackingCard instanceof IShortRange) if (attackingCard instanceof IShortRange) {
{
damage = 0; damage = 0;
} }
boolean result = adversaire.takeDamage(damage); boolean result = adversaire.takeDamage(damage);
if(!result) if (!result) {
{
adversaire.updateHp(this); adversaire.updateHp(this);
return false; return false;
} }
@@ -397,61 +398,48 @@ public class Joueur {
} }
private void handleAttackAgainstCard(String carteAttaquante, String carteCible, Joueur adversaire) throws IOException { private void handleAttackAgainstCard(String carteAttaquante, String carteCible, Joueur adversaire)
throws IOException {
Card attackedCard = adversaire.getBoard().getCardInZone(Integer.parseInt(carteCible)); Card attackedCard = adversaire.getBoard().getCardInZone(Integer.parseInt(carteCible));
Card attackingCard = board.getCardInZone(Integer.parseInt(carteAttaquante)); Card attackingCard = board.getCardInZone(Integer.parseInt(carteAttaquante));
if (attackedCard == null) { if (attackedCard == null) {
throw new RuntimeException( throw new RuntimeException(
"error invalid carteCible:" + carteCible + " carteAttaquante : " + attackingCard); "error invalid carteCible:" + carteCible + " carteAttaquante : " + attackingCard);
} }
boolean isDestroyed = attackedCard.takeDamage(attackingCard.getAttack()); boolean isDestroyed = attackedCard.takeDamage(attackingCard.getAttack());
if(attackingCard instanceof ILifeSteal) if (attackingCard instanceof ILifeSteal) {
{
attackingCard.heal(attackingCard.getAttack()); attackingCard.heal(attackingCard.getAttack());
updateCardHp(attackingCard, this); updateCardHp(attackingCard, this);
} }
if (isDestroyed || attackingCard instanceof IToxic) { if (isDestroyed || attackingCard instanceof IToxic) {
adversaire.destroyCard(carteCible,this); adversaire.destroyCard(carteCible, this);
}else { }
adversaire.updateCardHp(attackedCard, this);
//cette partie est le fightback C.A.D quand tu attaque une carte si elle survit elle te frape a son tour adversaire.updateCardHp(attackedCard, this);
if(attackedCard.getAttack() > 0 && !(attackingCard instanceof ICanDoge))
{
isDestroyed = attackingCard.takeDamage(attackedCard.getAttack());
if(isDestroyed)
{
// on suprime la carte du terrain
board.setCard(Integer.parseInt(carteAttaquante), null);
// demande a l'adversaire de retirer la carte de son terrain
adversaire.getComs().send(Command.DESTROY_ADV_CARD);
adversaire.getComs().send(carteAttaquante);
// retire la carte au terrain adverse
this.getComs().send(Command.DESTROY_CARD);
this.getComs().send(carteAttaquante);
// appelle les effet de quand la carte est détruite
// NOTE : non implémenter dans les cartes individuelles par manque de temps
attackingCard.onCardDestroyed();
}else {
adversaire.updateCardHp(attackingCard, this);
}
// cette partie est le fightback C.A.D quand tu attaque une carte si elle survit
// elle te frape a son tour
System.out.println(attackedCard.getAttack() + " " + !(attackingCard instanceof ICanDoge));
if (attackedCard.getAttack() > 0 && !(attackingCard instanceof ICanDoge)) {
System.out.println("Fight back started");
isDestroyed = attackingCard.takeDamage(attackedCard.getAttack());
if (isDestroyed || attackedCard instanceof IToxic) {
System.out.println("destroying");
this.destroyCard(carteAttaquante, adversaire);
} else {
System.out.println("the card took" + attackedCard.getAttack());
updateCardHp(attackedCard, adversaire);
} }
} }
} }
private void destroyCard(String carteCible, Joueur adversaire) throws IOException {
private void destroyCard(String carteCible,Joueur adversaire) throws IOException
{
Card attackedCard = getBoard().getCardInZone(Integer.parseInt(carteCible)); Card attackedCard = getBoard().getCardInZone(Integer.parseInt(carteCible));
board.setCard(Integer.parseInt(carteCible), null); board.setCard(Integer.parseInt(carteCible), null);
@@ -469,42 +457,46 @@ public class Joueur {
attackedCard.onCardDestroyed(); attackedCard.onCardDestroyed();
} }
/** /**
* met a jorus les hp d'une carte tout ce passe du poin de vue du joueur * met a jorus les hp d'une carte tout ce passe du poin de vue du joueur
*
* @param cardToUpDate * @param cardToUpDate
* @param adversaire * @param adversaire
* @throws IOException * @throws IOException
*/ */
private void updateCardHp(Card cardToUpDate,Joueur adversaire) throws IOException private void updateCardHp(Card cardToUpDate, Joueur adversaire) throws IOException {
{ int zone = board.getZoneOf(cardToUpDate);
int zone = board.getZoneOf(cardToUpDate); if (zone == -1)
if(zone == -1)return; return;
adversaire.getComs().send(Command.SET_ADV_CARD_HP); adversaire.getComs().send(Command.SET_ADV_CARD_HP);
adversaire.getComs().send(zone+""); adversaire.getComs().send(zone + "");
adversaire.getComs().send(cardToUpDate.getHealth()); adversaire.getComs().send(cardToUpDate.getHealth());
this.getComs().send(Command.SET_CARD_HP); this.getComs().send(Command.SET_CARD_HP);
this.getComs().send(zone+""); this.getComs().send(zone + "");
this.getComs().send(cardToUpDate.getHealth()); this.getComs().send(cardToUpDate.getHealth());
} }
/** /**
* met a jorus les dmg d'une carte tout ce passe du poin de vue du joueur * met a jorus les dmg d'une carte tout ce passe du poin de vue du joueur
*
* @param cardToUpDate * @param cardToUpDate
* @param adversaire * @param adversaire
* @throws IOException * @throws IOException
*/ */
private void updateCardAtk(Card cardToUpDate,Joueur adversaire) throws IOException private void updateCardAtk(Card cardToUpDate, Joueur adversaire) throws IOException {
{ int zone = board.getZoneOf(cardToUpDate);
int zone = board.getZoneOf(cardToUpDate); if (zone == -1)
if(zone == -1)return; return;
System.out.println("updating card "+cardToUpDate+" of "+name);
adversaire.getComs().send(Command.SET_ADV_CARD_ATK); adversaire.getComs().send(Command.SET_ADV_CARD_ATK);
adversaire.getComs().send(zone+""); adversaire.getComs().send(zone + "");
adversaire.getComs().send(cardToUpDate.getAttack()); adversaire.getComs().send(cardToUpDate.getAttack());
this.getComs().send(Command.SET_CARD_ATK); this.getComs().send(Command.SET_CARD_ATK);
this.getComs().send(zone+""); this.getComs().send(zone + "");
this.getComs().send(cardToUpDate.getAttack()); this.getComs().send(cardToUpDate.getAttack());
} }
@@ -514,11 +506,11 @@ public class Joueur {
/** /**
* inflige des degats au joueur * inflige des degats au joueur
*
* @param amount * @param amount
* @return true si les pv du joueur on attein zero * @return true si les pv du joueur on attein zero
*/ */
public boolean takeDamage(int amount) public boolean takeDamage(int amount) {
{
pV -= amount; pV -= amount;
pV = pV > 0 ? pV : 0; pV = pV > 0 ? pV : 0;
return pV == 0; return pV == 0;
@@ -528,18 +520,15 @@ public class Joueur {
public void onTurnStart(Joueur adversaire) throws IOException { public void onTurnStart(Joueur adversaire) throws IOException {
int index = 0; int index = 0;
Iterator<Card> it = board.getIterator(); Iterator<Card> it = board.getIterator();
while(it.hasNext()) while (it.hasNext()) {
{
Card c = it.next(); Card c = it.next();
if(c != null) if (c != null) {
{
c.onTurnStart(); c.onTurnStart();
if(!(c.getHealth() == 0)) if (!(c.getHealth() == 0)) {
{
updateCardHp(c, adversaire); updateCardHp(c, adversaire);
updateCardAtk(c, adversaire); updateCardAtk(c, adversaire);
}else { } else {
destroyCard(index+"", adversaire); destroyCard(index + "", adversaire);
} }
} }
@@ -551,17 +540,14 @@ public class Joueur {
public void refreshAllCard(Joueur adversaire) throws IOException { public void refreshAllCard(Joueur adversaire) throws IOException {
int index = 0; int index = 0;
Iterator<Card> it = board.getIterator(); Iterator<Card> it = board.getIterator();
while(it.hasNext()) while (it.hasNext()) {
{
Card c = it.next(); Card c = it.next();
if(c != null) if (c != null) {
{ if (!(c.getHealth() == 0)) {
if(!(c.getHealth() == 0))
{
updateCardHp(c, adversaire); updateCardHp(c, adversaire);
updateCardAtk(c, adversaire); updateCardAtk(c, adversaire);
}else { } else {
destroyCard(index+"", adversaire); destroyCard(index + "", adversaire);
} }
} }
+4 -4
View File
@@ -12,11 +12,11 @@ public class Match extends Thread {
// random j2/j1 // random j2/j1
rand = new Random(); rand = new Random();
if (rand.nextBoolean()) { if (rand.nextBoolean()) {
joueur1 = new Joueur(joueur1Com); joueur1 = new Joueur(joueur1Com,"j1");
joueur2 = new Joueur(joueur2Com); joueur2 = new Joueur(joueur2Com,"j2");
} else { } else {
joueur1 = new Joueur(joueur2Com); joueur1 = new Joueur(joueur2Com,"j1");
joueur2 = new Joueur(joueur1Com); joueur2 = new Joueur(joueur1Com,"j2");
} }
joueur1.requestDataEarlyGameData(); joueur1.requestDataEarlyGameData();
+1 -1
View File
@@ -77,7 +77,7 @@ public abstract class Card{
}else { }else {
health -= amountOfHpToLose; health -= amountOfHpToLose;
} }
return health == 0; return health <= 0;
} }
public boolean hasAlreadyAttacked() { public boolean hasAlreadyAttacked() {
+2 -2
View File
@@ -1,8 +1,8 @@
package game.cards.MoyenAge; package game.cards.MoyenAge;
import game.cards.SpecialCard.HealthBufCard; import game.cards.SpecialCard.StrongifyBufCard;
public class Moyen_Age_Louis extends HealthBufCard{ public class Moyen_Age_Louis extends StrongifyBufCard{
/** /**
@@ -15,7 +15,7 @@ public abstract class StrongifyBufCard extends BufCard{
Card card = it.next(); Card card = it.next();
if(card != null) if(card != null)
{ {
card.heal(1); card.makeStronger(1);
} }
} }
} }