Création de la méthode attaquer de plateau et de joueur

This commit is contained in:
Paul Gross 2020-04-21 11:46:41 +02:00
parent 10262e8792
commit 461c38ba1b
19 changed files with 163 additions and 87 deletions

View File

@ -1,50 +0,0 @@
package condition;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import main.Joueur;
import carte.CartePersonnage;
import carte.Type;
public class ConditionClass<T> extends Condition{
private List<Class<T>> classes;
public ConditionClass(Class<T> ... classes){
// TODO
this.classes = new ArrayList<Class<T>>();
this.classes.addAll(Arrays.asList(classes));
}
/**
* Vérifie qu'il existe au moins une classe qui correspond soit au Type soit au Personnage du Joueur.
* <br><br>
* exemple :
*
* classes = { Emi.class, Metamorphe.class, ... etc } ou classes = { Hunter.class, Shadow.class, Neutre.class }
* <br>
* Si la class de la carte du joueur correspond à un des élements dans classes alors on renvoie vrai, même chose pour les types.
*
* @param joueur Le joueur sur lequel on vérifie les conditions.
* @return boolean
*/
@Override
public boolean isTrue(Joueur joueur)
{
Class<? extends T> ccp = (Class<? extends T>) joueur.getCartePersonnage().getClass();
Class<? extends T> cct = (Class<? extends T>) joueur.getType().getClass();
for(Class<? extends T> classe : classes) {
if(ccp.getClass() == classe.getClass() || cct.getClass() == classe.getClass() ) return true;
}
return false;
}
}

View File

@ -1,9 +1,14 @@
package effet;
import effet.action.Action;
import main.Joueur;
public abstract class EffetTarget extends Effet{
public EffetTarget(Action action) {
super(action);
}
public abstract void utiliser(Joueur joueur);
}

View File

@ -1,6 +1,7 @@
package effet.action;
import main.Joueur;
import main.Plateau;
public class ActionAttaquer extends Action {
@ -12,7 +13,10 @@ public class ActionAttaquer extends Action {
*/
@Override
public void affecte(Joueur j1, Joueur j2) {
j1.attaquer(j2);
Plateau p = j1.getPlateau();
p.attaquer(j1, j2);
}
}

View File

@ -59,6 +59,8 @@ public class Joueur {
}
public void setStat(String key, int valeur) {
// TODO Il faut créer des observers de mort
this.stats.put(key, valeur);
}
@ -101,11 +103,35 @@ public class Joueur {
}
public void attaquer(Joueur j2) {
// TODO Auto-generated method stub
public void attaquer(Joueur j2, int attaqueDice) {
int blessure = evaluerImmunite(j2)*(this.evaluerAttaque(j2) + attaqueDice);
if(blessure > 0)
{
j2.addStat(PLAYER_HP, -blessure);
}
}
private int evaluerAttaque(Joueur j2) {
return this.getStat(PLAYER_DAMAGE)-j2.getStat(PLAYER_RESISTANCE);
}
private int evaluerImmunite(Joueur j2) {
int nbToursImmune = j2.getStat(PLAYER_IMMUNITY);
return nbToursImmune > 0 ? 0 : 1;
}
private void addStat(String key, int valeur)
{
int valeurBase = this.getStat(key);
this.setStat(Joueur.PLAYER_HP,valeurBase+valeur);
}
public Plateau getPlateau() {
return this.plateau;
}

View File

@ -64,6 +64,13 @@ public class Plateau {
public void attaquer(Joueur joueur1, Joueur joueur2) {
int attaque = diffRolls();
if(attaque != 0) {
joueur1.attaquer(joueur2,attaque);
}
}
@ -71,15 +78,16 @@ public class Plateau {
return new Joueur("0");
}
public int sumRolls() {
//pas necessaire?
return 0;
public int diffRolls() {
return Math.abs(roll6()-roll4());
}
public int roll4() {
return (int) Math.floor(Math.random() * 3)+1;
}
public int rollDices4() {
return Math.abs(roll4() - roll4());
}

View File

@ -15,8 +15,8 @@ import main.Plateau;
public class Allie extends Unique{
public Allie(String nom, int hp, Joueur joueur) throws Exception {
super(nom, hp, joueur);
public Allie(Joueur joueur) {
super("ALLIE", 8, joueur);
Action action = new ActionAltererStatistiquesJoueur("HP",this.getPv(),false);
Effet effet = new EffetSelf(action);
@ -38,10 +38,11 @@ public class Allie extends Unique{
* @param j
* @return void
*/
public void utiliser(Joueur j) {
public void utiliser() {
if(!this.isCapaciteUsed()) {
this.getEffet().utiliser(j);
this.getEffet().utiliser(this.getJoueur());
this.setCapaciteUsed(true);
}
}

View File

@ -12,12 +12,14 @@ public class Bob extends CartePersonnage{
this.setCondition(condition);
}
@Override
public void utiliser(Joueur j){
}
public void attaquer(Joueur j) {
}
@Override
public void utiliser() {
// TODO Auto-generated method stub
}
}

View File

@ -20,7 +20,7 @@ public abstract class CartePersonnage extends CarteCondition {
//méthodes
public void utiliser() {};
public abstract void utiliser();
public void attaquer(Joueur j) {};

View File

@ -13,4 +13,10 @@ public class Charles extends CartePersonnage{
public void attaquer(Joueur j) {
}
@Override
public void utiliser() {
// TODO Auto-generated method stub
}
}

View File

@ -34,4 +34,9 @@ public class Daniel extends CartePersonnage{
this.setCondition(winCondition);
}
@Override
public void utiliser() {
// TODO Auto-generated method stub
}
}

View File

@ -16,4 +16,10 @@ public class Emi extends CartePersonnage{
}
@Override
public void utiliser() {
// TODO Auto-generated method stub
}
}

View File

@ -15,4 +15,10 @@ public class LoupGarou extends CartePersonnage {
public void contreAttaquer(Joueur j) {
}
@Override
public void utiliser() {
// TODO Auto-generated method stub
}
}

View File

@ -10,4 +10,10 @@ public class Metamorphe extends CartePersonnage{
this.setCondition(new WinConditionShadow());
}
@Override
public void utiliser() {
// TODO Auto-generated method stub
}
}

View File

@ -21,4 +21,10 @@ public class Unique extends CartePersonnage{
this.capaciteUsed = capaciteUsed;
}
@Override
public void utiliser() {
// TODO Auto-generated method stub
}
}

View File

@ -19,9 +19,10 @@ public class Vampire extends CartePersonnage{
this.setCondition(new WinConditionShadow());
}
public void utiliser(Joueur j)
@Override
public void utiliser()
{
this.getEffet().utiliser(j);
this.getEffet().utiliser(this.getJoueur());
}
/**
@ -38,4 +39,6 @@ public class Vampire extends CartePersonnage{
utiliser(this.getJoueur());
}
}
}

View File

@ -28,7 +28,7 @@ class ConditionClassPersonnageTest {
ConditionClassPersonnage cc = new ConditionClassPersonnage(classes);
Joueur j = new Joueur(null);
CartePersonnage cp1 = new Allie(null, 0, j);
CartePersonnage cp1 = new Allie(j);
// Le personnage fait partie des classes.
@ -51,7 +51,7 @@ class ConditionClassPersonnageTest {
ConditionClassPersonnage cc = new ConditionClassPersonnage(classes);
Joueur j = new Joueur(null);
CartePersonnage cp1 = new Allie(null, 0, j);
CartePersonnage cp1 = new Allie(j);
j.setCartePersonnage(cp1);
assertFalse(cc.isTrue(j));

View File

@ -1,14 +0,0 @@
package condition;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class ConditionClassTest {
@Test
void test() {
fail("Not yet implemented");
}
}

View File

@ -61,8 +61,6 @@ class ConditionStatistiquesTest {
cs = new ConditionStatistiques(false,"test",randInt2,ConditionStatistiques.LESS);
assertEquals(cs.isTrue(joueur),randInt3 <= randInt2);
cs = new ConditionStatistiques(false,"test",randInt3,ConditionStatistiques.LESS);
assertEquals(cs.isTrue(joueur),randInt3 <= randInt2);
}
@Test
@ -79,6 +77,7 @@ class ConditionStatistiquesTest {
//Valeur censée être comprise entre 0 et 2
-1);
assertFalse(cs.isTrue(joueur));
}

View File

@ -0,0 +1,57 @@
package personnage;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import main.Joueur;
import main.Plateau;
class AllieTest {
Joueur j1;
Plateau p;
Random rand;
Allie a;
@BeforeEach
void init()
{
rand = new Random();
List<Joueur> joueurs = new ArrayList<Joueur>();
j1 = new Joueur("Michel");
joueurs.add(j1);
p = new Plateau(joueurs);
a = new Allie(j1);
j1.setPlateau(p);
j1.setCartePersonnage(a);
}
@Test
void utiliser_SoinTotal() {
j1.setStat("HP", 0);
j1.getCartePersonnage().utiliser();
int pvAllie = j1.getCartePersonnage().getPv();
assertEquals(pvAllie,j1.getStat("HP"));
j1.setStat("HP", 0);
j1.getCartePersonnage().utiliser();
// Le soin n'a fonctionné qu'une seule fois
assertEquals(0,j1.getStat("HP"));
}
}