From f77f300fdc49a6471cab80d3d32da52eef71788a Mon Sep 17 00:00:00 2001 From: paulmichels Date: Wed, 27 Nov 2019 10:01:44 +0100 Subject: [PATCH 1/2] bug fix --- src/main/java/models/Game.java | 8 +- src/main/java/models/Player.java | 4 + .../java/models/card/effect/Abilities.java | 5 +- src/main/java/views/GameView.java | 12 ++- src/main/java/views/layouts/BoardLayout.java | 3 + src/main/java/views/layouts/ManaLayout.java | 5 ++ .../java/views/layouts/NextTurnLayout.java | 36 +++++++++ src/main/java/views/layouts/PlayerLayout.java | 1 + src/main/resources/json/cards | 21 +++--- src/main/resources/json/decks | 2 +- src/test/java/AbilitiesTest.java | 74 ++++++++++++++++++- 11 files changed, 151 insertions(+), 20 deletions(-) create mode 100644 src/main/java/views/layouts/NextTurnLayout.java diff --git a/src/main/java/models/Game.java b/src/main/java/models/Game.java index 3e7b0a6..3e330f7 100644 --- a/src/main/java/models/Game.java +++ b/src/main/java/models/Game.java @@ -3,11 +3,12 @@ import models.card.Card; import models.card.CardManager; +import java.util.Observable; import java.util.Random; import java.util.Timer; import java.util.TimerTask; -public class Game { +public class Game extends Observable { private static final int MANA_MAX = 10; @@ -64,15 +65,18 @@ public void startTurn(Player player){ player.setManaPool(player.getManaPool() + 1); } player.setManaRemaining(player.getManaPool()); + setChanged(); + notifyObservers(this); timer.schedule(new TimerTask() { @Override public void run() { endTurn(player); } - }, 2*60*1000); + }, 2*60*1000); // 2 Minutes } public void endTurn(Player player){ + timer.cancel(); if(player.equals(player1)){ startTurn(player2); } else { diff --git a/src/main/java/models/Player.java b/src/main/java/models/Player.java index a672122..edaf921 100644 --- a/src/main/java/models/Player.java +++ b/src/main/java/models/Player.java @@ -70,6 +70,8 @@ public int getManaPool() { public void setManaPool(int manaPool) { this.manaPool = manaPool; + setChanged(); + notifyObservers(this); } public int getManaRemaining() { @@ -78,6 +80,8 @@ public int getManaRemaining() { public void setManaRemaining(int manaRemaining) { this.manaRemaining = manaRemaining; + setChanged(); + notifyObservers(this); } public Hero getHero() { diff --git a/src/main/java/models/card/effect/Abilities.java b/src/main/java/models/card/effect/Abilities.java index 2fafb83..6fee83f 100644 --- a/src/main/java/models/card/effect/Abilities.java +++ b/src/main/java/models/card/effect/Abilities.java @@ -81,7 +81,10 @@ public static void dealDamageToOpponent(Player owner, JSONObject effect){ */ public static void summonMinions(Player owner, JSONObject effect){ CardManager cardManager = new CardManager(); - owner.getBoard().addMinion(new Minion(cardManager.getJSONFromId((String) effect.get("minionId")))); + int amount = ((Long)effect.get("amount")).intValue(); + for (int i = 0; i < amount; i++){ + owner.getBoard().addMinion(new Minion(cardManager.getJSONFromId(((Long) effect.get("minionId")).toString()))); + } } /** diff --git a/src/main/java/views/GameView.java b/src/main/java/views/GameView.java index 290441c..fd1663b 100644 --- a/src/main/java/views/GameView.java +++ b/src/main/java/views/GameView.java @@ -8,8 +8,10 @@ import javax.swing.*; import java.awt.*; +import java.util.Observable; +import java.util.Observer; -public class GameView extends JFrame { +public class GameView extends JFrame implements Observer { private JFrame window; private JPanel gameView; @@ -38,7 +40,7 @@ private GameView(){ public void init(Player player1, Player player2) { Game.getInstance().startGame(player1, player2); - + Game.getInstance().addObserver(this); playerLayout1 = new PlayerLayout(player1); playerLayout2 = new PlayerLayout(player2); boardPlayer1 = new BoardLayout(player1.getBoard()); @@ -89,4 +91,10 @@ public BoardLayout getBoardPlayer1() { public BoardLayout getBoardPlayer2() { return boardPlayer2; } + + @Override + public void update(Observable observable, Object o) { + repaint(); + revalidate(); + } } \ No newline at end of file diff --git a/src/main/java/views/layouts/BoardLayout.java b/src/main/java/views/layouts/BoardLayout.java index 9d716c0..c75210c 100644 --- a/src/main/java/views/layouts/BoardLayout.java +++ b/src/main/java/views/layouts/BoardLayout.java @@ -14,7 +14,10 @@ public class BoardLayout extends JPanel implements Observer, MouseListener { + private Board board; + public BoardLayout(Board board) { + this.board = board; board.addObserver(this); setBorder(BorderFactory.createLineBorder(Color.GRAY, 2)); setBackground(new Color(207, 204, 141)); diff --git a/src/main/java/views/layouts/ManaLayout.java b/src/main/java/views/layouts/ManaLayout.java index bf22b3f..d0e516a 100644 --- a/src/main/java/views/layouts/ManaLayout.java +++ b/src/main/java/views/layouts/ManaLayout.java @@ -27,7 +27,12 @@ public ManaLayout(Player player){ @Override public void update(Observable observable, Object o) { Player player = (Player) o; + removeAll(); manaView = new JLabel("MANA: " + player.getManaRemaining() + "/" + player.getManaPool()); + manaView.setFont(new Font(Font.DIALOG, Font.BOLD, 15)); + manaView.setForeground(Color.WHITE); + manaView.setBackground(Color.DARK_GRAY); + add(manaView); repaint(); revalidate(); } diff --git a/src/main/java/views/layouts/NextTurnLayout.java b/src/main/java/views/layouts/NextTurnLayout.java new file mode 100644 index 0000000..e94b63d --- /dev/null +++ b/src/main/java/views/layouts/NextTurnLayout.java @@ -0,0 +1,36 @@ +package views.layouts; + +import models.Game; +import models.Player; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.Observable; +import java.util.Observer; + +public class NextTurnLayout extends JPanel { + + private JButton nextTurn; + private Player player; + + public NextTurnLayout(Player player){ + this.player = player; + setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); + setBackground(Color.DARK_GRAY); + nextTurn = new JButton("Finir le tour"); + nextTurn.setFont(new Font(Font.DIALOG, Font.BOLD, 15)); + nextTurn.setForeground(Color.WHITE); + nextTurn.setBackground(Color.DARK_GRAY); + nextTurn.addActionListener(actionEvent -> { + if(Game.getInstance().getCurrentPlayer() == this.player){ + Game.getInstance().endTurn(this.player); + } + }); + add(nextTurn); + } + +} diff --git a/src/main/java/views/layouts/PlayerLayout.java b/src/main/java/views/layouts/PlayerLayout.java index ada858d..8881401 100644 --- a/src/main/java/views/layouts/PlayerLayout.java +++ b/src/main/java/views/layouts/PlayerLayout.java @@ -18,6 +18,7 @@ public PlayerLayout(Player player) { horizontalBox.add(new HandLayout(player.getHand())); horizontalBox.add(new DeckLayout(player.getDeck())); horizontalBox.add(new ManaLayout(player)); + horizontalBox.add(new NextTurnLayout(player)); } } \ No newline at end of file diff --git a/src/main/resources/json/cards b/src/main/resources/json/cards index 437b438..1f89067 100644 --- a/src/main/resources/json/cards +++ b/src/main/resources/json/cards @@ -7,7 +7,7 @@ "manaCost": 0, "type": "SPELL", "mechanics": { - "method": "gainMana", + "method": "addManaForTurn", "amount": 1 }, "image": "doge_coin.png" @@ -133,10 +133,8 @@ "manaCost": 3, "type": "SPELL", "mechanics": { - "battleCry": { - "method": "dealDamageRepeatable", - "damage": 2 - } + "method": "dealDamageRepeatable", + "damage": 2 }, "image": "darude.jpg" }, @@ -151,7 +149,11 @@ "health": 2, "mechanics": { "charge": true, - "divineShield": true + "divineShield": true, + "battleCry": { + "method": "addEmptyMana", + "amount": 1 + } }, "image": "dolan.jpg" }, @@ -180,10 +182,9 @@ "manaCost": 1, "type": "SPELL", "mechanics": { - "battleCry": { - "method": "summonMinions", - "minionId": 13 - } + "method": "summonMinions", + "amount": 2, + "minionId": 13 }, "image": "gae.jpg" }, diff --git a/src/main/resources/json/decks b/src/main/resources/json/decks index c78f43b..f211c23 100644 --- a/src/main/resources/json/decks +++ b/src/main/resources/json/decks @@ -1 +1 @@ -{"Nathan":{"name":"Nathan","cards":[{"spellMechanics":{"mechanic":{"damage":1,"method":"dealDamageToRandom","target":3}},"name":"AH !","description":"Inflige un point de dégât à trois ennemis alétoires.","manaCost":1,"image":"ah.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"amount":2,"method":"draw"}},"name":"Arouf Gangsta","description":"Jsuis plus beau que toi. Je pioche deux cartes de la tess.","manaCost":1,"image":"arouf.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":1,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Back Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"back_spider.jpg","cardClass":"BRUHCAT","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Front Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"front_spider.jpg","cardClass":"YELLINGGIRL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":10,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Big Baby","description":"Provocation","manaCost":7,"image":"big_baby.jpg","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":4,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","health":1}},"name":"Big Shak","description":"You don't know.","manaCost":5,"image":"big_shak.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":6,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":3,"method":"dealDamageToAll"}},"name":"Crak Kid","description":"YAAAAAAAH.","manaCost":6,"image":"crack_kid.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"battleCry":{"damage":2,"method":"dealDamageRepeatable"}}},"name":"Darude Sandstorm","description":"Inflige 2 points de dégâts à tous les serviteurs. Recommence à chaque fois qu'un serviteur meurt.","manaCost":3,"image":"darude.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":4,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":true,"charge":true},"name":"Dolan","description":"Charge. Bouclier divin","manaCost":4,"image":"dolan.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","attack":2}},"name":"Elon Musk","description":"Cri de guerre: ajoute 2 d'attaque aux serviteurs alliés.","manaCost":7,"image":"elon.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"battleCry":{"method":"summonMinions","minionId":13}}},"name":"Tinkles","description":"Invoque 2 Tinkle.","manaCost":1,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":0,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Tinkle","description":"Provocation. I'm GAE!","manaCost":0,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false,"deathRattle":{"damage":10,"method":"dealDamageToRandom","target":1}},"name":"Gavin","description":"Provocation. Râle d'agonie: inflige 10 points de dégâts à un ennemi aléatoire.","manaCost":6,"image":"gavin.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"deathRattle":{"method":"buffAllies","health":1}},"name":"Un groupe de musique","description":"Râle d'agonie: Ajoute 1 point de vie à tous les serviteurs alliés.","manaCost":3,"image":"groupe_musique.png","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":2,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":1,"method":"dealDamageToOpponent"}},"name":"Hackerman","description":"Bouclier divin. Cri de guerre: Inflige 1 points de dégât au héros adverse.","manaCost":3,"image":"hackerman.png","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"attack":1,"durability":7,"name":"Hamburger","description":"","manaCost":3,"image":"hamburger.png","cardClass":"YELLINGGIRL","rarity":"RARE","type":"WEAPON","changed":false,"obs":[]}],"heroClass":"WARLOCK","changed":false,"obs":[]},"Paul":{"name":"Paul","cards":[{"spellMechanics":{"mechanic":{"damage":1,"method":"dealDamageToRandom","target":3}},"name":"AH !","description":"Inflige un point de dégât à trois ennemis alétoires.","manaCost":1,"image":"ah.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"amount":2,"method":"draw"}},"name":"Arouf Gangsta","description":"Jsuis plus beau que toi. Je pioche deux cartes de la tess.","manaCost":1,"image":"arouf.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":1,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Back Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"back_spider.jpg","cardClass":"BRUHCAT","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Front Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"front_spider.jpg","cardClass":"YELLINGGIRL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":10,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Big Baby","description":"Provocation","manaCost":7,"image":"big_baby.jpg","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":4,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","health":1}},"name":"Big Shak","description":"You don't know.","manaCost":5,"image":"big_shak.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":6,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":3,"method":"dealDamageToAll"}},"name":"Crak Kid","description":"YAAAAAAAH.","manaCost":6,"image":"crack_kid.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"battleCry":{"damage":2,"method":"dealDamageRepeatable"}}},"name":"Darude Sandstorm","description":"Inflige 2 points de dégâts à tous les serviteurs. Recommence à chaque fois qu'un serviteur meurt.","manaCost":3,"image":"darude.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":4,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":true,"charge":true},"name":"Dolan","description":"Charge. Bouclier divin","manaCost":4,"image":"dolan.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","attack":2}},"name":"Elon Musk","description":"Cri de guerre: ajoute 2 d'attaque aux serviteurs alliés.","manaCost":7,"image":"elon.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"battleCry":{"method":"summonMinions","minionId":13}}},"name":"Tinkles","description":"Invoque 2 Tinkle.","manaCost":1,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":0,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Tinkle","description":"Provocation. I'm GAE!","manaCost":0,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false,"deathRattle":{"damage":10,"method":"dealDamageToRandom","target":1}},"name":"Gavin","description":"Provocation. Râle d'agonie: inflige 10 points de dégâts à un ennemi aléatoire.","manaCost":6,"image":"gavin.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"deathRattle":{"method":"buffAllies","health":1}},"name":"Un groupe de musique","description":"Râle d'agonie: Ajoute 1 point de vie à tous les serviteurs alliés.","manaCost":3,"image":"groupe_musique.png","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":2,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":1,"method":"dealDamageToOpponent"}},"name":"Hackerman","description":"Bouclier divin. Cri de guerre: Inflige 1 points de dégât au héros adverse.","manaCost":3,"image":"hackerman.png","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"attack":1,"durability":7,"name":"Hamburger","description":"","manaCost":3,"image":"hamburger.png","cardClass":"YELLINGGIRL","rarity":"RARE","type":"WEAPON","changed":false,"obs":[]}],"heroClass":"MAGE","changed":false,"obs":[]}} \ No newline at end of file +{"Nathan":{"name":"Nathan","cards":[{"spellMechanics":{"mechanic":{"damage":1,"method":"dealDamageToRandom","target":3}},"name":"AH !","description":"Inflige un point de dégât à trois ennemis alétoires.","manaCost":1,"image":"ah.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"amount":2,"method":"draw"}},"name":"Arouf Gangsta","description":"Jsuis plus beau que toi. Je pioche deux cartes de la tess.","manaCost":1,"image":"arouf.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":1,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Back Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"back_spider.jpg","cardClass":"BRUHCAT","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Front Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"front_spider.jpg","cardClass":"YELLINGGIRL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":10,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Big Baby","description":"Provocation","manaCost":7,"image":"big_baby.jpg","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":4,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","health":1}},"name":"Big Shak","description":"You don't know.","manaCost":5,"image":"big_shak.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":6,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":3,"method":"dealDamageToAll"}},"name":"Crak Kid","description":"YAAAAAAAH.","manaCost":6,"image":"crack_kid.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"damage":2,"method":"dealDamageRepeatable"}},"name":"Darude Sandstorm","description":"Inflige 2 points de dégâts à tous les serviteurs. Recommence à chaque fois qu'un serviteur meurt.","manaCost":3,"image":"darude.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":4,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":true,"charge":true,"battleCry":{"amount":1,"method":"addEmptyMana"}},"name":"Dolan","description":"Charge. Bouclier divin","manaCost":4,"image":"dolan.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","attack":2}},"name":"Elon Musk","description":"Cri de guerre: ajoute 2 d'attaque aux serviteurs alliés.","manaCost":7,"image":"elon.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"amount":2,"method":"summonMinions","minionId":13}},"name":"Tinkles","description":"Invoque 2 Tinkle.","manaCost":1,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":0,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Tinkle","description":"Provocation. I'm GAE!","manaCost":0,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false,"deathRattle":{"damage":10,"method":"dealDamageToRandom","target":1}},"name":"Gavin","description":"Provocation. Râle d'agonie: inflige 10 points de dégâts à un ennemi aléatoire.","manaCost":6,"image":"gavin.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"deathRattle":{"method":"buffAllies","health":1}},"name":"Un groupe de musique","description":"Râle d'agonie: Ajoute 1 point de vie à tous les serviteurs alliés.","manaCost":3,"image":"groupe_musique.png","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":2,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":1,"method":"dealDamageToOpponent"}},"name":"Hackerman","description":"Bouclier divin. Cri de guerre: Inflige 1 points de dégât au héros adverse.","manaCost":3,"image":"hackerman.png","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"attack":1,"durability":7,"name":"Hamburger","description":"","manaCost":3,"image":"hamburger.png","cardClass":"YELLINGGIRL","rarity":"RARE","type":"WEAPON","changed":false,"obs":[]}],"heroClass":"WARLOCK","changed":false,"obs":[]},"Paul":{"name":"Paul","cards":[{"spellMechanics":{"mechanic":{"damage":1,"method":"dealDamageToRandom","target":3}},"name":"AH !","description":"Inflige un point de dégât à trois ennemis alétoires.","manaCost":1,"image":"ah.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"amount":2,"method":"draw"}},"name":"Arouf Gangsta","description":"Jsuis plus beau que toi. Je pioche deux cartes de la tess.","manaCost":1,"image":"arouf.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":1,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Back Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"back_spider.jpg","cardClass":"BRUHCAT","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Front Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"front_spider.jpg","cardClass":"YELLINGGIRL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":10,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Big Baby","description":"Provocation","manaCost":7,"image":"big_baby.jpg","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":4,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","health":1}},"name":"Big Shak","description":"You don't know.","manaCost":5,"image":"big_shak.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":6,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":3,"method":"dealDamageToAll"}},"name":"Crak Kid","description":"YAAAAAAAH.","manaCost":6,"image":"crack_kid.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"damage":2,"method":"dealDamageRepeatable"}},"name":"Darude Sandstorm","description":"Inflige 2 points de dégâts à tous les serviteurs. Recommence à chaque fois qu'un serviteur meurt.","manaCost":3,"image":"darude.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":4,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":true,"charge":true,"battleCry":{"amount":1,"method":"addEmptyMana"}},"name":"Dolan","description":"Charge. Bouclier divin","manaCost":4,"image":"dolan.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","attack":2}},"name":"Elon Musk","description":"Cri de guerre: ajoute 2 d'attaque aux serviteurs alliés.","manaCost":7,"image":"elon.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"amount":2,"method":"summonMinions","minionId":13}},"name":"Tinkles","description":"Invoque 2 Tinkle.","manaCost":1,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":0,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Tinkle","description":"Provocation. I'm GAE!","manaCost":0,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false,"deathRattle":{"damage":10,"method":"dealDamageToRandom","target":1}},"name":"Gavin","description":"Provocation. Râle d'agonie: inflige 10 points de dégâts à un ennemi aléatoire.","manaCost":6,"image":"gavin.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"deathRattle":{"method":"buffAllies","health":1}},"name":"Un groupe de musique","description":"Râle d'agonie: Ajoute 1 point de vie à tous les serviteurs alliés.","manaCost":3,"image":"groupe_musique.png","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":2,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":1,"method":"dealDamageToOpponent"}},"name":"Hackerman","description":"Bouclier divin. Cri de guerre: Inflige 1 points de dégât au héros adverse.","manaCost":3,"image":"hackerman.png","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"attack":1,"durability":7,"name":"Hamburger","description":"","manaCost":3,"image":"hamburger.png","cardClass":"YELLINGGIRL","rarity":"RARE","type":"WEAPON","changed":false,"obs":[]}],"heroClass":"MAGE","changed":false,"obs":[]}} \ No newline at end of file diff --git a/src/test/java/AbilitiesTest.java b/src/test/java/AbilitiesTest.java index 5042347..ffbf3a6 100644 --- a/src/test/java/AbilitiesTest.java +++ b/src/test/java/AbilitiesTest.java @@ -33,18 +33,49 @@ public void initGame() throws IOException, ParseException { game.startGame(player1, player2); } + //TODO : Fix @Test - public void gainMana() { + public void draw() { + Card Arouf = cardManager.getCardFromId("3"); + Player player = game.getCurrentPlayer(); + player.getHand().addCard(Arouf); + List hand = player.getHand().getCards(); + int cardsInHand = player.getHand().getCardCount(); + player.playCard(hand.get(hand.size() - 1)); + assertEquals(cardsInHand + 3, player.getHand().getCardCount()); + } + + @Test + public void addManaForTurn() { Card DogeCoin = cardManager.getCardFromId("1"); Player player = game.getCurrentPlayer(); + player.setManaPool(5); + player.setManaRemaining(5); player.getHand().addCard(DogeCoin); List hand = player.getHand().getCards(); int currentManaRemaining = player.getManaRemaining(); player.playCard(hand.get(hand.size() - 1)); assertEquals(currentManaRemaining + 1, player.getManaRemaining()); + game.endTurn(player);; + game.endTurn(game.getOpponent(player)); + assertEquals(currentManaRemaining + 1, player.getManaRemaining()); + } + @Test + public void addEmptyMana() { + Card Dolan = cardManager.getCardFromId("10"); + Player player = game.getCurrentPlayer(); + player.getHand().addCard(Dolan); + player.setManaPool(5); + player.setManaRemaining(5); + List hand = player.getHand().getCards(); + int currentManaPool = player.getManaPool(); + player.playCard(hand.get(hand.size() - 1)); + assertEquals(currentManaPool + 1, player.getManaPool()); + } + //TODO : Fix @Test public void buffAllies() { Card ElonMusk = cardManager.getCardFromId("11"); @@ -62,8 +93,9 @@ public void buffAllies() { assertEquals(attack + 2, player.getBoard().getMinions().get(1).getAttack()); } + //TODO : Fix @Test - public void dealDamageToRandom() { + public void dealDamageToOpponent() { Card Gavin = cardManager.getCardFromId("14"); Player player = game.getCurrentPlayer(); player.getHand().addCard(Gavin); @@ -72,14 +104,48 @@ public void dealDamageToRandom() { assertEquals(28, Game.getInstance().getOpponent(player).getHero().getHealth()); } + @Test + public void summonMinions() { + Card Tinkle = cardManager.getCardFromId("12"); + Player player = game.getCurrentPlayer(); + player.getHand().addCard(Tinkle); + List hand = player.getHand().getCards(); + player.playCard(hand.get(hand.size() - 1)); + assertEquals(2, player.getBoard().getMinions().size()); + assertEquals("Tinkle", player.getBoard().getMinions().get(0).getName()); + assertEquals("Tinkle", player.getBoard().getMinions().get(1).getName()); + } + + @Test + public void dealDamageToRandom() { + Card Gavin = cardManager.getCardFromId("14"); + Player player = game.getCurrentPlayer(); + player.getHand().addCard(Gavin); + List hand = player.getHand().getCards(); + player.playCard(hand.get(hand.size() - 1)); + player.getBoard().getMinions().get(0).destroy(player); + assertEquals(20, Game.getInstance().getOpponent(player).getHero().getHealth()); + } + @Test public void dealDamageToAll() { - Card AH = cardManager.getCardFromId("8"); + Card CrackKid = cardManager.getCardFromId("8"); Player player = game.getCurrentPlayer(); - player.getHand().addCard(AH); + player.getHand().addCard(CrackKid); List hand = player.getHand().getCards(); player.playCard(hand.get(hand.size() - 1)); assertEquals(27, Game.getInstance().getOpponent(player).getHero().getHealth()); assertEquals(27, player.getHero().getHealth()); } + + @Test + public void dealDamageRepeatable() { + Card DarudeSandstorm = cardManager.getCardFromId("9"); + Player player = game.getCurrentPlayer(); + player.getHand().addCard(DarudeSandstorm); + List hand = player.getHand().getCards(); + player.playCard(hand.get(hand.size() - 1)); + //TODO + } + } From 9306eaa80104647e18faee6d63e0ab5249b8e348 Mon Sep 17 00:00:00 2001 From: paulmichels Date: Wed, 27 Nov 2019 11:18:14 +0100 Subject: [PATCH 2/2] quick fix --- src/main/java/models/Board.java | 11 +-- src/main/java/models/Game.java | 7 ++ src/main/java/models/card/Minion.java | 8 +-- src/main/java/views/GameView.java | 16 ++++- src/main/java/views/layouts/BoardLayout.java | 15 ++-- .../java/views/layouts/CardBoardLayout.java | 32 +++++++++ src/main/java/views/layouts/CardLayout.java | 68 +++++++++++++------ src/main/java/views/layouts/HandLayout.java | 11 ++- .../java/views/layouts/NextTurnLayout.java | 1 + src/main/java/views/layouts/PlayerLayout.java | 2 +- src/main/resources/json/cards | 2 +- src/main/resources/json/decks | 2 +- src/test/java/AbilitiesTest.java | 10 +++ src/test/java/DeckTest.java | 2 - 14 files changed, 141 insertions(+), 46 deletions(-) create mode 100644 src/main/java/views/layouts/CardBoardLayout.java diff --git a/src/main/java/models/Board.java b/src/main/java/models/Board.java index b075a81..1b74b2f 100644 --- a/src/main/java/models/Board.java +++ b/src/main/java/models/Board.java @@ -25,8 +25,7 @@ public void addMinion(Minion minion){ tauntList.add(minion); } } - setChanged(); - notifyObservers(this); + update(); } public void removeMinion(Minion minion){ @@ -34,8 +33,7 @@ public void removeMinion(Minion minion){ if(minion.getMinionMechanics().isTaunt()){ tauntList.remove(minion); } - setChanged(); - notifyObservers(this); + update(); } public List getAttackableMinions(){ @@ -53,4 +51,9 @@ public List getTauntList() { return tauntList; } + public void update(){ + setChanged(); + notifyObservers(this); + } + } diff --git a/src/main/java/models/Game.java b/src/main/java/models/Game.java index 3e330f7..cb10210 100644 --- a/src/main/java/models/Game.java +++ b/src/main/java/models/Game.java @@ -108,4 +108,11 @@ public Player getOpponent(Player player){ return player1; } } + + public Player getCardOwner(Card card){ + if(player1.getBoard().getMinions().contains(card)){ + return player1; + } + return player2; + } } diff --git a/src/main/java/models/card/Minion.java b/src/main/java/models/card/Minion.java index 6bab781..1b8f52f 100644 --- a/src/main/java/models/card/Minion.java +++ b/src/main/java/models/card/Minion.java @@ -1,5 +1,6 @@ package models.card; +import models.Game; import models.IFighter; import models.Player; import org.json.simple.JSONObject; @@ -44,7 +45,6 @@ public void destroy(Player owner){ minionMechanics.deathRattle(owner); } owner.getBoard().removeMinion(this); - die(); update(); } @@ -60,11 +60,11 @@ public void newTurn(){ @Override public void attack(IFighter target) { - if(!hasAttacked) { + //if(!hasAttacked) { target.takeDamage(attack); takeDamage(target.getAttack()); hasAttacked = true; - } + //} update(); } @@ -88,7 +88,7 @@ public int getAttack() { @Override public void die() { - + destroy(Game.getInstance().getCardOwner(this)); } public MinionMechanics getMinionMechanics() { diff --git a/src/main/java/views/GameView.java b/src/main/java/views/GameView.java index fd1663b..5fd01d5 100644 --- a/src/main/java/views/GameView.java +++ b/src/main/java/views/GameView.java @@ -3,6 +3,7 @@ import models.Game; import models.Player; import views.layouts.BoardLayout; +import views.layouts.CardBoardLayout; import views.layouts.CardLayout; import views.layouts.PlayerLayout; @@ -24,6 +25,7 @@ public class GameView extends JFrame implements Observer { private BoardLayout boardPlayer2; private CardLayout selectedCard; + private CardBoardLayout selectedCardBoard; private static GameView gameViewObject; @@ -43,8 +45,8 @@ public void init(Player player1, Player player2) { Game.getInstance().addObserver(this); playerLayout1 = new PlayerLayout(player1); playerLayout2 = new PlayerLayout(player2); - boardPlayer1 = new BoardLayout(player1.getBoard()); - boardPlayer2 = new BoardLayout(player2.getBoard()); + boardPlayer1 = new BoardLayout(player1, player1.getBoard()); + boardPlayer2 = new BoardLayout(player2, player2.getBoard()); board = new JPanel(); board.setLayout(new BoxLayout(board, BoxLayout.PAGE_AXIS)); @@ -76,6 +78,14 @@ public void setSelectedCard(CardLayout selectedCard) { this.selectedCard = selectedCard; } + public CardBoardLayout getSelectedCardBoard() { + return selectedCardBoard; + } + + public void setSelectedCardBoard(CardBoardLayout selectedCardBoard) { + this.selectedCardBoard = selectedCardBoard; + } + public PlayerLayout getPlayerLayout1() { return playerLayout1; } @@ -94,6 +104,8 @@ public BoardLayout getBoardPlayer2() { @Override public void update(Observable observable, Object o) { + selectedCard = null; + selectedCardBoard = null; repaint(); revalidate(); } diff --git a/src/main/java/views/layouts/BoardLayout.java b/src/main/java/views/layouts/BoardLayout.java index c75210c..170315e 100644 --- a/src/main/java/views/layouts/BoardLayout.java +++ b/src/main/java/views/layouts/BoardLayout.java @@ -2,6 +2,7 @@ import models.Board; import models.Game; +import models.Player; import models.card.*; import views.GameView; @@ -14,17 +15,19 @@ public class BoardLayout extends JPanel implements Observer, MouseListener { + private Player player; private Board board; - public BoardLayout(Board board) { + public BoardLayout(Player player, Board board) { this.board = board; + this.player = player; board.addObserver(this); setBorder(BorderFactory.createLineBorder(Color.GRAY, 2)); setBackground(new Color(207, 204, 141)); setLayout(new FlowLayout(FlowLayout.CENTER)); for(Card card: board.getMinions()) { - CardLayout cardLayout = new CardLayout(card); + CardBoardLayout cardLayout = new CardBoardLayout(player, card); add(cardLayout); } addMouseListener(this); @@ -35,7 +38,7 @@ public void update(Observable observable, Object o) { Board board = (Board) o; removeAll(); for (Card card: board.getMinions()) { - add(new CardLayout(card)); + add(new CardBoardLayout(player, card)); } repaint(); revalidate(); @@ -46,11 +49,7 @@ public void mouseClicked(MouseEvent mouseEvent) { CardLayout cardLayout = GameView.getInstance().getSelectedCard(); if(cardLayout != null){ Game.getInstance().getCurrentPlayer().playCard(cardLayout.getCard()); - } - - if (mouseEvent.getSource() instanceof CardLayout){ - cardLayout = (CardLayout) mouseEvent.getSource(); - cardLayout.setWaitingForTarget(!cardLayout.isWaitingForTarget()); + GameView.getInstance().setSelectedCard(null); } } diff --git a/src/main/java/views/layouts/CardBoardLayout.java b/src/main/java/views/layouts/CardBoardLayout.java new file mode 100644 index 0000000..5c02924 --- /dev/null +++ b/src/main/java/views/layouts/CardBoardLayout.java @@ -0,0 +1,32 @@ +package views.layouts; + +import models.Player; +import models.card.Card; +import models.card.Minion; +import views.GameView; + +import java.awt.event.MouseEvent; + +public class CardBoardLayout extends CardLayout { + + private Player player; + + public CardBoardLayout(Player player, Card card) { + super(player, card); + this.player = player; + } + + @Override + public void mouseClicked(MouseEvent e) { + CardBoardLayout selected = GameView.getInstance().getSelectedCardBoard(); + if(selected == null){ + GameView.getInstance().setSelectedCardBoard(this); + } else if(this.getCard() != selected.getCard()) { + Minion selectedMinion = (Minion) selected.getCard(); + Minion targetMinion = (Minion) this.getCard(); + selectedMinion.attack(targetMinion); + GameView.getInstance().setSelectedCardBoard(null); + player.getBoard().update(); + } + } +} diff --git a/src/main/java/views/layouts/CardLayout.java b/src/main/java/views/layouts/CardLayout.java index 7fc83fe..02f345a 100644 --- a/src/main/java/views/layouts/CardLayout.java +++ b/src/main/java/views/layouts/CardLayout.java @@ -1,5 +1,7 @@ package views.layouts; +import models.Game; +import models.Player; import models.card.Card; import models.card.Minion; import views.GameView; @@ -23,17 +25,17 @@ public class CardLayout extends JPanel implements Observer, MouseListener { private JLabel health; private Card card; + private Player player; private boolean selected; - private boolean waitingForTarget; - public CardLayout(Card card) { + public CardLayout(Player player, Card card) { this.card = card; + this.player = player; card.addObserver(this); setOpaque(true); selected = false; - waitingForTarget = false; setCursor(new Cursor(Cursor.HAND_CURSOR)); setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); setSize(CARD_WIDTH, CARD_HEIGHT); @@ -90,8 +92,10 @@ public CardLayout(Card card) { @Override public void mouseClicked(MouseEvent e) { - setSelected(!isSelected()); - GameView.getInstance().setSelectedCard(this); + if(Game.getInstance().getCurrentPlayer() == player){ + setSelected(!isSelected()); + GameView.getInstance().setSelectedCard(this); + } } @Override @@ -120,13 +124,50 @@ public void mouseExited(MouseEvent e) { @Override public void update(Observable observable, Object o) { + removeAll(); Card card = (Card) o; + mana = new JLabel(); mana.setText("Mana: " + card.getManaCost()); + mana.setFont(new Font(Font.DIALOG, Font.BOLD, 15)); + mana.setForeground(Color.WHITE); + + image = new JLabel(); + + System.out.print("src/main/resources/images/card-components/illustrations/" + card.getImage()); + Image resizedImage = new ImageIcon("src/main/resources/images/card-components/illustrations/" + card.getImage()).getImage(); + resizedImage = resizedImage.getScaledInstance(this.getWidth(), (int)(this.getHeight() * 0.3f), Image.SCALE_SMOOTH); + ImageIcon img = new ImageIcon(resizedImage); + image.setIcon(img); + + name = new JLabel(); name.setText(card.getName()); + name.setForeground(Color.LIGHT_GRAY); + + + add(mana); + add(image); + add(name); + + // Specific layout for a minion card if(card instanceof Minion) { - attack.setText("Atk: " + ((Minion) card).getAttack()); - health.setText("Vie: " + ((Minion) card).getHealth()); + Minion minionCard = (Minion)card; + + // Attack label + attack = new JLabel(); + attack.setText("Atk: " + minionCard.getAttack()); + add(attack); + attack.setFont(new Font(Font.DIALOG, Font.BOLD, 15)); + attack.setForeground(Color.WHITE); + + // Health label + health = new JLabel(); + health.setText("Vie: "+minionCard.getHealth()); + add(health); + health.setFont(new Font(Font.DIALOG, Font.BOLD, 15)); + health.setForeground(Color.WHITE); + } + repaint(); revalidate(); } @@ -145,19 +186,6 @@ public boolean isSelected() { return this.selected; } - public boolean isWaitingForTarget() { - return waitingForTarget; - } - - public void setWaitingForTarget(boolean waitingForTarget) { - this.waitingForTarget = waitingForTarget; - if (waitingForTarget){ - setBorder(BorderFactory.createLineBorder(Color.GREEN, 4)); - } else { - setBorder(BorderFactory.createLineBorder(Color.GRAY, 2)); - } - } - public Card getCard() { return card; } diff --git a/src/main/java/views/layouts/HandLayout.java b/src/main/java/views/layouts/HandLayout.java index ae8786a..447f8f3 100644 --- a/src/main/java/views/layouts/HandLayout.java +++ b/src/main/java/views/layouts/HandLayout.java @@ -1,6 +1,7 @@ package views.layouts; import models.Hand; +import models.Player; import models.card.Card; import javax.swing.*; @@ -13,9 +14,13 @@ public class HandLayout extends JPanel implements Observer { private JPanel cardContainer; private JPanel handContainer; - public HandLayout(Hand hand) { + private Player player; + + public HandLayout(Player player, Hand hand) { hand.addObserver(this); + this.player = player; + setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); setBackground(Color.DARK_GRAY); @@ -28,7 +33,7 @@ public HandLayout(Hand hand) { cardContainer.setBackground(Color.DARK_GRAY); for (Card card : hand.getCards()) { - cardContainer.add(new CardLayout(card)); + cardContainer.add(new CardLayout(player, card)); } handContainer.add(cardContainer); @@ -40,7 +45,7 @@ public void update(Observable observable, Object o) { Hand hand = (Hand) o; cardContainer.removeAll(); for (Card card : hand.getCards()) { - cardContainer.add(new CardLayout(card)); + cardContainer.add(new CardLayout(player, card)); } repaint(); revalidate(); diff --git a/src/main/java/views/layouts/NextTurnLayout.java b/src/main/java/views/layouts/NextTurnLayout.java index e94b63d..bc29461 100644 --- a/src/main/java/views/layouts/NextTurnLayout.java +++ b/src/main/java/views/layouts/NextTurnLayout.java @@ -29,6 +29,7 @@ public NextTurnLayout(Player player){ if(Game.getInstance().getCurrentPlayer() == this.player){ Game.getInstance().endTurn(this.player); } + player.getBoard().update(); }); add(nextTurn); } diff --git a/src/main/java/views/layouts/PlayerLayout.java b/src/main/java/views/layouts/PlayerLayout.java index 8881401..a1f3710 100644 --- a/src/main/java/views/layouts/PlayerLayout.java +++ b/src/main/java/views/layouts/PlayerLayout.java @@ -15,7 +15,7 @@ public PlayerLayout(Player player) { add(horizontalBox); horizontalBox.add(new HeroLayout(player.getHero())); - horizontalBox.add(new HandLayout(player.getHand())); + horizontalBox.add(new HandLayout(player, player.getHand())); horizontalBox.add(new DeckLayout(player.getDeck())); horizontalBox.add(new ManaLayout(player)); horizontalBox.add(new NextTurnLayout(player)); diff --git a/src/main/resources/json/cards b/src/main/resources/json/cards index 1f89067..eb76265 100644 --- a/src/main/resources/json/cards +++ b/src/main/resources/json/cards @@ -109,7 +109,7 @@ "image": "big_shak.jpg" }, "8": { - "name": "Crak Kid", + "name": "Crack Kid", "description": "YAAAAAAAH.", "cardClass": "NEUTRAL", "rarity": "LEGENDARY", diff --git a/src/main/resources/json/decks b/src/main/resources/json/decks index f211c23..ca5e3fa 100644 --- a/src/main/resources/json/decks +++ b/src/main/resources/json/decks @@ -1 +1 @@ -{"Nathan":{"name":"Nathan","cards":[{"spellMechanics":{"mechanic":{"damage":1,"method":"dealDamageToRandom","target":3}},"name":"AH !","description":"Inflige un point de dégât à trois ennemis alétoires.","manaCost":1,"image":"ah.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"amount":2,"method":"draw"}},"name":"Arouf Gangsta","description":"Jsuis plus beau que toi. Je pioche deux cartes de la tess.","manaCost":1,"image":"arouf.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":1,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Back Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"back_spider.jpg","cardClass":"BRUHCAT","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Front Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"front_spider.jpg","cardClass":"YELLINGGIRL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":10,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Big Baby","description":"Provocation","manaCost":7,"image":"big_baby.jpg","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":4,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","health":1}},"name":"Big Shak","description":"You don't know.","manaCost":5,"image":"big_shak.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":6,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":3,"method":"dealDamageToAll"}},"name":"Crak Kid","description":"YAAAAAAAH.","manaCost":6,"image":"crack_kid.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"damage":2,"method":"dealDamageRepeatable"}},"name":"Darude Sandstorm","description":"Inflige 2 points de dégâts à tous les serviteurs. Recommence à chaque fois qu'un serviteur meurt.","manaCost":3,"image":"darude.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":4,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":true,"charge":true,"battleCry":{"amount":1,"method":"addEmptyMana"}},"name":"Dolan","description":"Charge. Bouclier divin","manaCost":4,"image":"dolan.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","attack":2}},"name":"Elon Musk","description":"Cri de guerre: ajoute 2 d'attaque aux serviteurs alliés.","manaCost":7,"image":"elon.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"amount":2,"method":"summonMinions","minionId":13}},"name":"Tinkles","description":"Invoque 2 Tinkle.","manaCost":1,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":0,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Tinkle","description":"Provocation. I'm GAE!","manaCost":0,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false,"deathRattle":{"damage":10,"method":"dealDamageToRandom","target":1}},"name":"Gavin","description":"Provocation. Râle d'agonie: inflige 10 points de dégâts à un ennemi aléatoire.","manaCost":6,"image":"gavin.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"deathRattle":{"method":"buffAllies","health":1}},"name":"Un groupe de musique","description":"Râle d'agonie: Ajoute 1 point de vie à tous les serviteurs alliés.","manaCost":3,"image":"groupe_musique.png","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":2,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":1,"method":"dealDamageToOpponent"}},"name":"Hackerman","description":"Bouclier divin. Cri de guerre: Inflige 1 points de dégât au héros adverse.","manaCost":3,"image":"hackerman.png","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"attack":1,"durability":7,"name":"Hamburger","description":"","manaCost":3,"image":"hamburger.png","cardClass":"YELLINGGIRL","rarity":"RARE","type":"WEAPON","changed":false,"obs":[]}],"heroClass":"WARLOCK","changed":false,"obs":[]},"Paul":{"name":"Paul","cards":[{"spellMechanics":{"mechanic":{"damage":1,"method":"dealDamageToRandom","target":3}},"name":"AH !","description":"Inflige un point de dégât à trois ennemis alétoires.","manaCost":1,"image":"ah.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"amount":2,"method":"draw"}},"name":"Arouf Gangsta","description":"Jsuis plus beau que toi. Je pioche deux cartes de la tess.","manaCost":1,"image":"arouf.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":1,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Back Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"back_spider.jpg","cardClass":"BRUHCAT","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Front Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"front_spider.jpg","cardClass":"YELLINGGIRL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":10,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Big Baby","description":"Provocation","manaCost":7,"image":"big_baby.jpg","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":4,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","health":1}},"name":"Big Shak","description":"You don't know.","manaCost":5,"image":"big_shak.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":6,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":3,"method":"dealDamageToAll"}},"name":"Crak Kid","description":"YAAAAAAAH.","manaCost":6,"image":"crack_kid.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"damage":2,"method":"dealDamageRepeatable"}},"name":"Darude Sandstorm","description":"Inflige 2 points de dégâts à tous les serviteurs. Recommence à chaque fois qu'un serviteur meurt.","manaCost":3,"image":"darude.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":4,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":true,"charge":true,"battleCry":{"amount":1,"method":"addEmptyMana"}},"name":"Dolan","description":"Charge. Bouclier divin","manaCost":4,"image":"dolan.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","attack":2}},"name":"Elon Musk","description":"Cri de guerre: ajoute 2 d'attaque aux serviteurs alliés.","manaCost":7,"image":"elon.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"amount":2,"method":"summonMinions","minionId":13}},"name":"Tinkles","description":"Invoque 2 Tinkle.","manaCost":1,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":0,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Tinkle","description":"Provocation. I'm GAE!","manaCost":0,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false,"deathRattle":{"damage":10,"method":"dealDamageToRandom","target":1}},"name":"Gavin","description":"Provocation. Râle d'agonie: inflige 10 points de dégâts à un ennemi aléatoire.","manaCost":6,"image":"gavin.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"deathRattle":{"method":"buffAllies","health":1}},"name":"Un groupe de musique","description":"Râle d'agonie: Ajoute 1 point de vie à tous les serviteurs alliés.","manaCost":3,"image":"groupe_musique.png","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":2,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":1,"method":"dealDamageToOpponent"}},"name":"Hackerman","description":"Bouclier divin. Cri de guerre: Inflige 1 points de dégât au héros adverse.","manaCost":3,"image":"hackerman.png","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"attack":1,"durability":7,"name":"Hamburger","description":"","manaCost":3,"image":"hamburger.png","cardClass":"YELLINGGIRL","rarity":"RARE","type":"WEAPON","changed":false,"obs":[]}],"heroClass":"MAGE","changed":false,"obs":[]}} \ No newline at end of file +{"Nathan":{"name":"Nathan","cards":[{"spellMechanics":{"mechanic":{"damage":1,"method":"dealDamageToRandom","target":3}},"name":"AH !","description":"Inflige un point de dégât à trois ennemis alétoires.","manaCost":1,"image":"ah.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"amount":2,"method":"draw"}},"name":"Arouf Gangsta","description":"Jsuis plus beau que toi. Je pioche deux cartes de la tess.","manaCost":1,"image":"arouf.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":1,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Back Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"back_spider.jpg","cardClass":"BRUHCAT","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Front Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"front_spider.jpg","cardClass":"YELLINGGIRL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":10,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Big Baby","description":"Provocation","manaCost":7,"image":"big_baby.jpg","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":4,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","health":1}},"name":"Big Shak","description":"You don't know.","manaCost":5,"image":"big_shak.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":6,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":3,"method":"dealDamageToAll"}},"name":"Crak Kid","description":"YAAAAAAAH.","manaCost":6,"image":"crack_kid.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"damage":2,"method":"dealDamageRepeatable"}},"name":"Darude Sandstorm","description":"Inflige 2 points de dégâts à tous les serviteurs. Recommence à chaque fois qu'un serviteur meurt.","manaCost":3,"image":"darude.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":4,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":true,"charge":true,"battleCry":{"amount":1,"method":"addEmptyMana"}},"name":"Dolan","description":"Charge. Bouclier divin","manaCost":4,"image":"dolan.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","attack":2}},"name":"Elon Musk","description":"Cri de guerre: ajoute 2 d'attaque aux serviteurs alliés.","manaCost":7,"image":"elon.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"amount":2,"method":"summonMinions","minionId":13}},"name":"Tinkles","description":"Invoque 2 Tinkle.","manaCost":1,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"SPELL","changed":false,"obs":[]},{"health":3,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false,"deathRattle":{"damage":10,"method":"dealDamageToRandom","target":1}},"name":"Gavin","description":"Provocation. Râle d'agonie: inflige 10 points de dégâts à un ennemi aléatoire.","manaCost":6,"image":"gavin.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"deathRattle":{"method":"buffAllies","health":1}},"name":"Un groupe de musique","description":"Râle d'agonie: Ajoute 1 point de vie à tous les serviteurs alliés.","manaCost":3,"image":"groupe_musique.png","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":2,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":1,"method":"dealDamageToOpponent"}},"name":"Hackerman","description":"Bouclier divin. Cri de guerre: Inflige 1 points de dégât au héros adverse.","manaCost":3,"image":"hackerman.png","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"attack":1,"durability":7,"name":"Hamburger","description":"","manaCost":3,"image":"hamburger.png","cardClass":"YELLINGGIRL","rarity":"RARE","type":"WEAPON","changed":false,"obs":[]}],"heroClass":"WARLOCK","changed":false,"obs":[]},"Paul":{"name":"Paul","cards":[{"spellMechanics":{"mechanic":{"damage":1,"method":"dealDamageToRandom","target":3}},"name":"AH !","description":"Inflige un point de dégât à trois ennemis alétoires.","manaCost":1,"image":"ah.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"amount":2,"method":"draw"}},"name":"Arouf Gangsta","description":"Jsuis plus beau que toi. Je pioche deux cartes de la tess.","manaCost":1,"image":"arouf.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"MINION","changed":false,"obs":[]},{"health":1,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Back Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"back_spider.jpg","cardClass":"BRUHCAT","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":2,"method":"dealDamageToOpponent"}},"name":"Front Spiderman","description":"Cri de guerre: Inflige 2 points de dégâts au héros adverse.","manaCost":3,"image":"front_spider.jpg","cardClass":"YELLINGGIRL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":10,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false},"name":"Big Baby","description":"Provocation","manaCost":7,"image":"big_baby.jpg","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":4,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","health":1}},"name":"Big Shak","description":"You don't know.","manaCost":5,"image":"big_shak.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":6,"attack":6,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":3,"method":"dealDamageToAll"}},"name":"Crak Kid","description":"YAAAAAAAH.","manaCost":6,"image":"crack_kid.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"damage":2,"method":"dealDamageRepeatable"}},"name":"Darude Sandstorm","description":"Inflige 2 points de dégâts à tous les serviteurs. Recommence à chaque fois qu'un serviteur meurt.","manaCost":3,"image":"darude.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"SPELL","changed":false,"obs":[]},{"health":2,"attack":4,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":true,"charge":true,"battleCry":{"amount":1,"method":"addEmptyMana"}},"name":"Dolan","description":"Charge. Bouclier divin","manaCost":4,"image":"dolan.jpg","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"health":5,"attack":5,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"method":"buffAllies","attack":2}},"name":"Elon Musk","description":"Cri de guerre: ajoute 2 d'attaque aux serviteurs alliés.","manaCost":7,"image":"elon.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"spellMechanics":{"mechanic":{"amount":2,"method":"summonMinions","minionId":13}},"name":"Tinkles","description":"Invoque 2 Tinkle.","manaCost":1,"image":"gae.jpg","cardClass":"NEUTRAL","rarity":"FREE","type":"SPELL","changed":false,"obs":[]},{"health":3,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":true,"divineShield":false,"charge":false,"deathRattle":{"damage":10,"method":"dealDamageToRandom","target":1}},"name":"Gavin","description":"Provocation. Râle d'agonie: inflige 10 points de dégâts à un ennemi aléatoire.","manaCost":6,"image":"gavin.jpg","cardClass":"NEUTRAL","rarity":"LEGENDARY","type":"MINION","changed":false,"obs":[]},{"health":3,"attack":1,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"deathRattle":{"method":"buffAllies","health":1}},"name":"Un groupe de musique","description":"Râle d'agonie: Ajoute 1 point de vie à tous les serviteurs alliés.","manaCost":3,"image":"groupe_musique.png","cardClass":"NEUTRAL","rarity":"EPIC","type":"MINION","changed":false,"obs":[]},{"health":2,"attack":3,"hasAttacked":false,"minionMechanics":{"taunt":false,"divineShield":false,"charge":false,"battleCry":{"damage":1,"method":"dealDamageToOpponent"}},"name":"Hackerman","description":"Bouclier divin. Cri de guerre: Inflige 1 points de dégât au héros adverse.","manaCost":3,"image":"hackerman.png","cardClass":"NEUTRAL","rarity":"RARE","type":"MINION","changed":false,"obs":[]},{"attack":1,"durability":7,"name":"Hamburger","description":"","manaCost":3,"image":"hamburger.png","cardClass":"YELLINGGIRL","rarity":"RARE","type":"WEAPON","changed":false,"obs":[]}],"heroClass":"MAGE","changed":false,"obs":[]}} \ No newline at end of file diff --git a/src/test/java/AbilitiesTest.java b/src/test/java/AbilitiesTest.java index ffbf3a6..eb86b38 100644 --- a/src/test/java/AbilitiesTest.java +++ b/src/test/java/AbilitiesTest.java @@ -148,4 +148,14 @@ public void dealDamageRepeatable() { //TODO } + @Test + public void dealDamageToRandomAH(){ + Card AH = cardManager.getCardFromId("2"); + Player player = game.getCurrentPlayer(); + player.getHand().addCard(AH); + List hand = player.getHand().getCards(); + player.playCard(hand.get(hand.size() - 1)); + assertEquals(27, Game.getInstance().getOpponent(player).getHero().getHealth()); + } + } diff --git a/src/test/java/DeckTest.java b/src/test/java/DeckTest.java index 091c84f..07c97da 100644 --- a/src/test/java/DeckTest.java +++ b/src/test/java/DeckTest.java @@ -27,7 +27,6 @@ public void writeToJSON() throws Exception { deckManager.addCard(paulDeck, cardManager.getCardFromId("10")); deckManager.addCard(paulDeck, cardManager.getCardFromId("11")); deckManager.addCard(paulDeck, cardManager.getCardFromId("12")); - deckManager.addCard(paulDeck, cardManager.getCardFromId("13")); deckManager.addCard(paulDeck, cardManager.getCardFromId("14")); deckManager.addCard(paulDeck, cardManager.getCardFromId("15")); deckManager.addCard(paulDeck, cardManager.getCardFromId("16")); @@ -46,7 +45,6 @@ public void writeToJSON() throws Exception { deckManager.addCard(nathanDeck, cardManager.getCardFromId("10")); deckManager.addCard(nathanDeck, cardManager.getCardFromId("11")); deckManager.addCard(nathanDeck, cardManager.getCardFromId("12")); - deckManager.addCard(nathanDeck, cardManager.getCardFromId("13")); deckManager.addCard(nathanDeck, cardManager.getCardFromId("14")); deckManager.addCard(nathanDeck, cardManager.getCardFromId("15")); deckManager.addCard(nathanDeck, cardManager.getCardFromId("16"));