Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Projet Calculateur
#47
Uu tour d'horizon de notre ami le Castigator.

Ce qui donne 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.CastigatorAttaqueBuilder;
import com.calculateur.warhammer.calcul.mort.arbre.calcul.builder.tyranide.TermagantBuilderDefense;
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.IConstituantAttaquant;
import com.calculateur.warhammer.data.unite.IConstituantDefenseur;

public class CastigatorVSTermagauntTest extends AbstractCalculArbreTest{
    
    @Test
    public void testObusierCastigatorPasPertePV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(2,3), false, new Fraction(5,6));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirObusierCastigator(0, 12.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 1);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testObusierCastigatorPerte5() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(5,6), false, new Fraction(5,6));
        Integer nombre = 7;
        IDataCalculProbabilite data = getDataTirObusierCastigator(5, 12.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 1);
        validateBlessureNormales(racine, blessures);
    }

    @Test
    public void testObusierCastigatorPerte10PV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(2,3), false, new Fraction(5,6));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirObusierCastigator(10, 12.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 1);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testObusierCastigatorPerte10PVLumiereEmpereur() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(5,6), false, new Fraction(5,6));
        Integer nombre = 7;
        IDataCalculProbabilite data = getDataTirObusierCastigator(10, 12.0, true);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 1);
        validateBlessureNormales(racine, blessures);
    }
    
    private IDataCalculProbabilite getDataTirObusierCastigator(Integer pvPerdu,Double distanceBelligerent,boolean isStratagemeLumiereEmpereur) {
        IContexteAction contexteAction = getContextAction(pvPerdu, ESimule.TIR_PHASE_TIR, distanceBelligerent);
        IConstituantDefenseur defenseur = TermagantBuilderDefense.getInstance(contexteAction, 10).build();
        CastigatorAttaqueBuilder builder = CastigatorAttaqueBuilder.getInstance(contexteAction, 1).equipeObusierCastigator(defenseur.getProfil().getTypesProfils());
        if(isStratagemeLumiereEmpereur) {
            builder.utiliseStratagemeLumiereEmpereur();
        }
        IConstituantAttaquant attaquant = builder.build();
        return DataCalculProbabiliteBuilder.getInstance()
                .addContextAction(contexteAction)
                .addAttaquant(attaquant)
                .addDefenseur(defenseur)
                .addGestionNombreAttaque(EGestionDe.SIMULATION_OPTIMISTE)
                .addGestionJetToucheBlessure(EGestionDe.SIMULATION_OPTIMISTE)
                .addGestionSauvegardeDefenseur(EGestionDe.SIMULATION_OPTIMISTE)
                .build();
    }
    
    @Test
    public void testAutocanonCastigator30psPasPertePV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(2,3), true, new Fraction(5,6));
        Integer nombre = 3;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_PHASE_TIR, 0, 30.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator30psPerte5PV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(5,6), true, new Fraction(5,6));
        Integer nombre = 3;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_PHASE_TIR, 5, 30.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator30psPerte10PV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(2,3), true, new Fraction(5,6));
        Integer nombre = 3;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_PHASE_TIR, 10, 30.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator30psPerte10PVLumiereEmpereur() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(5,6), true, new Fraction(5,6));
        Integer nombre = 3;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_PHASE_TIR, 10, 30.0, true);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator24psPasPertePV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(2,3), true, new Fraction(5,6));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_PHASE_TIR, 0, 24.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator24psPerte5PV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(5,6), true, new Fraction(5,6));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_PHASE_TIR, 5, 24.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator24psPerte10PV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(2,3), true, new Fraction(5,6));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_PHASE_TIR, 10, 24.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator24psPerte10PVLumiereEmpereur() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(5,6), true, new Fraction(5,6));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_PHASE_TIR, 10, 24.0, true);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator6psPasPertePV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(2,3), true, new Fraction(5,6));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_PHASE_TIR, 0, 6.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator6psPerte5PV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(5,6), true, new Fraction(5,6));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_PHASE_TIR, 5, 6.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator6psPerte10PV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(2,3), true, new Fraction(5,6));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_PHASE_TIR, 10, 6.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator6psPerte10PVLumiereEmpereur() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(5,6), true, new Fraction(5,6));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_PHASE_TIR, 10, 6.0, true);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator0psPasPertePV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(1,2), true, new Fraction(5,6));
        Integer nombre = 6;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_AU_SEIN_CORPS_A_CORPS, 0, 0.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator0psPerte5PV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(2,3), true, new Fraction(5,6));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_AU_SEIN_CORPS_A_CORPS, 5, 0.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator0psPerte10PV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(1,2), true, new Fraction(5,6));
        Integer nombre = 6;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_AU_SEIN_CORPS_A_CORPS,10, 0.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testAutocanonCastigator0psPerte10PVLumiereEmpereur() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(5,6), true, new Fraction(5,6));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirAutocanonCastigator(ESimule.TIR_AU_SEIN_CORPS_A_CORPS, 10, 0.0, true);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(3, null, null, 4);
        validateBlessureNormales(racine, blessures);
    }
    
    private IDataCalculProbabilite getDataTirAutocanonCastigator(ESimule simule,Integer pvPerdu,Double distanceBelligerent,boolean isStratagemeLumiereEmpereur) {
        IContexteAction contexteAction = getContextAction(pvPerdu, simule, distanceBelligerent);
        IConstituantDefenseur defenseur = TermagantBuilderDefense.getInstance(contexteAction, 10).build();
        CastigatorAttaqueBuilder builder = CastigatorAttaqueBuilder.getInstance(contexteAction, 1).equipeAutocanonCastigator(defenseur.getProfil().getTypesProfils());
        if(isStratagemeLumiereEmpereur) {
            builder.utiliseStratagemeLumiereEmpereur();
        }
        IConstituantAttaquant attaquant = builder.build();
        return DataCalculProbabiliteBuilder.getInstance()
                .addContextAction(contexteAction)
                .addAttaquant(attaquant)
                .addDefenseur(defenseur)
                .addGestionNombreAttaque(EGestionDe.SIMULATION_OPTIMISTE)
                .addGestionJetToucheBlessure(EGestionDe.SIMULATION_OPTIMISTE)
                .addGestionSauvegardeDefenseur(EGestionDe.SIMULATION_OPTIMISTE)
                .build();
    }
    
    @Test
    public void testBolterLourd30psPasPertePV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(2,3), false, new Fraction(2,3));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirBolterLourd(ESimule.TIR_PHASE_TIR, 0, 30.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(2, null, null, 1);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testBolterLourd30psPerte5PV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(5,6), false, new Fraction(2,3));
        Integer nombre = 6;
        IDataCalculProbabilite data = getDataTirBolterLourd(ESimule.TIR_PHASE_TIR, 5, 30.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(2, null, null, 1);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testBolterLourd30psPerte10PV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(2,3), false, new Fraction(5,6));
        Integer nombre = 6;
        IDataCalculProbabilite data = getDataTirBolterLourd(ESimule.TIR_PHASE_TIR, 10, 30.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(2, null, null, 1);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testBolterLourd30psPerte10PVLumiereEmpereur() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(5,6), false, new Fraction(5,6));
        Integer nombre = 7;
        IDataCalculProbabilite data = getDataTirBolterLourd(ESimule.TIR_PHASE_TIR, 10, 30.0, true);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(2, null, null, 1);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testBolterLourd0psPasPertePV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(1,2), false, new Fraction(2,3));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirBolterLourd(ESimule.TIR_AU_SEIN_CORPS_A_CORPS, 0, 0.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(2, null, null, 1);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testBolterLourd0psPerte5PV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(2,3), false, new Fraction(2,3));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirBolterLourd(ESimule.TIR_AU_SEIN_CORPS_A_CORPS, 5, 0.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(2, null, null, 1);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testBolterLourd0psPerte10PV() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(1,2), false, new Fraction(5,6));
        Integer nombre = 5;
        IDataCalculProbabilite data = getDataTirBolterLourd(ESimule.TIR_AU_SEIN_CORPS_A_CORPS, 10, 0.0, false);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(2, null, null, 1);
        validateBlessureNormales(racine, blessures);
    }
    
    @Test
    public void testBolterLourd0psPerte10PVLumiereEmpereur() throws FunctionnalExeption{
        Fraction probaAttendu = getProbaAttendu(new Fraction(5,6), false, new Fraction(5,6));
        Integer nombre = 7;
        IDataCalculProbabilite data = getDataTirBolterLourd(ESimule.TIR_PHASE_TIR, 10, 0.0, true);
        INoeudArbre racine = doTestStandard(data, probaAttendu, nombre);
        RecordBlessures blessures = new RecordBlessures(2, null, null, 1);
        validateBlessureNormales(racine, blessures);
    }
    
    private IDataCalculProbabilite getDataTirBolterLourd(ESimule simule,Integer pvPerdu,Double distanceBelligerent,boolean isStratagemeLumiereEmpereur) {
        IContexteAction contexteAction = getContextAction(pvPerdu, simule, distanceBelligerent);
        IConstituantDefenseur defenseur = TermagantBuilderDefense.getInstance(contexteAction, 10).build();
        CastigatorAttaqueBuilder builder = CastigatorAttaqueBuilder.getInstance(contexteAction, 3).equipeBolterLourd();
        if(isStratagemeLumiereEmpereur) {
            builder.utiliseStratagemeLumiereEmpereur();
        }
        IConstituantAttaquant attaquant = builder.build();
        return DataCalculProbabiliteBuilder.getInstance()
                .addContextAction(contexteAction)
                .addAttaquant(attaquant)
                .addDefenseur(defenseur)
                .addGestionNombreAttaque(EGestionDe.SIMULATION_OPTIMISTE)
                .addGestionJetToucheBlessure(EGestionDe.SIMULATION_OPTIMISTE)
                .addGestionSauvegardeDefenseur(EGestionDe.SIMULATION_OPTIMISTE)
                .build();
    }
    
    private IContexteAction getContextAction(Integer pvPerdu,ESimule simule,Double distanceBelligerent) {
        return ContextActionForTestProbaBuilder.getInstance()
                .addSimule(simule)
                .addNumeroTour(2)
                .addEffectifInitialAttaquant(1)
                .addEffectifCourantAttaquant(1)
                .addPointsViesPerdusAttaquant(pvPerdu)
                .addMouvementAttaquant(EMouvement.IMMOBILE)
                .addBatimentAttaquant(new RecordBatiment(false, false))
                .addEffectifCourantDefenseur(10)
                .addMouvementDefenseur(EMouvement.IMMOBILE)
                .addBatimentDefenseur(new RecordBatiment(false, false))
                .addDistanceEntreBelligerant(distanceBelligerent)
                .build();
    }
    
    private Fraction getProbaAttendu(Fraction probaTouche, boolean isRelance,Fraction probaBlesse) {
        Fraction ensemble = new Fraction(1);
        Fraction probaRateTouche = ensemble.subtract(probaTouche);
        Fraction probaRateBlesse = ensemble.subtract(probaBlesse);
        Fraction probaRateSauvegarde = new Fraction(5,6);
        Fraction probaAttendu;
        if(isRelance) {
            Fraction chemin1 = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
            Fraction chemin2 = FractionCheminBuilder.getInstance().addFraction(probaRateTouche).addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
            Fraction chemin3 = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaRateBlesse).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
            Fraction chemin4 = FractionCheminBuilder.getInstance().addFraction(probaRateTouche).addFraction(probaTouche).addFraction(probaRateBlesse).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
            probaAttendu = chemin1.add(chemin2).add(chemin3).add(chemin4);
        }else {
            probaAttendu = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
        }
        return probaAttendu;
    }
}

Question: Faut-il mieux face à des termagaunt l'autocanon (qui est jumelé et relance les  touche contre l'infanterie) ou l'obusier (qui relance les touche contre l'infanterie).

Notez que l'obusier ignore les couvert (par regardé cet aspect).

Pour le test, on gère l'aléatoire (car l'obusier est Blast) du plus haut vers le plus  bas.
Effectivement, si on lance 8D6, les scores sont (6,5,4,3,2,1,6,5).
Donc ici, l'obusier fait 6 (j'ai de la chance).

Ce choix est fait pour écrire plus facilement le TU. Mais je gère j'ai pas de chance, j'ai de la chance mais je suis centré sur la moyenne, j'ai pas de chance mais je suis centré sur la moyenne, et je fait de l'aléatoire pur.

Déjà, rapelons que l'autocanon peut, contrairement à l'obusier, tirer au corps à corps.

Donc, il faut comparer l'obsier et l'autocanon à mi-porté (car celui-ci est tir-rapide).

Les cas intéressant sont pas de perte de PV, perte de quelques PV (-1 au jet de touche), perte de 10PV (en reste 1 donc ici -1 au jet de blessure) et utilisation si on perd 10 PV du stratagème lumière de l'empereur (Ignore les malus).

Avoir la vision proba est plus complexe (mais c'est testé).

Au final, à l'obusier on fait respectivement 5,7,5,7 morts dans les rangs termagaunts (ce qui est la moitié, restre les bolters lourds).

On fait 5,5,5 et 5 morts dans les rangs termagaunts.

Donc au final, pour tuer du termagaunt, l'obusier est mieux.
Reply


Messages In This Thread
Projet Calculateur - by Philou - 12-09-2022, 09:47 AM
RE: Projet Calculateur - by Philou - 12-09-2022, 09:52 AM
RE: Projet Calculateur - by Philou - 17-09-2022, 09:14 PM
RE: Projet Calculateur - by Philou - 25-09-2022, 07:26 AM
RE: Projet Calculateur - by Philou - 25-09-2022, 08:54 AM
RE: Projet Calculateur - by Philou - 03-10-2022, 10:54 AM
RE: Projet Calculateur - by Philou - 16-10-2022, 11:36 AM
RE: Projet Calculateur - by Philou - 24-10-2022, 01:08 PM
RE: Projet Calculateur - by Philou - 25-10-2022, 09:52 AM
RE: Projet Calculateur - by sdm - 25-10-2022, 11:06 PM
RE: Projet Calculateur - by Philou - 25-10-2022, 11:23 PM
RE: Projet Calculateur - by Philou - 26-10-2022, 03:09 PM
RE: Projet Calculateur - by Philou - 25-10-2022, 11:25 PM
RE: Projet Calculateur - by Philou - 06-11-2022, 05:27 PM
RE: Projet Calculateur - by Philou - 19-11-2022, 10:36 AM
RE: Projet Calculateur - by Philou - 23-11-2022, 08:34 AM
RE: Projet Calculateur - by Philou - 24-11-2022, 08:49 PM
RE: Projet Calculateur - by Philou - 04-12-2022, 06:57 PM
RE: Projet Calculateur - by Philou - 11-12-2022, 12:11 PM
RE: Projet Calculateur - by Philou - 18-12-2022, 06:47 PM
RE: Projet Calculateur - by Philou - 19-12-2022, 09:05 PM
RE: Projet Calculateur - by Philou - 03-01-2023, 09:34 PM
RE: Projet Calculateur - by Philou - 07-01-2023, 06:36 PM
RE: Projet Calculateur - by Philou - 01-02-2023, 08:21 PM
RE: Projet Calculateur - by Philou - 16-02-2023, 08:31 PM
RE: Projet Calculateur - by Gaeriel - 17-02-2023, 10:56 PM
RE: Projet Calculateur - by Philou - 17-02-2023, 11:32 PM
RE: Projet Calculateur - by Philou - 05-03-2023, 05:45 PM
RE: Projet Calculateur - by Philou - 06-03-2023, 08:55 PM
RE: Projet Calculateur - by Philou - 08-03-2023, 08:28 PM
RE: Projet Calculateur - by Philou - 12-03-2023, 07:56 AM
RE: Projet Calculateur - by Philou - 23-03-2023, 06:44 PM
RE: Projet Calculateur - by Philou - 28-03-2023, 08:58 PM
RE: Projet Calculateur - by Philou - 27-04-2023, 08:05 PM
RE: Projet Calculateur - by Philou - 30-04-2023, 10:29 AM
RE: Projet Calculateur - by Philou - 02-05-2023, 08:03 AM
RE: Projet Calculateur - by Philou - 19-05-2023, 11:36 AM
RE: Projet Calculateur - by Philou - 19-05-2023, 05:44 PM
RE: Projet Calculateur - by Philou - 20-05-2023, 09:10 PM
RE: Projet Calculateur - by Philou - 22-06-2023, 07:38 AM
RE: Projet Calculateur - by Philou - 24-06-2023, 07:09 AM
RE: Projet Calculateur - by Philou - 26-06-2023, 07:44 PM
RE: Projet Calculateur - by Philou - 28-06-2023, 07:09 AM
RE: Projet Calculateur - by Philou - 28-06-2023, 07:43 PM
RE: Projet Calculateur - by Philou - 30-06-2023, 07:22 PM
RE: Projet Calculateur - by Philou - 08-08-2023, 07:54 PM
RE: Projet Calculateur - by Philou - 19-08-2023, 10:30 AM
RE: Projet Calculateur - by Philou - 19-08-2023, 06:20 PM
RE: Projet Calculateur - by Philou - 20-08-2023, 10:17 AM
RE: Projet Calculateur - by Philou - 22-01-2024, 09:02 PM
RE: Projet Calculateur - by Philou - 09-05-2024, 10:21 AM
RE: Projet Calculateur - by Philou - 11-05-2024, 05:41 PM
RE: Projet Calculateur - by Philou - 25-05-2024, 08:41 AM
RE: Projet Calculateur - by Philou - 24-04-2025, 04:09 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)