Merge branch 'master' of

https://github.com/Marc-Pierre-Barbier/PTS3-SERVEUR/

Conflicts:
	bin/game/Board.class
	bin/game/Command.class
	bin/game/Joueur.class
	bin/game/Match.class
	bin/game/cards/Card.class
	bin/game/cards/MoyenAge/Moyen_Age_Charlemagne.class
This commit is contained in:
marc committed 2021-01-06 20:19:59 +01:00
commit 158270f153
22 files changed
+219 -22

No files matched your search

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+28
View File
@@ -35,4 +35,32 @@ public class Board {
return Arrays.stream(board).iterator(); return Arrays.stream(board).iterator();
} }
public int getZoneOf(Card cardToUpDate) {
int index = 0;
for(Card c : board)
{
//si c'est la meme instance
if(c == cardToUpDate)
{
return index;
}
index++;
}
return -1;
}
public int getBoardSize()
{
int nbCardOnBoard = 0;
for(Card c : board)
{
//si c'est la meme instance
if(c != null)
{
nbCardOnBoard++;
}
}
return nbCardOnBoard;
}
} }
+2
View File
@@ -30,6 +30,8 @@ public final class Command {
public static final String SET_HP = "sethp"; public static final String SET_HP = "sethp";
public static final String SET_CARD_HP = "setcardhp"; public static final String SET_CARD_HP = "setcardhp";
public static final String SET_ADV_CARD_HP = "setadvcardhp"; public static final String SET_ADV_CARD_HP = "setadvcardhp";
public static final String SET_CARD_ATK = "setcardatk";
public static final String SET_ADV_CARD_ATK = "setadvcardatk";
} }
+85 -18
View File
@@ -5,7 +5,12 @@ import java.util.Iterator;
import game.cards.Card; import game.cards.Card;
import game.cards.CardRegistery; import game.cards.CardRegistery;
import game.cards.SpecialCard.IAntiPlayer;
import game.cards.SpecialCard.ICanDoge; import game.cards.SpecialCard.ICanDoge;
import game.cards.SpecialCard.IInvisible;
import game.cards.SpecialCard.ILifeSteal;
import game.cards.SpecialCard.IPlayerFocused;
import game.cards.SpecialCard.IShortRange;
import game.cards.SpecialCard.IToxic; import game.cards.SpecialCard.IToxic;
import game.deck.Deck; import game.deck.Deck;
import game.deck.DeckRegistery; import game.deck.DeckRegistery;
@@ -192,6 +197,7 @@ public class Joueur {
coms.send(Command.SETMANA); coms.send(Command.SETMANA);
mana -= handCard.getCost(); mana -= handCard.getCost();
coms.send(mana); coms.send(mana);
handCard.onCardPlaced(board);
} else { } else {
System.out.println("the zone is not avaliable"); System.out.println("the zone is not avaliable");
coms.send(Command.NOK); coms.send(Command.NOK);
@@ -317,7 +323,10 @@ public class Joueur {
String carteCible = coms.recieve(); String carteCible = coms.recieve();
if (!isInt(carteAttaquante) || !isInt(carteCible)) if (!isInt(carteAttaquante) || !isInt(carteCible))
throw new RuntimeException("non number zone recived in attack phase"); throw new RuntimeException("non number zone recived in attack phase");
Card attackingCard = board.getCardInZone(Integer.parseInt(carteAttaquante)); Card attackingCard = board.getCardInZone(Integer.parseInt(carteAttaquante));
Card attackedCard = adversaire.getBoard().getCardInZone(Integer.parseInt(carteCible));
if (attackingCard == null) { if (attackingCard == null) {
throw new RuntimeException("invalid attack"); throw new RuntimeException("invalid attack");
@@ -330,7 +339,7 @@ public class Joueur {
} }
attackingCard.hasAttacked(); attackingCard.hasAttacked();
} else { } else {
if (!attackingCard.hasAlreadyAttacked()) { if (!attackingCard.hasAlreadyAttacked() && !(attackedCard instanceof IInvisible) && !(attackingCard instanceof IPlayerFocused)) {
handleAttackAgainstCard(carteAttaquante, carteCible, adversaire); handleAttackAgainstCard(carteAttaquante, carteCible, adversaire);
attackingCard.hasAttacked(); attackingCard.hasAttacked();
} }
@@ -347,7 +356,18 @@ public class Joueur {
} }
private boolean handleAttackAgainstPlayer(Card attackingCard, Joueur adversaire) throws IOException { private boolean handleAttackAgainstPlayer(Card attackingCard, Joueur adversaire) throws IOException {
boolean result = adversaire.takeDamage(attackingCard.getAttack()); int damage = attackingCard.getAttack();
if(attackingCard instanceof IAntiPlayer)
{
damage *= 2;
}
if(attackingCard instanceof IShortRange)
{
damage = 0;
}
boolean result = adversaire.takeDamage(damage);
if(!result) if(!result)
{ {
adversaire.updateHp(this); adversaire.updateHp(this);
@@ -375,6 +395,13 @@ public class Joueur {
} }
boolean isDestroyed = attackedCard.takeDamage(attackingCard.getAttack()); boolean isDestroyed = attackedCard.takeDamage(attackingCard.getAttack());
if(attackingCard instanceof ILifeSteal)
{
attackingCard.heal(attackingCard.getAttack());
updateCardHp(attackingCard, this);
}
if (isDestroyed || attackingCard instanceof IToxic) { if (isDestroyed || attackingCard instanceof IToxic) {
// on suprime la carte du terrain // on suprime la carte du terrain
board.setCard(Integer.parseInt(carteCible), null); board.setCard(Integer.parseInt(carteCible), null);
@@ -391,14 +418,7 @@ public class Joueur {
// NOTE : non implémenter dans les cartes individuelles par manque de temps // NOTE : non implémenter dans les cartes individuelles par manque de temps
attackedCard.onCardDestroyed(); attackedCard.onCardDestroyed();
}else { }else {
adversaire.getComs().send(Command.SET_CARD_HP); adversaire.updateCardHp(attackedCard, this);
adversaire.getComs().send(carteCible);
adversaire.getComs().send(attackedCard.getHealth());
this.getComs().send(Command.SET_ADV_CARD_HP);
this.getComs().send(carteCible);
this.getComs().send(attackedCard.getHealth());
//cette partie est le fightback C.A.D quand tu attaque une carte si elle survit elle te frape a son tour //cette partie est le fightback C.A.D quand tu attaque une carte si elle survit elle te frape a son tour
if(attackedCard.getAttack() > 0 && !(attackingCard instanceof ICanDoge)) if(attackedCard.getAttack() > 0 && !(attackingCard instanceof ICanDoge))
@@ -419,15 +439,9 @@ public class Joueur {
// appelle les effet de quand la carte est détruite // appelle les effet de quand la carte est détruite
// NOTE : non implémenter dans les cartes individuelles par manque de temps // NOTE : non implémenter dans les cartes individuelles par manque de temps
attackedCard.onCardDestroyed(); attackingCard.onCardDestroyed();
}else { }else {
adversaire.getComs().send(Command.SET_CARD_HP); adversaire.updateCardHp(attackingCard, this);
adversaire.getComs().send(carteAttaquante);
adversaire.getComs().send(attackingCard.getHealth());
this.getComs().send(Command.SET_ADV_CARD_HP);
this.getComs().send(carteAttaquante);
this.getComs().send(attackingCard.getHealth());
} }
} }
@@ -435,6 +449,44 @@ public class Joueur {
} }
/**
* met a jorus les hp d'une carte tout ce passe du poin de vue du joueur
* @param cardToUpDate
* @param adversaire
* @throws IOException
*/
private void updateCardHp(Card cardToUpDate,Joueur adversaire) throws IOException
{
int zone = board.getZoneOf(cardToUpDate);
if(zone == -1)return;
adversaire.getComs().send(Command.SET_ADV_CARD_HP);
adversaire.getComs().send(zone+"");
adversaire.getComs().send(cardToUpDate.getHealth());
this.getComs().send(Command.SET_CARD_HP);
this.getComs().send(zone+"");
this.getComs().send(cardToUpDate.getHealth());
}
/**
* met a jorus les hp d'une carte tout ce passe du poin de vue du joueur
* @param cardToUpDate
* @param adversaire
* @throws IOException
*/
private void updateCardAtk(Card cardToUpDate,Joueur adversaire) throws IOException
{
int zone = board.getZoneOf(cardToUpDate);
if(zone == -1)return;
adversaire.getComs().send(Command.SET_ADV_CARD_ATK);
adversaire.getComs().send(zone+"");
adversaire.getComs().send(cardToUpDate.getAttack());
this.getComs().send(Command.SET_CARD_ATK);
this.getComs().send(zone+"");
this.getComs().send(cardToUpDate.getAttack());
}
private Board getBoard() { private Board getBoard() {
return board; return board;
} }
@@ -451,4 +503,19 @@ public class Joueur {
return pV == 0; return pV == 0;
} }
public void onTurnStart(Joueur adversaire) throws IOException {
Iterator<Card> it = board.getIterator();
while(it.hasNext())
{
Card c = it.next();
if(c != null)
{
c.onTurnStart();
updateCardHp(c, adversaire);
updateCardAtk(c, adversaire);
}
}
}
} }
+1 -1
View File
@@ -117,7 +117,7 @@ public class Match extends Thread {
//et on dit au joueur oposé que ce n'est pas le tien //et on dit au joueur oposé que ce n'est pas le tien
enemy.debutTourEnemie(); enemy.debutTourEnemie();
joueur.onTurnStart(enemy);
joueur.mainPhase1(enemy); //Joue autant de carte qu'il veut/peut joueur.mainPhase1(enemy); //Joue autant de carte qu'il veut/peut
joueur.battlePhase(enemy);//lance des attaques à son adversaire qui peut répliquer joueur.battlePhase(enemy);//lance des attaques à son adversaire qui peut répliquer
//cette phases ne serira surment pas car nous manquon de temps pour implrementer les fonctionnalité specifique de certaine cartes //cette phases ne serira surment pas car nous manquon de temps pour implrementer les fonctionnalité specifique de certaine cartes
+10 -1
View File
@@ -1,5 +1,7 @@
package game.cards; package game.cards;
import game.Board;
public abstract class Card{ public abstract class Card{
private int attack; private int attack;
@@ -41,7 +43,7 @@ public abstract class Card{
/** /**
* evenement déclanché au placement de la carte * evenement déclanché au placement de la carte
*/ */
public void onCardPlaced(){}; public void onCardPlaced(Board board){};
/** /**
* évenement déclenché a la mort de la carte * évenement déclenché a la mort de la carte
*/ */
@@ -89,5 +91,12 @@ public abstract class Card{
public void resetAttack() { public void resetAttack() {
hasAttacked=false; hasAttacked=false;
} }
public void heal(int amount) {
health += amount;
}
public void makeStronger(int amount)
{
attack += amount;
}
} }
@@ -1,8 +1,8 @@
package game.cards.MoyenAge; package game.cards.MoyenAge;
import game.cards.Card; import game.cards.SpecialCard.VigilanceCard;
public class Moyen_Age_Charlemagne extends Card{ public class Moyen_Age_Charlemagne extends VigilanceCard{
/** /**
* retourne un entier coresspondant a l'attaque de la carte * retourne un entier coresspondant a l'attaque de la carte
* *
@@ -0,0 +1,5 @@
package game.cards.SpecialCard;
public interface IAntiPlayer {
}
@@ -0,0 +1,5 @@
package game.cards.SpecialCard;
public interface IInvisible {
}
@@ -0,0 +1,5 @@
package game.cards.SpecialCard;
public interface ILifeSteal {
}
@@ -0,0 +1,5 @@
package game.cards.SpecialCard;
public interface IPlayerFocused {
}
@@ -0,0 +1,5 @@
package game.cards.SpecialCard;
public interface IShortRange {
}
+15
View File
@@ -0,0 +1,15 @@
package game.cards.SpecialCard;
import game.Board;
import game.cards.Card;
public abstract class LonerCard extends Card{
@Override
public void onCardPlaced(Board board) {
if(board.getBoardSize() == 1)
{
makeStronger(3);
}
super.onCardPlaced(board);
}
}
@@ -0,0 +1,11 @@
package game.cards.SpecialCard;
import game.cards.Card;
public abstract class RegeneratingCard extends Card{
@Override
public void onTurnStart() {
heal(1);
super.onTurnStart();
}
}
@@ -0,0 +1,9 @@
package game.cards.SpecialCard;
public abstract class SelfHarmCard extends SteroidsCard{
@Override
public void onTurnStart() {
heal(-1);
super.onTurnStart();
}
}
@@ -0,0 +1,12 @@
package game.cards.SpecialCard;
import game.cards.Card;
public abstract class SteroidsCard extends Card{
@Override
public void onTurnStart() {
makeStronger(1);
super.onTurnStart();
}
}
@@ -0,0 +1,19 @@
package game.cards.SpecialCard;
import game.cards.Card;
public abstract class VigilanceCard extends Card{
int nbAttack = 0;
public boolean hasAlreadyAttacked() {
return nbAttack==2;
}
public void hasAttacked() {
nbAttack++;
}
public void resetAttack() {
nbAttack=0;
}
}