diff options
Diffstat (limited to 'src/main/java/modele/Calcul.java')
| -rw-r--r-- | src/main/java/modele/Calcul.java | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/src/main/java/modele/Calcul.java b/src/main/java/modele/Calcul.java new file mode 100644 index 0000000..0ae1832 --- /dev/null +++ b/src/main/java/modele/Calcul.java | |||
| @@ -0,0 +1,302 @@ | |||
| 1 | package modele; | ||
| 2 | |||
| 3 | public class Calcul { | ||
| 4 | private int[] tabdegat1; | ||
| 5 | private float degat_moyen1; | ||
| 6 | private float mort_moyen1; | ||
| 7 | private int[] tabmort1; | ||
| 8 | |||
| 9 | |||
| 10 | public Calcul(int[] tabdegat1, float degat_moyen1, float mort_moyen1,int[] tabmort1) { | ||
| 11 | super(); | ||
| 12 | this.tabdegat1 = tabdegat1; | ||
| 13 | this.degat_moyen1 = degat_moyen1; | ||
| 14 | this.mort_moyen1 = mort_moyen1; | ||
| 15 | this.tabmort1 = tabmort1; | ||
| 16 | } | ||
| 17 | |||
| 18 | // getter set setter | ||
| 19 | public int[] getTabdegat1() { | ||
| 20 | return tabdegat1; | ||
| 21 | } | ||
| 22 | public void setTabdegat1(int[] tabdegat1) { | ||
| 23 | this.tabdegat1 = tabdegat1; | ||
| 24 | } | ||
| 25 | public float getDegat_moyen1() { | ||
| 26 | return degat_moyen1; | ||
| 27 | } | ||
| 28 | public void setDegat_moyen1(float degat_moyen1) { | ||
| 29 | this.degat_moyen1 = degat_moyen1; | ||
| 30 | } | ||
| 31 | public float getMort_moyen1() { | ||
| 32 | return mort_moyen1; | ||
| 33 | } | ||
| 34 | public void setMort_moyen1(float mort_moyen1) { | ||
| 35 | this.mort_moyen1 = mort_moyen1; | ||
| 36 | } | ||
| 37 | public int[] getTabmort1() { | ||
| 38 | return tabmort1; | ||
| 39 | } | ||
| 40 | public void setTabmort1(int[] tabmort1) { | ||
| 41 | this.tabmort1 = tabmort1; | ||
| 42 | } | ||
| 43 | |||
| 44 | // 1er jet de dé : jet pour toucher une figurine , résultat en fonction de CC ou CT | ||
| 45 | public static boolean jet_de_touche(boolean jet,int C){ | ||
| 46 | // simulation lancer de dé | ||
| 47 | int d1 = (int) ((Math.random() * (7 - 1)) + 1); | ||
| 48 | switch(d1){ | ||
| 49 | // si 1 echec critique | ||
| 50 | case 1 : | ||
| 51 | jet=false; | ||
| 52 | break; | ||
| 53 | // si 6 reussite critique | ||
| 54 | case 6 : | ||
| 55 | jet=true; | ||
| 56 | break; | ||
| 57 | // comparaison du dé avec CC ou CT | ||
| 58 | default : | ||
| 59 | if( d1 >= C){ | ||
| 60 | jet=true; | ||
| 61 | } | ||
| 62 | } | ||
| 63 | // return booléen pour continuer ou non attaque | ||
| 64 | return jet; | ||
| 65 | } | ||
| 66 | |||
| 67 | // 2eme jet de dé : jet pour blesser une figurine , résultat en fonction de force de fig attaquante et de endurance de figurine attaquée | ||
| 68 | public static boolean jet_de_blessure (boolean jet,int fo,int end){ | ||
| 69 | // simulation lancer de dé | ||
| 70 | int d2 = (int) ((Math.random() * (7 - 1)) + 1); | ||
| 71 | |||
| 72 | switch(d2){ | ||
| 73 | // si 1 echec critique | ||
| 74 | case 1 : | ||
| 75 | jet=false; | ||
| 76 | break; | ||
| 77 | // si 6 reussite critique | ||
| 78 | case 6 : | ||
| 79 | jet=true; | ||
| 80 | break; | ||
| 81 | default : | ||
| 82 | //Comparaison entre force et endurance pour savoir si attaque blesse | ||
| 83 | if(fo >2*end) { | ||
| 84 | if(d2>=2) { | ||
| 85 | jet = true; | ||
| 86 | } | ||
| 87 | } | ||
| 88 | if(fo>end && fo<2*end) { | ||
| 89 | if(d2>=3) { | ||
| 90 | jet = true; | ||
| 91 | } | ||
| 92 | } | ||
| 93 | if(fo==end) { | ||
| 94 | if(d2>=4) { | ||
| 95 | jet = true; | ||
| 96 | } | ||
| 97 | } | ||
| 98 | if(fo>0.5*end && fo<end) { | ||
| 99 | if(d2>=5) { | ||
| 100 | jet = true; | ||
| 101 | } | ||
| 102 | } | ||
| 103 | if(fo <=0.5*(float)end) { | ||
| 104 | if(d2>=6) { | ||
| 105 | jet = true; | ||
| 106 | } | ||
| 107 | } | ||
| 108 | |||
| 109 | } | ||
| 110 | // return booléen pour continuer ou non attaque | ||
| 111 | return jet; | ||
| 112 | } | ||
| 113 | |||
| 114 | // fonction pour determiner le nbr d'attaque d'une arme | ||
| 115 | public static int chgt_a (String a){ | ||
| 116 | int attaque =0; | ||
| 117 | int d1 = (int) ((Math.random() * (7 - 1)) + 1); | ||
| 118 | int d2 = (int) ((Math.random() * (4 - 1)) + 1); | ||
| 119 | switch(a) { | ||
| 120 | case "D6": | ||
| 121 | attaque = d1; | ||
| 122 | break; | ||
| 123 | case "D6+1": | ||
| 124 | attaque = d1+1; | ||
| 125 | //System.out.println("test"); | ||
| 126 | break; | ||
| 127 | case "D6+2": | ||
| 128 | attaque = d1+2; | ||
| 129 | break; | ||
| 130 | case "D6+3": | ||
| 131 | attaque = d1+3; | ||
| 132 | break; | ||
| 133 | case "D6+4": | ||
| 134 | attaque = d1+4; | ||
| 135 | break; | ||
| 136 | case "D3": | ||
| 137 | attaque = d2; | ||
| 138 | break; | ||
| 139 | default : | ||
| 140 | attaque = Integer.parseInt(a); | ||
| 141 | } | ||
| 142 | return attaque; | ||
| 143 | } | ||
| 144 | |||
| 145 | // fonction pour determiner le nbr de dégats d'une arme | ||
| 146 | public static int chgt_d (String d){ | ||
| 147 | int degat =0; | ||
| 148 | int d1 = (int) ((Math.random() * (7 - 1)) + 1); | ||
| 149 | int d2 = (int) ((Math.random() * (4 - 1)) + 1); | ||
| 150 | int d3 = (int) ((Math.random() * (9 - 1)) + 1); | ||
| 151 | switch(d) { | ||
| 152 | case "D8": | ||
| 153 | degat = d3; | ||
| 154 | break; | ||
| 155 | case "D6": | ||
| 156 | degat = d1; | ||
| 157 | break; | ||
| 158 | case "D6+1": | ||
| 159 | degat = d1+1; | ||
| 160 | break; | ||
| 161 | case "D6+2": | ||
| 162 | degat = d1+2; | ||
| 163 | break; | ||
| 164 | case "D6+3": | ||
| 165 | degat = d1+3; | ||
| 166 | break; | ||
| 167 | case "D6+4": | ||
| 168 | degat = d1+4; | ||
| 169 | break; | ||
| 170 | case "D3": | ||
| 171 | degat = d2; | ||
| 172 | break; | ||
| 173 | default : | ||
| 174 | degat = Integer.parseInt(d); | ||
| 175 | } | ||
| 176 | return degat; | ||
| 177 | } | ||
| 178 | |||
| 179 | // 2eme jet de dé : jet de sauvegarde , pour savoir si l'armure d'une figurine la protège d'une blessure | ||
| 180 | public static boolean jet_de_sauvegarde (boolean block,int pa,int sv){ | ||
| 181 | // simulation du jet de dé | ||
| 182 | int d3 = (int) ((Math.random() * (7 - 1)) + 1); | ||
| 183 | switch(d3) { | ||
| 184 | //echec critique la figurine adverse n'a pas réussie à se protéger | ||
| 185 | case 1: | ||
| 186 | block = false; | ||
| 187 | default : | ||
| 188 | //comparaison entre pénétration d'armure et sauvegarde | ||
| 189 | if ( d3 + pa < sv ){ | ||
| 190 | block = false; | ||
| 191 | } | ||
| 192 | } | ||
| 193 | //// return booléen pour finaliser ou non attaque | ||
| 194 | return block; | ||
| 195 | } | ||
| 196 | |||
| 197 | // fonction simulant des battailes entre 2 unités | ||
| 198 | public static Calcul bataille(modele.Unit u1, modele.Unit u2){ | ||
| 199 | |||
| 200 | // Déclaration des variables | ||
| 201 | |||
| 202 | int complet_degat = 0; | ||
| 203 | float degat_moyen; | ||
| 204 | float mort_moyen = 0; | ||
| 205 | boolean dflag = false; | ||
| 206 | int[] tabdegat = new int[50]; | ||
| 207 | int[] tabmort = new int[50]; | ||
| 208 | |||
| 209 | // boucle simulant 10 000 batailles | ||
| 210 | for (int k=0;k<10000;k++){ | ||
| 211 | |||
| 212 | int sum_degat = 0; | ||
| 213 | int adv = 0; | ||
| 214 | int pvE=u2.getFigurines().get(adv).getHP(); | ||
| 215 | int mort = 0; | ||
| 216 | |||
| 217 | // boucle parcourant les figurines d'une unité | ||
| 218 | for (int j=0; j<u1.getFigurines().size();j++){ | ||
| 219 | // si figurine non morte | ||
| 220 | if(u1.getFigurines().get(j).getHP()>0) { | ||
| 221 | int attaque = chgt_a(u1.getFigurines().get(j).getSelectedWeapon().getA()); | ||
| 222 | |||
| 223 | // Condition permettant d'attaquer une nouvelle figurine | ||
| 224 | while(pvE <=0 && adv+1<u2.getFigurines().size()) { | ||
| 225 | adv=adv+1; | ||
| 226 | pvE=u2.getFigurines().get(adv).getHP(); | ||
| 227 | |||
| 228 | } | ||
| 229 | |||
| 230 | // boucle correspondant au nbr d'attaques par armes | ||
| 231 | for(int i=0 ;i<attaque;i++ ){ | ||
| 232 | dflag = false; | ||
| 233 | boolean jet1=false; | ||
| 234 | boolean jet2=false; | ||
| 235 | boolean block=true; | ||
| 236 | |||
| 237 | // fonction pour jet de touche | ||
| 238 | jet1=jet_de_touche(jet1,(u1.getFigurines().get(j).getSelectedWeapon().getC())); | ||
| 239 | |||
| 240 | // si attaque touche | ||
| 241 | if(jet1==true){ | ||
| 242 | // fonction pour jet de blessure | ||
| 243 | jet2=jet_de_blessure(jet2,u1.getFigurines().get(j).getSelectedWeapon().getF(),u2.getFigurines().get(adv).getE()); | ||
| 244 | } | ||
| 245 | |||
| 246 | // si blessure | ||
| 247 | if(jet2==true){ | ||
| 248 | block=jet_de_sauvegarde(block,u1.getFigurines().get(j).getSelectedWeapon().getPA(),u2.getFigurines().get(adv).getSV()); | ||
| 249 | |||
| 250 | // si jet de sauvegarde echec et fig adverse à des HP | ||
| 251 | if(block==false && pvE >0){ | ||
| 252 | |||
| 253 | int degat= chgt_d((u1.getFigurines().get(j).getSelectedWeapon().getD())); | ||
| 254 | pvE=pvE - degat ; | ||
| 255 | |||
| 256 | // Calcul des dégats effectués par une attaque | ||
| 257 | if(pvE<0) { | ||
| 258 | sum_degat = sum_degat + degat + pvE; | ||
| 259 | complet_degat = complet_degat +degat +pvE; | ||
| 260 | } | ||
| 261 | else { | ||
| 262 | sum_degat = sum_degat + degat; | ||
| 263 | complet_degat = degat+complet_degat; | ||
| 264 | } | ||
| 265 | |||
| 266 | // booléen pour indiquer une mort possible | ||
| 267 | dflag = true; | ||
| 268 | } | ||
| 269 | |||
| 270 | // compteur du nbr de mort | ||
| 271 | if(pvE <=0 && dflag == true ) { | ||
| 272 | mort = mort+1; | ||
| 273 | mort_moyen = mort_moyen+1; | ||
| 274 | } | ||
| 275 | } | ||
| 276 | } | ||
| 277 | } | ||
| 278 | // si fig mort changement de prochaine cible | ||
| 279 | if(pvE <=0 ) { | ||
| 280 | if (adv+1<u2.getFigurines().size()){ | ||
| 281 | adv=adv+1; | ||
| 282 | pvE=u2.getFigurines().get(adv).getHP(); | ||
| 283 | |||
| 284 | } | ||
| 285 | } | ||
| 286 | } | ||
| 287 | // compteurs des sommes des dégats et du nbr de mort par bataille | ||
| 288 | tabdegat[sum_degat] ++; | ||
| 289 | tabmort[mort] ++; | ||
| 290 | } | ||
| 291 | |||
| 292 | //calcul des degat et mort moyen | ||
| 293 | degat_moyen =(float)complet_degat/10000; | ||
| 294 | mort_moyen = (float)mort_moyen/10000; | ||
| 295 | |||
| 296 | // Instanciation de Calucl (données pour histogramme ) | ||
| 297 | Calcul c1 = new Calcul(tabdegat,degat_moyen,mort_moyen,tabmort); | ||
| 298 | return c1; | ||
| 299 | } | ||
| 300 | |||
| 301 | } | ||
| 302 | |||
