19-08-2023, 06:20 PM
Et de la sacro-sainte Céleste.
Soit le TU suivant:
On teste avec 10 sacro-saintes (sans stratagème, rage sacrée: +1 au jet de blessure) et avec 5 sacro-saintes.
On a donc respectivement 3/4/2/2 morts à coup de hallebarde (car le marine a 2PV).
Mais on a 3/4/3/3 morts à coup de masse.
La masse (F:4, PA:-1,Dégât:2) est donc plus intéressant que la Hallebarde (F:5, PA:-2,Dégâts:1).
C'est du au nombre de dégâts. Quand le marine rate sa sauvegarde face à une masse, il meurt!
Soit le TU suivant:
Code:
package com.calculateur.warhammer.calcul.mort.arbre.calcul;
import org.apache.commons.math3.fraction.Fraction;
import org.junit.jupiter.api.Test;
import com.calculateur.warhammer.base.exception.FunctionnalExeption;
import com.calculateur.warhammer.calcul.mort.arbre.INoeudArbre;
import com.calculateur.warhammer.calcul.mort.arbre.calcul.builder.adepta.sororitas.SacroSainteCelesteBuilderAttaque;
import com.calculateur.warhammer.calcul.mort.arbre.calcul.builder.chaos.space.marine.SpaceMarineDuChaosBuilderDefense;
import com.calculateur.warhammer.calcul.mort.arbre.data.DataCalculProbabiliteBuilder;
import com.calculateur.warhammer.calcul.mort.arbre.data.IDataCalculProbabilite;
import com.calculateur.warhammer.calcul.test.utils.FractionCheminBuilder;
import com.calculateur.warhammer.data.action.IContexteAction;
import com.calculateur.warhammer.data.enumeration.EGestionDe;
import com.calculateur.warhammer.data.enumeration.EMouvement;
import com.calculateur.warhammer.data.enumeration.ESimule;
import com.calculateur.warhammer.data.identifiable.batiment.RecordBatiment;
import com.calculateur.warhammer.data.unite.IConstituantDefenseur;
public class SacroSainteCelesteVSChaosSpaceMarineTest extends AbstractCalculArbreTest{
@Test
public void SacrosSaintes10HallebardeTest() throws FunctionnalExeption{
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(2,3);
Fraction probaRateSauvegarde = new Fraction(2,3);
Fraction probaAttendu = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
Integer nombreReussite = 6;//On tue donc 3 marines
IDataCalculProbabilite data = getData(10, false, false);
INoeudArbre racine = doTestStandard(data, probaAttendu, nombreReussite);
RecordBlessures blessures = new RecordBlessures(1, null, null, 1);
validateBlessureNormales(racine, blessures);
}
@Test
public void SacrosSaintes10HallebardeRageSacreeTest() throws FunctionnalExeption{
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(5,6);
Fraction probaRateSauvegarde = new Fraction(2,3);
Fraction probaAttendu = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
Integer nombreReussite = 8;//On tue donc 4 marines
IDataCalculProbabilite data = getData(10, false, true);
INoeudArbre racine = doTestStandard(data, probaAttendu, nombreReussite);
RecordBlessures blessures = new RecordBlessures(1, null, null, 1);
validateBlessureNormales(racine, blessures);
}
@Test
public void SacrosSaintes5HallebardeTest() throws FunctionnalExeption{
Fraction probaTouche = new Fraction(5, 6);
Fraction probaBlesse = new Fraction(2,3);
Fraction probaRateSauvegarde = new Fraction(2,3);
Fraction probaAttendu = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
Integer nombreReussite = 4;//On tue donc 2 marines
IDataCalculProbabilite data = getData(5, false, false);
INoeudArbre racine = doTestStandard(data, probaAttendu, nombreReussite);
RecordBlessures blessures = new RecordBlessures(1, null, null, 1);
validateBlessureNormales(racine, blessures);
}
@Test
public void SacrosSaintes5HallebardeRageSacreeTest() throws FunctionnalExeption{
Fraction probaTouche = new Fraction(5, 6);
Fraction probaBlesse = new Fraction(5,6);
Fraction probaRateSauvegarde = new Fraction(2,3);
Fraction probaAttendu = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
Integer nombreReussite = 4;//On tue donc 2 marines
IDataCalculProbabilite data = getData(5, false, true);
INoeudArbre racine = doTestStandard(data, probaAttendu, nombreReussite);
RecordBlessures blessures = new RecordBlessures(1, null, null, 1);
validateBlessureNormales(racine, blessures);
}
@Test
public void SacrosSaintes10MasseTest() throws FunctionnalExeption{
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(1,2);
Fraction probaRateSauvegarde = new Fraction(1,2);
Fraction probaAttendu = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
Integer nombreReussite = 3;//On tue donc 3 marines
IDataCalculProbabilite data = getData(10, true, false);
INoeudArbre racine = doTestStandard(data, probaAttendu, nombreReussite);
RecordBlessures blessures = new RecordBlessures(2, null, null, 1);
validateBlessureNormales(racine, blessures);
}
@Test
public void SacrosSaintes10MasseRageSacree() throws FunctionnalExeption{
Fraction probaTouche = new Fraction(2, 3);
Fraction probaBlesse = new Fraction(2,3);
Fraction probaRateSauvegarde = new Fraction(1,2);
Fraction probaAttendu = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
Integer nombreReussite = 4;//On tue donc 4 marines
IDataCalculProbabilite data = getData(10, true, true);
INoeudArbre racine = doTestStandard(data, probaAttendu, nombreReussite);
RecordBlessures blessures = new RecordBlessures(2, null, null, 1);
validateBlessureNormales(racine, blessures);
}
@Test
public void SacrosSaintes5MasseTest() throws FunctionnalExeption{
Fraction probaTouche = new Fraction(5, 6);
Fraction probaBlesse = new Fraction(1,2);
Fraction probaRateSauvegarde = new Fraction(1,2);
Fraction probaAttendu = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
Integer nombreReussite = 3;//On tue donc 3 marines
IDataCalculProbabilite data = getData(5, true, false);
INoeudArbre racine = doTestStandard(data, probaAttendu, nombreReussite);
RecordBlessures blessures = new RecordBlessures(2, null, null, 1);
validateBlessureNormales(racine, blessures);
}
@Test
public void SacrosSaintes5MasseRageSacree() throws FunctionnalExeption{
Fraction probaTouche = new Fraction(5, 6);
Fraction probaBlesse = new Fraction(2,3);
Fraction probaRateSauvegarde = new Fraction(1,2);
Fraction probaAttendu = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
Integer nombreReussite = 3;//On tue donc 3 marines
IDataCalculProbabilite data = getData(5, true, true);
INoeudArbre racine = doTestStandard(data, probaAttendu, nombreReussite);
RecordBlessures blessures = new RecordBlessures(2, null, null, 1);
validateBlessureNormales(racine, blessures);
}
private IDataCalculProbabilite getData(Integer nbSoeur,boolean isMasse,boolean isRageSacree) {
IContexteAction context = getContextAction(nbSoeur);
SacroSainteCelesteBuilderAttaque builder = SacroSainteCelesteBuilderAttaque.getInstance(context, nbSoeur);
if(isMasse) {
builder.equipeMasseEnergetique();
}else {
builder.equipeHallebardeConsacree();
}
if(isRageSacree) {
builder.utiliseStratagemeRageSacree();
}
IConstituantDefenseur defenseur = SpaceMarineDuChaosBuilderDefense.getInstance(context, 10).build();
return DataCalculProbabiliteBuilder.getInstance()
.addContextAction(context)
.addAttaquant(builder.build())
.addDefenseur(defenseur)
.addGestionNombreAttaque(EGestionDe.SIMULATION_OPTIMISTE)
.addGestionJetToucheBlessure(EGestionDe.SIMULATION_OPTIMISTE)
.addGestionSauvegardeDefenseur(EGestionDe.SIMULATION_OPTIMISTE)
.build();
}
private IContexteAction getContextAction(Integer nbSoeur) {
return ContextActionForTestProbaBuilder.getInstance()
.addSimule(ESimule.CORPS_A_CORPS_APRES_CHARGE)
.addNumeroTour(2)
.addEffectifInitialAttaquant(10)
.addEffectifCourantAttaquant(nbSoeur)
.addMouvementAttaquant(EMouvement.IMMOBILE)
.addBatimentAttaquant(new RecordBatiment(false, false))
.addEffectifCourantDefenseur(10)
.addMouvementDefenseur(EMouvement.IMMOBILE)
.addBatimentDefenseur(new RecordBatiment(false, false))
.addDistanceEntreBelligerant(0.0)
.build();
}
}
On teste avec 10 sacro-saintes (sans stratagème, rage sacrée: +1 au jet de blessure) et avec 5 sacro-saintes.
On a donc respectivement 3/4/2/2 morts à coup de hallebarde (car le marine a 2PV).
Mais on a 3/4/3/3 morts à coup de masse.
La masse (F:4, PA:-1,Dégât:2) est donc plus intéressant que la Hallebarde (F:5, PA:-2,Dégâts:1).
C'est du au nombre de dégâts. Quand le marine rate sa sauvegarde face à une masse, il meurt!