From 50772fb1bac348754b9d3975995859c84e9af2d1 Mon Sep 17 00:00:00 2001 From: Florian Delrieu Date: Sun, 19 Mar 2023 22:04:15 +0100 Subject: [PATCH] Remove HOI folder --- .DS_Store | Bin 8196 -> 10244 bytes {W40K/CSVs => CSVs}/SaveCompanies.csv | 0 {W40K/CSVs => CSVs}/SaveUnit.csv | 0 {W40K/CSVs => CSVs}/SaveWeapons.csv | 0 {W40K/CSVs => CSVs}/Saver.py | 0 {W40K/Class => Class}/Battle.py | 0 {W40K/Class => Class}/Company.py | 0 {W40K/Class => Class}/Regiment.py | 0 {W40K/Class => Class}/Tactics.py | 0 {W40K/Class => Class}/Unit.py | 0 {W40K/Class => Class}/Weapons.py | 0 {W40K/Comparator => Comparator}/Comparator.py | 0 {W40K/Functions => Functions}/Functions.py | 0 .../Stats_Functions.py | 0 {W40K/Functions => Functions}/Tactics_func.py | 0 .../Functions => Functions}/Units_bonuses.py | 0 .../Upgrades_bonuses.py | 0 .../Weapons_bonuses.py | 0 HOI/BataillonList.py | 25 --- HOI/Class.py | 171 ------------------ HOI/DivisionList.py | 9 - HOI/Run.py | 10 - HOI/Tactics/Tactics.py | 17 -- HOI/Tactics/Tactics_func.py | 138 -------------- HOI/Tactics/Tactics_list.py | 112 ------------ {W40K/Lists => Lists}/Companies_list.py | 0 {W40K/Lists => Lists}/Tactics_list.py | 0 {W40K/Lists => Lists}/Unit_list.py | 0 W40K/Run.py => Run.py | 0 W40K/Testing_Hall.py => Testing_Hall.py | 0 W40K/.DS_Store | Bin 10244 -> 0 bytes W40K/Functions/.DS_Store | Bin 6148 -> 0 bytes 32 files changed, 482 deletions(-) rename {W40K/CSVs => CSVs}/SaveCompanies.csv (100%) rename {W40K/CSVs => CSVs}/SaveUnit.csv (100%) rename {W40K/CSVs => CSVs}/SaveWeapons.csv (100%) rename {W40K/CSVs => CSVs}/Saver.py (100%) rename {W40K/Class => Class}/Battle.py (100%) rename {W40K/Class => Class}/Company.py (100%) rename {W40K/Class => Class}/Regiment.py (100%) rename {W40K/Class => Class}/Tactics.py (100%) rename {W40K/Class => Class}/Unit.py (100%) rename {W40K/Class => Class}/Weapons.py (100%) rename {W40K/Comparator => Comparator}/Comparator.py (100%) rename {W40K/Functions => Functions}/Functions.py (100%) rename {W40K/Functions => Functions}/Stats_Functions.py (100%) rename {W40K/Functions => Functions}/Tactics_func.py (100%) rename {W40K/Functions => Functions}/Units_bonuses.py (100%) rename {W40K/Functions => Functions}/Upgrades_bonuses.py (100%) rename {W40K/Functions => Functions}/Weapons_bonuses.py (100%) delete mode 100644 HOI/BataillonList.py delete mode 100644 HOI/Class.py delete mode 100644 HOI/DivisionList.py delete mode 100644 HOI/Run.py delete mode 100644 HOI/Tactics/Tactics.py delete mode 100644 HOI/Tactics/Tactics_func.py delete mode 100644 HOI/Tactics/Tactics_list.py rename {W40K/Lists => Lists}/Companies_list.py (100%) rename {W40K/Lists => Lists}/Tactics_list.py (100%) rename {W40K/Lists => Lists}/Unit_list.py (100%) rename W40K/Run.py => Run.py (100%) rename W40K/Testing_Hall.py => Testing_Hall.py (100%) delete mode 100644 W40K/.DS_Store delete mode 100644 W40K/Functions/.DS_Store diff --git a/.DS_Store b/.DS_Store index 768a3d7c15854ea1ba68b4f8bb5eb90bcf568174..2194a14232b83c62f022bc653af0c44662d716da 100644 GIT binary patch delta 1174 zcmZp1XbF&DU|?W$DortDU{C-uIe-{M3-C-V6q~50C@cu%Far4u48=+1#RW+@`AHiK zr?F3L;NQ&7!NQRMl4oUbX2@YkWGF_c0g8T2D#*z!E-^5;!N|nS!pg?Z!O6wV$<4>j z9UGjHUmjeNSW;T-lvormAQPOKlA4rQ6rPzlh7mM&X<=rC9p10&EoU;uJDGB^U{AbBOFI5{UNKR<_oK^sLpC*3eOIX|}m zNh^}B%?g6Mn7EMz9t+QBsz(yY&3ADD1tU;D$HSUVzO0=BE%)QILVp4Q0Va zc{%xc=|EFKe&u3tu4l++$Ym%1#!(RvmjHQ12=6g4umB@4m?4Y?(N_eHx{%3v0!~E5 zqKO4HViE2iWKVL!MS*d&hlw5P<;{7FN%8w&zf7PA6C{UefTV#@V*sKj7s&K( RJ}7dKaWs(#I59;B0|3}d7lZ%+ delta 407 zcmZn(XmOBWU|?W$DortDU;r^WfEYvza8E20o2aKK!UmED@)?qIlJfI&fIJ44jfKDpl97}+Ia|Q99;_%{K)kxz*w9Ev z!Q8M`N1@u(&_qYU!pO3=mXkwV)zH>6A-A%sx~8^n2FQg#Cj;FK2K-POM$H5=SYU30 zIT)lEE|^nX<_vK#(`ulDH|GkjX5xg)ZuXU4$RrH)TUl^XUQT{qI#4^~#=-(dL1u_G r65K%A6%>ja3%@f@=2r>i09pYGTZYN;JX1H@incO}!i_{VC6^HZY?D+j diff --git a/W40K/CSVs/SaveCompanies.csv b/CSVs/SaveCompanies.csv similarity index 100% rename from W40K/CSVs/SaveCompanies.csv rename to CSVs/SaveCompanies.csv diff --git a/W40K/CSVs/SaveUnit.csv b/CSVs/SaveUnit.csv similarity index 100% rename from W40K/CSVs/SaveUnit.csv rename to CSVs/SaveUnit.csv diff --git a/W40K/CSVs/SaveWeapons.csv b/CSVs/SaveWeapons.csv similarity index 100% rename from W40K/CSVs/SaveWeapons.csv rename to CSVs/SaveWeapons.csv diff --git a/W40K/CSVs/Saver.py b/CSVs/Saver.py similarity index 100% rename from W40K/CSVs/Saver.py rename to CSVs/Saver.py diff --git a/W40K/Class/Battle.py b/Class/Battle.py similarity index 100% rename from W40K/Class/Battle.py rename to Class/Battle.py diff --git a/W40K/Class/Company.py b/Class/Company.py similarity index 100% rename from W40K/Class/Company.py rename to Class/Company.py diff --git a/W40K/Class/Regiment.py b/Class/Regiment.py similarity index 100% rename from W40K/Class/Regiment.py rename to Class/Regiment.py diff --git a/W40K/Class/Tactics.py b/Class/Tactics.py similarity index 100% rename from W40K/Class/Tactics.py rename to Class/Tactics.py diff --git a/W40K/Class/Unit.py b/Class/Unit.py similarity index 100% rename from W40K/Class/Unit.py rename to Class/Unit.py diff --git a/W40K/Class/Weapons.py b/Class/Weapons.py similarity index 100% rename from W40K/Class/Weapons.py rename to Class/Weapons.py diff --git a/W40K/Comparator/Comparator.py b/Comparator/Comparator.py similarity index 100% rename from W40K/Comparator/Comparator.py rename to Comparator/Comparator.py diff --git a/W40K/Functions/Functions.py b/Functions/Functions.py similarity index 100% rename from W40K/Functions/Functions.py rename to Functions/Functions.py diff --git a/W40K/Functions/Stats_Functions.py b/Functions/Stats_Functions.py similarity index 100% rename from W40K/Functions/Stats_Functions.py rename to Functions/Stats_Functions.py diff --git a/W40K/Functions/Tactics_func.py b/Functions/Tactics_func.py similarity index 100% rename from W40K/Functions/Tactics_func.py rename to Functions/Tactics_func.py diff --git a/W40K/Functions/Units_bonuses.py b/Functions/Units_bonuses.py similarity index 100% rename from W40K/Functions/Units_bonuses.py rename to Functions/Units_bonuses.py diff --git a/W40K/Functions/Upgrades_bonuses.py b/Functions/Upgrades_bonuses.py similarity index 100% rename from W40K/Functions/Upgrades_bonuses.py rename to Functions/Upgrades_bonuses.py diff --git a/W40K/Functions/Weapons_bonuses.py b/Functions/Weapons_bonuses.py similarity index 100% rename from W40K/Functions/Weapons_bonuses.py rename to Functions/Weapons_bonuses.py diff --git a/HOI/BataillonList.py b/HOI/BataillonList.py deleted file mode 100644 index 42c7064..0000000 --- a/HOI/BataillonList.py +++ /dev/null @@ -1,25 +0,0 @@ -from HOI.Class import Bataillon - -## INFANTERIE -INF_36 = Bataillon(pv=25, org=60, sa=6, ha=1, defense=23.1, attack=3.15, armor=0, prc=4, hard=0, width=2, supply_use=0.07, - fuel_use=0, ic=50, name="Infanterie 36") -CAV_36 = Bataillon(pv=25, org=70, sa=6, ha=1, defense=22.44, attack=3.06, armor=0, prc=4, hard=0, width=2, supply_use=0.12, - fuel_use=0, ic=60, name="Cavalerie 36") -MOT_36 = Bataillon(pv=25, org=60, sa=6, ha=1, defense=23.1, attack=3.15, armor=0, prc=4, hard=.1, width=2, supply_use=0.11, - fuel_use=1.2, ic=175, name="Motorized 36") - -## ARTILLERIE -ART_36 = Bataillon(pv=0.6, org=0, sa=27.5, ha=2, defense=10, attack=6, armor=0, prc=5, hard=0, width=3, supply_use=0.2, - fuel_use=0, ic=126, name="Artillerie 36") - -## ARMOR -LARM_36 = Bataillon(pv=2, org=10, sa=16, ha=6, defense=5, attack=36, armor=15, prc=30, hard=.8, width=2, supply_use=0.2, - fuel_use=2.4, ic=540, name="Light Armor 36") -MARM_39 = Bataillon(pv=2, org=10, sa=19, ha=14, defense=5, attack=36, armor=60, prc=61, hard=.9, width=2, supply_use=0.22, - fuel_use=3.6, ic=600, name="Medium Armor 36") -HARM_39 = Bataillon(pv=2, org=10, sa=15, ha=12, defense=6, attack=36, armor=70, prc=35, hard=.95, width=2, supply_use=0.3, - fuel_use=4.4, ic=1000, name="Heavy Armor 36") - -## SUPPORT -S_ART_36 = Bataillon(pv=0.2, org=0, sa=17.5, ha=1.2, defense=6, attack=3.6, armor=0, prc=5, hard=0, width=0, supply_use=0.16, - fuel_use=0, ic=42, name="Support Artillerie 36") diff --git a/HOI/Class.py b/HOI/Class.py deleted file mode 100644 index e1691f7..0000000 --- a/HOI/Class.py +++ /dev/null @@ -1,171 +0,0 @@ -from MyPack.Utilities import * -from HOI.Tactics.Tactics_func import choose_tactic - -class Division: - """ - Objet division - self._Stat : stats de la division quand elle est en pleine santé "strenght = 1" - self.Stat : Stats de la division - """ - def __init__(self, pv_max, org, sa, ha, defense, attack, piercing, armor, hard, entrenchment, name=""): - self._PVMAX = pv_max - self._ORG = org - self._SA = sa # Soft Attack - self._HA = ha # Hard Attack - self._DEFENSE = defense # Defense - self._ATTACK = attack # Breakthought - self.pv = self._PVMAX - self.org = self._ORG - self.prc = piercing # Piercing - self.arm = armor # Armor - self.hard = hard # Hardness - self.rtch = entrenchment # Retranchement - self.defense = self._DEFENSE - self.attack = self._ATTACK - self.nb_atk = 0 - self.name = name - self.set_str() # Mets a jour les stat en fonction des PV de la division - self.is_defending = True # TRUE si la division et en défense - - def __repr__(self): - return self.name - - def set_str(self): - """ - Calcul de la STR en fonction des PV - """ - self.str = self.pv/self._PVMAX - # MAJ des stats en fonction de STR - self.sa = self._SA*self.str - self.ha = self._HA*self.str - self.defense = self._DEFENSE*self.str - self.attack = self._ATTACK*self.str - def do_attack(self, target): - """ - Calcul du nombre d'attaque de :self: sur :Target: - :param target: division cible de :self: - """ - self.set_str() # MAJ des stats - nb_atk = target.hard*self.ha + (1 - target.hard)*self.sa # Calcul du nbr d'attaque en fonction du Hardness - # Piercing ? - self.nb_atk = nb_atk if self.prc >= target.arm else nb_atk/2 - self.nb_atk /= 10 # les attaques sont divisé par 10 (voir wiki) - def take_damage(self, striker): - """ - Calcul du nombre de touche et des dégats - :param striker: Division attaquante - """ - self.set_str() # MAJ - nb_damage = striker.nb_atk #Recupere le nombre d'attaque de l'attaquant - # Attaquant ou defenseur ? - tmp_defense = self.defense if self.is_defending else self.attack - # Defense de la cible - if tmp_defense > nb_damage: nb_damage *= 0.1 - else: nb_damage = self.defense*0.1 + (nb_damage - self.defense)*0.4 - # Calcul des dégats entre les PV et l'ORG - # PV Dégats - self.pv -= 1.5*nb_damage # Moyenne de D2 - self.pv = truncDecimal(self.pv, 1) - self.pv = max(self.pv, 0) - # ORG Dégats - self.org -= 3.5*nb_damage if self.prc > striker.arm else 2.5*nb_damage - self.org = truncDecimal(self.org, 1) - self.org = max(self.org, 0) - -class Bataillon: - def __init__(self, pv, org, sa, ha, defense, attack, armor, prc, hard, width, supply_use=None, fuel_use=None, ic=None, name=""): - self.pv = pv - self.org = org - self.sa = sa - self.ha = ha - self.defense = defense - self.attack = attack - self.armor = armor - self.prc = prc - self.hard = hard - self.width = width - self.supply_use = supply_use - self.fuel_use = fuel_use - self.ic = ic - self.name = name - - def __repr__(self): - return self.name - - -####################################################################################################################### -####################################################################################################################### - -class Battle: - """ - Objet contenant les divisions permettant de lancer les round et les logs - """ - def __init__(self, attacker, defender): - assert type(attacker) == Division and type(defender) == Division , "campA and campB must be division class" - assert attacker.is_defending == False , "ATK.isDefending must be FALSE" - assert defender.is_defending == True , "DEF.isDefending must be TRUE" - self.attacker = attacker - self.defender = defender - self.attacker_tactic = None - self.defender_tactic = None - self.AttackerLeader = None - self.DefenderLeader = None - self.round_counter = 0 - self.Phase = "Default" - def is_finnish(self): - """ - Check si le combat est terminé - - Si l'un des deux camps n'as plus de PV ou d'Organisation - :return: True ou False - """ - return any(val <= 0 for val in [self.attacker.pv, - self.defender.pv, - self.attacker.org, - self.defender.org]) # Si PV ou orga des def ou attck est nulle ou moins - - def run_rounds(self, nb_rounds=1): - """ - Definit le nombre de lancement de round - :param nb_rounds: Nombre de round souhaité (-1 si jusqu'a fin du combat) - """ - assert type(nb_rounds) is int , "Nb must be an :int:" - if nb_rounds != -1: - i = 1 - while i <= nb_rounds: # Lancement de :Nb: rounds - self._round() - i += 1 - else: # Lancement des rounds jusqu'a fin du combat - while not self.is_finnish(): - self._round() - def _round(self): - """ - Lancement d'un round ATTAQUE et RIPOSTE (1h de combat dans HOI IV) - """ - if self.round_counter % 12 == 0: # Choix de Tactique tout les 12 rounds - choose_tactic(self) - txt = "New tactics / Battle phase: {}".format(self.Phase) - txt += "\n- {} choose {} tactic".format(self.attacker.name, self.attacker_tactic) - txt += "\n- {} choose {} tactic".format(self.defender.name, self.defender_tactic) - self.attacker.do_attack(self.defender) # ATK attaque - self.defender.take_damage(self.attacker) # DEF prend les dommages - self.defender.do_attack(self.attacker) # DEF riposte - self.attacker.take_damage(self.defender) # ATK prend les dommages - # Log de fin de round - self.round_counter += 1 - self.print_log() - def print_log(self): - """ - log pour chaque heure de combats - - résulat des PV et ORG de chaques divisions - """ - txt = """----------- round {} ----------------- -DivATK: {}/{} {}/{} -DivDEF: {}/{} {}/{}""".format(self.round_counter, - self.attacker.pv, self.attacker._PVMAX, self.attacker.org, self.attacker._ORG, - self.defender.pv, self.defender._PVMAX, self.defender.org, self.defender._ORG) - if self.is_finnish(): - txt += """ ------------ End of Battle ----------------- -The battle finnish after {} hours - """.format(self.round_counter) - print(txt) \ No newline at end of file diff --git a/HOI/DivisionList.py b/HOI/DivisionList.py deleted file mode 100644 index 051b514..0000000 --- a/HOI/DivisionList.py +++ /dev/null @@ -1,9 +0,0 @@ -""" -Fichier regroupant les différents types de divisions -""" -from Class import * - -DIVISION_DICT = { -"Infantry_72" : Division(176.2, 46.667, 97, 11, 181.7, 34.1, 4.5, 0, 0, 0, name="Div. Infanterie 36"), -"Armored_432" : Division(107.2, 30, 127, 26, 127.4, 132.6, 19.733, 8, 0.33, 0, name="Div. Blindé Léger 36") -} diff --git a/HOI/Run.py b/HOI/Run.py deleted file mode 100644 index 40f6655..0000000 --- a/HOI/Run.py +++ /dev/null @@ -1,10 +0,0 @@ -from Class import * -from DivisionList import DIVISION_DICT - -DivA = DIVISION_DICT["Infantry_72"] -DivA.is_defending = False -DivB = DIVISION_DICT["Armored_432"] -DivB.is_defending = True - -BATTLE = Battle(DivA,DivB) -BATTLE.run_rounds(-1) \ No newline at end of file diff --git a/HOI/Tactics/Tactics.py b/HOI/Tactics/Tactics.py deleted file mode 100644 index bbcdd59..0000000 --- a/HOI/Tactics/Tactics.py +++ /dev/null @@ -1,17 +0,0 @@ - - -class Tactic: - def __init__(self, attacker_damage=1, defender_damage=1, weight=4, - countered_by=None, begin_phase=None, name=""): - self.name = name - self.countered_by = countered_by - # Bonus - self.attacker_damage = attacker_damage - self.defender_damage = defender_damage - # Begin battle phase - self.weight = weight - self.begin_battle_phase = begin_phase - - def __repr__(self): - return self.name - \ No newline at end of file diff --git a/HOI/Tactics/Tactics_func.py b/HOI/Tactics/Tactics_func.py deleted file mode 100644 index add9359..0000000 --- a/HOI/Tactics/Tactics_func.py +++ /dev/null @@ -1,138 +0,0 @@ -from HOI.Tactics.Tactics_list import Tactic -import random as rd -import numpy as np -from MyPack.Utilities import truncDecimal -from HOI.Tactics.Tactics_list import ATK_TACTICS, ATK_HB_TACTICS, ATK_CQ_TACTICS, ATK_SB_TACTICS, ATK_TW_TACTICS -from HOI.Tactics.Tactics_list import DEF_TACTICS, DEF_HB_TACTICS, DEF_CQ_TACTICS, DEF_SB_TACTICS, DEF_TW_TACTICS - - -######################################################################################################################## - -def choose_tactic(Battle): - """ - Choisi une tactique selon une sélection pondéré - - run change-weight - - run SELF - - run _choose_tactic - - run apply_tactics - - run set_CAC_limit - """ - change_weight(Battle) -# Which tactics lists is used according the battle phase - if Battle.Phase == "Default": - attacker_tactic_list = ATK_TACTICS - defender_tactic_list = DEF_TACTICS - elif Battle.Phase == "Close Quarter Combat": - attacker_tactic_list = ATK_CQ_TACTICS - defender_tactic_list = DEF_CQ_TACTICS - elif Battle.Phase == "Seize Bridge": - attacker_tactic_list = ATK_SB_TACTICS - defender_tactic_list = DEF_SB_TACTICS - elif Battle.Phase == "Hold Bridge": - attacker_tactic_list = ATK_HB_TACTICS - defender_tactic_list = DEF_HB_TACTICS - elif Battle.Phase == "Tactical Withdraw": - attacker_tactic_list = ATK_TW_TACTICS - defender_tactic_list = DEF_TW_TACTICS - else: return NameError , "Wrong phase name" - intiative_winner = initiative_round(Battle) # wich side has initiative - attacker_Tactic, defender_Tactic = _choose_tactic(attacker_tactic_list, defender_tactic_list, intiative_winner) # choose tactics - Battle.attacker_tactic = attacker_Tactic - Battle.defender_tactic = defender_Tactic - isCountered(Battle) # test if any tactics has been coutered - apply_tactics(Battle) # apply bonuses - -def _choose_tactic(ATK_tactic_list, DEF_tactic_list, Initiative_winner): - """ - Le perdant du :initiative round: choisi la tactique en premier. Ensuite le gagnant tente de le contrer. - :return: Tactiques choisis par les deux camps - """ - ATK_Tactic = Tactic() - DEF_Tactic = Tactic() - if Initiative_winner == "ATK": - # DEF choice first - DEF_tactic_weight = [el.weight for el in DEF_tactic_list] - DEF_Tactic = rd.choices(DEF_tactic_list, DEF_tactic_weight)[0] - # Change weight for try counter DEF tactic - try: # Increase weight if counter tactic exist - Counter_tactic = [el for el in ATK_tactic_list if el.name == DEF_Tactic.countered_by][0] - Counter_tactic.weight *= 1.35 - except: pass # if counter tactic doesn't exist - # ATK choice finnaly - ATK_tactic_weight = [el.weight for el in ATK_tactic_list] - ATK_Tactic = rd.choices(ATK_tactic_list, ATK_tactic_weight)[0] - if Initiative_winner == "DEF": - # ATK choice first - ATK_tactic_weight = [el.weight for el in ATK_tactic_list] # Tout les poids de la listes de tactiques - ATK_Tactic = rd.choices(ATK_tactic_list, ATK_tactic_weight)[0] - try: # Change weight for try counter ATK tactic - Counter_tactic = [el for el in DEF_tactic_list if el.name == ATK_Tactic.countered_by][0] # Quel est la tactique de contre ? - Counter_tactic.weight *= 1.35 - except: pass - # DEF choice - DEF_tactic_weight = [el.weight for el in DEF_tactic_list] - DEF_Tactic = rd.choices(DEF_tactic_list, DEF_tactic_weight)[0] - return ATK_Tactic , DEF_Tactic - -def isCountered(Battle): - """ - Check if a tactic has been countered. Cancel countered ones - """ - if Battle.defender_tactic.name == Battle.attacker_tactic.countered_by: - Cancel_Tactic(Battle.attacker_tactic) - print("ATK tactic COUNTERED !!") - if Battle.attacker_tactic.name == Battle.defender_tactic.countered_by: - Cancel_Tactic(Battle.defender_tactic) - print("DEF tactic COUNTERED !!") - -def Cancel_Tactic(Tactic_to_cancel): - """ - Retire tout les bonus d'une tactique - """ - assert type(Tactic_to_cancel) is Tactic - Tactic_to_cancel.attacker_damage = 1 - Tactic_to_cancel.attacker_defense = 1 - Tactic_to_cancel.defender_damage = 1 - Tactic_to_cancel.defender_defense = 1 - Tactic_to_cancel.CAC = 0 - Tactic_to_cancel.begin_battle_phase = None - -def initiative_round(Battle): - # sourcery skip: assign-if-exp, remove-redundant-pass - """ - Choisis quel camp aura l'initiative - - Le camps qui remporte l'initiative choisiras sa tacttique en second pour essayer de contrer l'autre camps. - - Basic pour le moment car leaders ne sont pas ajoutés - """ - ATK_weight = int() - DEF_weight = int() - if Battle.AttackerLeader is None: ATK_weight = 1 - else: pass # Need Leader upgrade - if Battle.DefenderLeader is None: DEF_weight = 1 - else: pass # Need Leader upgrade - - return rd.choices(["ATK","DEF"],[ATK_weight,DEF_weight])[0] - -def apply_tactics(Battle): - """ - Applique tout les bonus multiplicateurs aux stats de chaque camps en fonctions des tactiques employés - """ - # Assignations des variables - DEF = Battle.defender - DEF_tactic = Battle.defender_tactic - ATK_side = Battle.attacker - ATK_tactic = Battle.attacker_tactic - - # Bonus for defender side - DEF.sa = DEF.sa*DEF_tactic.defender_damage*ATK_tactic.defender_damage - DEF.ha = DEF.ha*DEF_tactic.defender_damage*ATK_tactic.defender_damage - DEF.defense = DEF.defense*DEF_tactic.defender_defense*ATK_tactic.defender_defense - - # Bonus for attacker side - ATK_side.sa = ATK_side.sa*ATK_tactic.attacker_damage*ATK_tactic.attacker_damage - ATK_side.ha = ATK_side.ha*ATK_tactic.attacker_damage*ATK_tactic.attacker_damage - ATK_side.defense = ATK_side.defense*ATK_tactic.attacker_defense*ATK_tactic.attacker_defense - -def change_weight(Battle): - """Change tactics weight with regards to Generals skills and abilities and terrain""" - pass \ No newline at end of file diff --git a/HOI/Tactics/Tactics_list.py b/HOI/Tactics/Tactics_list.py deleted file mode 100644 index 85f0ad8..0000000 --- a/HOI/Tactics/Tactics_list.py +++ /dev/null @@ -1,112 +0,0 @@ -from HOI.Tactics.Tactics import Tactic - -## ATTACKS -ATK_TACTICS = [ -Tactic(attacker_damage=1.05, name="Attaque", - countered_by="Counter Attack"), -Tactic(attacker_damage=1.25, weight=2, name="Assaut", - countered_by="Counter Attack", - begin_phase="Close Quarter Combat"), -Tactic(defender_damage=0.75, name="Shock", - countered_by="Ambush"), -Tactic(attacker_damage=1.1, defender_damage=0.95, name="Infiltration Assaut"), -Tactic(attacker_damage=1.15, defender_damage=1, name="Well-Planned Attack"), -Tactic(attacker_damage=1.20, defender_damage=1.05, name="Relentless Assault"), -Tactic(attacker_damage=1.15, defender_damage=1, name="Unexpected Thrust"), -Tactic(attacker_damage=1.10, defender_damage=0.8, name="Suppressive Barrage"), -# Need requirements -Tactic(defender_damage=1.05, attacker_damage=1.25, weight=0, name="Encirclement", - countered_by="Tactical Withdrawal"), -Tactic(defender_damage=0.85, attacker_damage=1.25, weight=0, name="Breakthrough", - countered_by="Backhand Blow"), -Tactic(defender_damage=0.85, attacker_damage=1.15, weight=0, name="Blitz", - countered_by="Elastic Defense"), -Tactic(defender_damage=0.95, attacker_damage=1.2, weight=0, name="Seize Bridge", - begin_phase="Seize Bridge"), -Tactic(defender_damage=1.1, attacker_damage=1.1, weight=0, name="Mass Charge"), -] - -## DEFENSES -DEF_TACTICS = [ -Tactic(defender_damage=1.05, name="Defense"), -Tactic(defender_damage=1.25, name="Counter Attack"), -Tactic(attacker_damage=0.75, defender_damage=0.95, name="Tactic Withdrawal", - begin_phase="Tactic Withdraw"), -Tactic(attacker_damage=0.75, defender_damage=1.15, name="Delay", - countered_by="Shock"), -Tactic(attacker_damage=0.75, defender_damage=1, name="Ambush", - countered_by="Breakthrough"), -Tactic(attacker_damage=0.85, defender_damage=1.1, name="Elastic Defense"), -Tactic(attacker_damage=0.80, defender_damage=1.2, name="Backhand Blow"), -Tactic(attacker_damage=0.3, defender_damage=.4, name="Guerrilla"), -Tactic(attacker_damage=0.9, defender_damage=1.1, weight=2, name="Overwhelming Fire"), -# Need Requirement -Tactic(attacker_damage=1.2, defender_damage=.95, weight=0, name="Hold Bridge", - begin_phase="Hold Bridge"), -] - - -######################################################################################################################## -## Close Quarter Attack -ATK_CQ_TACTICS = [ -Tactic(attacker_damage=1.1, defender_damage=1.05, name="Close Quarter Attack"), -Tactic(attacker_damage=1.2, defender_damage=1.2, weight=2, name="Close Quarter Storm"), -Tactic(attacker_damage=1.05, defender_damage=1.05, weight=1, name="Close Quarter Withdraw", - begin_phase="Default"), -] - -## Close Quarter Defense -DEF_CQ_TACTICS = [ -Tactic(attacker_damage=1.1, defender_damage=1.05, name="Close Quarter Defense"), -Tactic(attacker_damage=0.8, defender_damage=1, weight=2, name="Close Quarter Local Strongpoint"), -] - - -######################################################################################################################## -## Tactical withdraw Attack -ATK_TW_TACTICS = [ -Tactic(attacker_damage=0.75, defender_damage=0.9, name="Tactical withdraw Attack"), -Tactic(attacker_damage=0.85, defender_damage=0.95, name="Pursuit"), -Tactic(attacker_damage=0.95, defender_damage=0.90, name="Intercept", - begin_phase="Default"), -] - -## Tactical withdraw Defend -DEF_TW_TACTICS = [ -Tactic(attacker_damage=0.7, defender_damage=0.95, name="Withdrawal"), -Tactic(attacker_damage=0.6, defender_damage=0.9, name="Evade"), -] - - -######################################################################################################################## -## Seize Bridge Attacks -ATK_SB_TACTICS = [ -Tactic(attacker_damage=1.2, defender_damage=1, name="Hold Bridge"), -Tactic(attacker_damage=1.2, defender_damage=0.9, name="Defend Bridge"), -] - -## Seize Bridge Defend -DEF_SB_TACTICS = [ -Tactic(attacker_damage=1, defender_damage=0.95, name="Bridge Assaut"), -Tactic(attacker_damage=1.25, defender_damage=0.9, name="Bridge Reckless Assaut"), -Tactic(attacker_damage=1.1, defender_damage=0.95, name="Recapture Bridge", - countered_by="Defend Bridge", - begin_phase="Hold Bridge"), -] - - -######################################################################################################################## -## Hold Bridge Attacks -ATK_HB_TACTICS = [ -Tactic(attacker_damage=1.1, defender_damage=1, name="Attack Bridge"), -Tactic(attacker_damage=1.2, defender_damage=1, name="Rush Bridge"), -Tactic(attacker_damage=1.2, defender_damage=1.05, weight=2, name="Storm Bridge", - countered_by="Defend Bridge", - begin_phase="Seize Bridge"), -] - -## Hold Bridge Defend -DEF_HB_TACTICS = [ -Tactic(attacker_damage=1.2, defender_damage=0.9, name="Hold Bridge"), -Tactic(attacker_damage=1.1, defender_damage=1.05, name="Defend Bridge"), -] diff --git a/W40K/Lists/Companies_list.py b/Lists/Companies_list.py similarity index 100% rename from W40K/Lists/Companies_list.py rename to Lists/Companies_list.py diff --git a/W40K/Lists/Tactics_list.py b/Lists/Tactics_list.py similarity index 100% rename from W40K/Lists/Tactics_list.py rename to Lists/Tactics_list.py diff --git a/W40K/Lists/Unit_list.py b/Lists/Unit_list.py similarity index 100% rename from W40K/Lists/Unit_list.py rename to Lists/Unit_list.py diff --git a/W40K/Run.py b/Run.py similarity index 100% rename from W40K/Run.py rename to Run.py diff --git a/W40K/Testing_Hall.py b/Testing_Hall.py similarity index 100% rename from W40K/Testing_Hall.py rename to Testing_Hall.py diff --git a/W40K/.DS_Store b/W40K/.DS_Store deleted file mode 100644 index 2194a14232b83c62f022bc653af0c44662d716da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHMU2GIp6uxI^=?op(+e-NvmUOXD8fbK}P<|BI{s3Z2+OVZRfUL7SLpw5^S!ZUq z2-Fm!F(yP&j1OvpQGo{%|ALPwf=~V>#y$W(Y2t(7MPo!0Up)8T*=D;Ge9;8R+~m%g zIrp41bHDq|oV{lWA<&-FR}&H=gh<$#qzWEpXl$JIn_48$)Sv|PC&WvSdD*n(q;Ikf z6(Is40wDq+0wDq+0(S-in6p`vDuoP>Ap#)+Ap%nfufe?Y45ny}wa?(L8q7iS}{{4@1)-pXm9=`&SS!Lz3D7clPsG?eVA{Gf*6!qN-Q)H_aDLva`6C!dYDlCKd@iyir|81Nhg(|KHpg08 zTgIDXhu5u(H^DWVqzH!hm1e!K9 zxZ87Fzk>%$QJV9Nod(7-^F}8|#89>DZarBR#_Km+4`o9lE+!_Qt6C6Ux_sq>Yc_0Z zpRA@ewTe_&Hbj~%5n`f_u1O0FU>01>z7H=9;WYb4Ls^ROydew>GKc) zs!1}}tZG)2z5_@Y>d8VAU#+OSEG=zVRF@@gw6;}I2l8TSv@1|;5Cv72^lp5K!-Y(u9PgNMaO+9F9qY_v_+4P9y|tbIeGS)B6u%9JItC8Uw8$Hdh~ z_7jI3CCAAra-LiupOP=h_v8oiGr3M~kUz;^u%>7vN=h1zv@d@D`kgGjJ9@gwNn}xCEEsYxoAf zg)49seuC@pEBq#&GE!iEcVPlT!tW@jlQ<~kMNZ62;wUF^;~h`pt5uA-_sy%DzaX}J zc#e93Z8qhc}tIPCI-j%cpr-14`iruP{MaYrWKRi z`u^xL3CTsJ$;IlTg^kfBg#x|{GQV6EZHm$eGLM-m@#sS`GM>&7o@ZsG%8I+u*ACJ6Pwg33#wo(iIUo5gCxBH;y zldf$!_Ao|eZ_gY|mkt>vSxlKOb|0_Y;!IJ721(L?w`bEe>;H>vIt9jz2w7pS40GjO znJcGwjT8rQdIN*_df#)m7j3`f16rWxc?7|;w8VF I?v4HbKj2i1j{pDw diff --git a/W40K/Functions/.DS_Store b/W40K/Functions/.DS_Store deleted file mode 100644 index 38734ca2de71d90578b12a191d5ff30a57f26d5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ8Hu~5S@u#2;8`IxmU;y7U7)02atb(6aoc8igc=cE+5TrJ{W}TCXgn)ftj~E znx|!7q0xwlw%_Mhk+q04a6`FRn43K}pV>=h6bQ#VPI7>M$h&m2>c}_IdtuEgkdX>d0V;4;z`hR!Zden?K>u_g_y_=8 zBJGB?&l13531Cee1CfDgP=P_!95FQL$d|0EiDO{UMRWMjJXv!>Q9m8;FJ3NM0~x6R z6__fpi0#_?{~P?t{68geM+KA!1r*gxx&q`b_#;GW1zQV hY^)t`yeR65t?|4jj)6``-swR8445u7D)83|+yF)|6_)@2