Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Projet Calculateur
#43
Bon, on a fini le termi qui tire Boidleau . Le faire tirer au canon d'assaut (qui en plus est une arme classe) permet d'ajouter les blessures mortelles dans l'arbre de probabilité.

Code:
package com.calculateur.warhammer.calcul.mort.arbre.calcul;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.math3.fraction.Fraction;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

import com.calculateur.warhammer.base.exception.FunctionnalExeption;
import com.calculateur.warhammer.calcul.mort.arbre.ENatureNoeud;
import com.calculateur.warhammer.calcul.mort.arbre.INoeudArbre;
import com.calculateur.warhammer.calcul.mort.arbre.calcul.builder.space.marine.TerminatorBuilderAttaque;
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.EBlessure;
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.regles.detachement.space.marine.ESermentInstantChoix;
import com.calculateur.warhammer.data.unite.IConstituantAttaquant;
import com.calculateur.warhammer.data.unite.IConstituantDefenseur;

public class TerminatorSpaceMarineVsTermagauntTest extends AbstractCalculArbreTest{

    
    @Test
    public void testTerminatorBolterStorm10psPasSermentInstant() throws FunctionnalExeption{
        INoeudArbre racine = doTestStandard(getDataBolterStorm(ESermentInstantChoix.NON, 10.0), getAttenduAttaqueFulgurantSansRelance(), 12);
        valideTestsBolterStorm(racine, 1);
    }
    
    @Test
    public void testTerminatorBolterStorm12psPasSermentInstant() throws FunctionnalExeption{
        INoeudArbre racine = doTestStandard(getDataBolterStorm(ESermentInstantChoix.NON, 12.0), getAttenduAttaqueFulgurantSansRelance(), 12);
        valideTestsBolterStorm(racine, 1);
    }
    
    @Test
    public void testTerminatorBolterStorm118psPasSermentInstant() throws FunctionnalExeption{
        INoeudArbre racine = doTestStandard(getDataBolterStorm(ESermentInstantChoix.NON, 18.0), getAttenduAttaqueFulgurantSansRelance(), 6);
        valideTestsBolterStorm(racine, 1);
    }
    
    private Fraction getAttenduAttaqueFulgurantSansRelance() {
        Fraction probaTouche = new Fraction(2,3);
        Fraction probaBlesse = new Fraction(2,3);
        Fraction probaRateSauvegarde = new Fraction(2,3);
        return FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
    }
    
    @Test
    public void testTerminatorBolterStorm10psSermentInstant() throws FunctionnalExeption{
        INoeudArbre racine = doTestStandard(getDataBolterStorm(ESermentInstantChoix.OUI, 10.0), getAttenduAttaqueFulgurantAvecRelance(), 22);
        valideTestsBolterStorm(racine, 4);
    }
    
    @Test
    public void testTerminatorBolterStorm12psSermentInstant() throws FunctionnalExeption{
        INoeudArbre racine = doTestStandard(getDataBolterStorm(ESermentInstantChoix.OUI, 12.0), getAttenduAttaqueFulgurantAvecRelance(), 22);
        valideTestsBolterStorm(racine, 4);
    }
    
    @Test
    public void testTerminatorBolterStorm118psSermentInstant() throws FunctionnalExeption{
        INoeudArbre racine = doTestStandard(getDataBolterStorm(ESermentInstantChoix.OUI, 18.0), getAttenduAttaqueFulgurantAvecRelance(), 11);
        valideTestsBolterStorm(racine, 4);
    }
    
    private Fraction getAttenduAttaqueFulgurantAvecRelance() {
        Fraction probaTouche = new Fraction(5,6);
        Fraction probaRateTouche = new Fraction(1,6);
        
        Fraction probaBlesse = new Fraction(2,3);
        Fraction probaRateBlesse = new Fraction(1,3);
        
        Fraction probaRateSauvegarde = new Fraction(2,3);
        
        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();
        
        return chemin1.add(chemin2).add(chemin3).add(chemin4);
    }
    
    private void valideTestsBolterStorm(INoeudArbre racine,int nombreNoeudReussite) {
        int trouve = 0;
        Map<EBlessure, Integer> mAttendu = new HashMap<>();
        mAttendu.put(EBlessure.NORMALES, 1);
        for(INoeudArbre noeud:racine.arbre()) {
            if(noeud.getNatureNoeud() == ENatureNoeud.REUSSITE) {
                trouve++;
                Assertions.assertThat(noeud.mapBlessuresAleatoires()).isEmpty();
                Map<EBlessure, Integer> map = noeud.mapBlessure();
                Assertions.assertThat(map).isEqualTo(mAttendu);
            }
        }
        Assertions.assertThat(trouve).isEqualTo(nombreNoeudReussite);
    }
    
    private IDataCalculProbabilite getDataBolterStorm(ESermentInstantChoix sermentInstant,Double distanceBelligerants) {
        IContexteAction contextAction = ContextActionForTestProbaBuilder.getInstance()
                .addSimule(ESimule.TIR_PHASE_TIR)
                .addNumeroTour(2)
                .addEffectifInitialAttaquant(10)
                .addNombreAttaquant(10)
                .addMouvementAttaquant(EMouvement.IMMOBILE)
                .addBatimentAttaquant(new RecordBatiment(false, false))
                .addNombreDefenseur(10)
                .addMouvementDefenseur(EMouvement.IMMOBILE)
                .addBatimentDefenseur(new RecordBatiment(false, false))
                .addDistanceEntreBelligerant(distanceBelligerants)
                .build();
        
        IConstituantDefenseur termagaunt = TermagantBuilderDefense.getInstance(contextAction, 10).build();
        
        IConstituantAttaquant terminator = TerminatorBuilderAttaque.getInstance(contextAction, 10).addSermentInstant(sermentInstant).build();
        
        return DataCalculProbabiliteBuilder.getInstance().addAttaquant(terminator).addDefenseur(termagaunt).addContextAction(contextAction)
                .addGestionNombreAttaque(EGestionDe.SIMULATION_OPTIMISTE).addGestionJetToucheBlessure(EGestionDe.SIMULATION_OPTIMISTE).addGestionSauvegardeDefenseur(EGestionDe.SIMULATION_OPTIMISTE).build();
    }
    
    @Test
    public void testTerminatorTirCanonAssautSansSermentInstant() throws FunctionnalExeption {
        INoeudArbre racine = doTestStandard(getDataCanonAssaut(ESermentInstantChoix.NON), getProbaCanonAssautSansRelance(), 2);
        validateCanonAssaut(racine, 1, 1);
    }
    
    private Fraction getProbaCanonAssautSansRelance() {
        Fraction probaTouche = new Fraction(2,3);
        Fraction probaBlesse = new Fraction(2,3);
        Fraction probaBlessureMortelle = new Fraction(1,6);
        Fraction probaRateSauvegarde = new Fraction(2,3);
        
        Fraction cheminBlessureNormales = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
        Fraction cheminBlessureMortelles = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlessureMortelle).build();
        return cheminBlessureNormales.add(cheminBlessureMortelles);
    }
    
    @Test
    public void testTerminatorTirCanonAssautSermentInstant() throws FunctionnalExeption {
        INoeudArbre racine = doTestStandard(getDataCanonAssaut(ESermentInstantChoix.OUI), getProbaCanonAssautAvecRelance(), 4);
        validateCanonAssaut(racine, 4, 4);
    }
    
    private Fraction getProbaCanonAssautAvecRelance() {
        Fraction probaTouche = new Fraction(5,6);
        Fraction probaRateTouche = new Fraction(1,6);
        
        Fraction probaBlesse = new Fraction(2,3);
        Fraction probaBlessureMortelle = new Fraction(1,6);
        Fraction probaRateBlessure = new Fraction(1,6);

        Fraction probaRateSauvegarde = new Fraction(2,3);
        
        //Normale
        Fraction cNormal1 = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
        Fraction cNormal2 = FractionCheminBuilder.getInstance().addFraction(probaRateTouche).addFraction(probaTouche)
                .addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
        Fraction cNormal3 = FractionCheminBuilder.getInstance().addFraction(probaTouche)
                .addFraction(probaRateBlessure).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
        Fraction cNormal4 = FractionCheminBuilder.getInstance().addFraction(probaRateTouche).addFraction(probaTouche)
                .addFraction(probaRateBlessure).addFraction(probaBlesse).addFraction(probaRateSauvegarde).build();
        Fraction cheminNormal = cNormal1.add(cNormal2).add(cNormal3).add(cNormal4);
        
        //Mortelle
        Fraction cMortelle1 = FractionCheminBuilder.getInstance().addFraction(probaTouche).addFraction(probaBlessureMortelle).build();
        Fraction cMortelle2 = FractionCheminBuilder.getInstance().addFraction(probaRateTouche).addFraction(probaTouche)
                .addFraction(probaBlessureMortelle).build();
        Fraction cMortelle3 = FractionCheminBuilder.getInstance().addFraction(probaTouche)
                .addFraction(probaRateBlessure).addFraction(probaBlessureMortelle).build();
        Fraction cMortelle4 = FractionCheminBuilder.getInstance().addFraction(probaRateTouche).addFraction(probaTouche)
                .addFraction(probaRateBlessure).addFraction(probaBlessureMortelle).build();
        Fraction cheminMortelle = cMortelle1.add(cMortelle2).add(cMortelle3).add(cMortelle4);
        return cheminNormal.add(cheminMortelle);
    }
    
    private void validateCanonAssaut(INoeudArbre racine,int attenduNormal,int attenduMortelle) {
        int nbNormal = 0;
        int nbMortelle = 0;
        Map<EBlessure, Integer> map;
        Integer nbBlessure;
        for(INoeudArbre noeud:racine.arbre()) {
            if(noeud.getNatureNoeud() == ENatureNoeud.REUSSITE) {
                Assertions.assertThat(noeud.mapBlessuresAleatoires()).isEmpty();
                map = noeud.mapBlessure();
                Assertions.assertThat(map).hasSize(1);
                if(map.containsKey(EBlessure.NORMALES)) {
                    nbNormal++;
                    nbBlessure = map.get(EBlessure.NORMALES);
                    Assertions.assertThat(nbBlessure).isEqualTo(1);
                }else if(map.containsKey(EBlessure.MORTELLES)) {
                    nbMortelle++;
                    nbBlessure = map.get(EBlessure.MORTELLES);
                    Assertions.assertThat(nbBlessure).isEqualTo(1);
                }
            }
        }
        Assertions.assertThat(nbNormal).isEqualTo(attenduNormal);
        Assertions.assertThat(nbMortelle).isEqualTo(attenduMortelle);
    }
    
    private IDataCalculProbabilite getDataCanonAssaut(ESermentInstantChoix sermentInstant) {
        IContexteAction contextAction = ContextActionForTestProbaBuilder.getInstance()
                .addSimule(ESimule.TIR_PHASE_TIR)
                .addNumeroTour(2)
                .addEffectifInitialAttaquant(10)
                .addNombreAttaquant(10)
                .addMouvementAttaquant(EMouvement.IMMOBILE)
                .addBatimentAttaquant(new RecordBatiment(false, false))
                .addNombreDefenseur(10)
                .addMouvementDefenseur(EMouvement.IMMOBILE)
                .addBatimentDefenseur(new RecordBatiment(false, false))
                .addDistanceEntreBelligerant(12.0)
                .build();
        
        IConstituantDefenseur termagaunt = TermagantBuilderDefense.getInstance(contextAction, 10).build();
        
        IConstituantAttaquant terminator = TerminatorBuilderAttaque.getInstance(contextAction, 1).equipeCanonAssaut().addSermentInstant(sermentInstant).build();
        
        return DataCalculProbabiliteBuilder.getInstance().addAttaquant(terminator).addDefenseur(termagaunt).addContextAction(contextAction)
                .addGestionNombreAttaque(EGestionDe.SIMULATION_OPTIMISTE).addGestionJetToucheBlessure(EGestionDe.SIMULATION_OPTIMISTE).addGestionSauvegardeDefenseur(EGestionDe.SIMULATION_OPTIMISTE).build();
    }
}
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)