From aeb0cdb2673f5c330f13a077be6ce4390944419d Mon Sep 17 00:00:00 2001 From: tprats <tommy.prats@inria.fr> Date: Mon, 27 May 2024 14:47:13 +0200 Subject: [PATCH 1/5] finsih test in level 06key in tutorial --- levels/tutorial/06_key/level.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/levels/tutorial/06_key/level.py b/levels/tutorial/06_key/level.py index a6ca3a4a..594ead88 100755 --- a/levels/tutorial/06_key/level.py +++ b/levels/tutorial/06_key/level.py @@ -7,7 +7,7 @@ from utils import lvl class Level(AbstractLevel): - """05_key""" + """06_key""" def arcade_custom_first_start(self): @@ -68,6 +68,7 @@ class Level(AbstractLevel): if plx != keyx or ply != keyy: self.checker.failed("Player is not on key when has_key changes") + def check_open_door(self): chk = self.checker.tracker plx = chk.get_variable_value_as_str('player_x', "int") @@ -97,6 +98,7 @@ class Level(AbstractLevel): self.checker.failed("Player has not opened the door") pass + def setup(self): """Set a custom map.""" ## TODO: is that useful?? @@ -110,13 +112,30 @@ class Level(AbstractLevel): # char_map = [tile for tile in str_map] # self.map.update_floor(char_map) + def test(self): import tests.lib_test as T + self.recompile_bug() + + for _ in range(10): + T.cnext() - for _ in range(6): + # récupère la position de la clé + for _ in range(43): T.cnext() T.expect_defeat() self.run() + # self.restart() + self.recompile_answer() + # prelude du probleme + for _ in range(10): + T.cnext() + + # récupère la position de la clé + for _ in range(42): + T.cnext() + T.expect_victory() + self.run() if __name__ == "__main__": -- GitLab From b1a64647bbea538fc574909a2aaf25de9ad037af Mon Sep 17 00:00:00 2001 From: tprats <tommy.prats@inria.fr> Date: Mon, 27 May 2024 15:01:38 +0200 Subject: [PATCH 2/5] finsih test in level 06key in tutorial --- levels/tutorial/06_key/level.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/levels/tutorial/06_key/level.py b/levels/tutorial/06_key/level.py index 594ead88..9e687143 100755 --- a/levels/tutorial/06_key/level.py +++ b/levels/tutorial/06_key/level.py @@ -97,7 +97,7 @@ class Level(AbstractLevel): if not self.checker.has_opened_door: self.checker.failed("Player has not opened the door") pass - + def setup(self): """Set a custom map.""" @@ -117,23 +117,20 @@ class Level(AbstractLevel): import tests.lib_test as T self.recompile_bug() - for _ in range(10): + for _ in range(53): T.cnext() # récupère la position de la clé - for _ in range(43): - T.cnext() + T.expect_defeat() self.run() # self.restart() + + # version qui marche self.recompile_answer() - # prelude du probleme - for _ in range(10): + for _ in range(52): T.cnext() - # récupère la position de la clé - for _ in range(42): - T.cnext() T.expect_victory() self.run() -- GitLab From b9d0348d61c0cf3a4d2a2ad19ef227e8b4258fa6 Mon Sep 17 00:00:00 2001 From: tprats <tommy.prats@inria.fr> Date: Mon, 27 May 2024 16:18:34 +0200 Subject: [PATCH 3/5] The aim of this commit is to add a .yml file to store the default parameters when the user launches the game. This is presented with a field for each parameter in which a value can be entered. The agdbentures file has been modified accordingly, but the default values remain the same. The choice has been made to give priority to the command line in the event of arguments also being specified in the .yml file. --- agdbentures | 80 +++++++++++++++++++++++++++++++++++++++++++++++++---- config.yml | 6 ++++ 2 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 config.yml diff --git a/agdbentures b/agdbentures index de3c61fe..9abe256b 100755 --- a/agdbentures +++ b/agdbentures @@ -45,8 +45,77 @@ from config import Config from language import Lang from graphic.constants import Anim +# fonction Tommy peut être inutile + +def print_possible_value(low_value : str, high_value : str, value : str, key : str) -> None: + try : + int_value = int(value) + if int(low_value) <= int_value <= int(high_value): + debug_default = int_value + else : + print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre {low_value} et {high_value} inclus et attendu") + except ValueError: + print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre {low_value} et {high_value} inclus et attendu") + if __name__ == "__main__": + + # début code de tommy + # les autres changements sont aux lignes 169, 199, 247, 249 + langue_default = "en" + debug_default = 1 + speed_default = 5 + left_default = False + win_move_default = False + + import yaml + + with open("config.yml", 'r') as f: + try: + # Chargement du fichier + config = yaml.safe_load(f) + + # Récupération des commandes + inputs = config["inputs"] + + # Lecture des argument + for key,value in inputs.items(): + print(key, value) + if key == "langue" and value in ["en","fr"]: + langue_default = value + if key == "debug" and value != None: + try : + int_value = int(value) + if 0 <= int_value <= 3: + debug_default = int_value + else : + print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 0 et 3 inclus et attendu") + except ValueError: + print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 0 et 3 inclus et attendu") + + if key == "speed" and value != None: + try : + int_value = int(value) + if 1 <= int_value <= 100: + speed_default = int_value + else : + print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 1 et 100 inclus et attendu") + except ValueError: + print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 1 et 100 inclus et attendu") + + if key == "left" and value == True: + left_default = True + if key == "win_move" and value == True: + win_move_default = True + + + except yaml.YAMLError as ex: + print("YAML FILE HAS SYNTAX ERROR :") + print(ex) + + + + # fin code de tommy parser = argparse.ArgumentParser(description="Agdbentures launcher") parser.add_argument( "-v", @@ -57,7 +126,7 @@ if __name__ == "__main__": parser.add_argument( "--lang", help="Choose agdbentures language (default: [en]glish)", - default="en", + default=langue_default, choices=["en", "fr"], ) parser.add_argument("-l", "--level", help="Path to launch a single level directly") @@ -97,7 +166,7 @@ if __name__ == "__main__": "-d", type=int, choices=[0, 1, 2, 3], - default=1, + default=debug_default, help="Set debug level (0 = crit, 1 = warn, 2 = info, 3 = debug, default = 1)", ) parser.add_argument( @@ -127,7 +196,7 @@ if __name__ == "__main__": "--speed", "-s", type=int, - default=5, + default= speed_default, help="Adjust player movement speed (from 1 to 100), affecting the SPEED constant in lib/graphic/constants.py" ) @@ -174,9 +243,10 @@ if __name__ == "__main__": else: code_window_cls = VimServerWindow - if args.left: + # Tommy a fait ça peut être a améliorer + if args.left or left_default: GenServerWindow.window_alignment = 'left' - if args.no_win_move: + if args.no_win_move or win_move_default: GenServerWindow.window_alignment = 'nothing' if args.dev: diff --git a/config.yml b/config.yml new file mode 100644 index 00000000..d7d99894 --- /dev/null +++ b/config.yml @@ -0,0 +1,6 @@ +inputs: + langue: fr + debug : 5 + speed: 50 + left : True + win_move : True \ No newline at end of file -- GitLab From cadeeed0eac482ca38fc6d96fcf9bcf6d9d56e9a Mon Sep 17 00:00:00 2001 From: tprats <tommy.prats@inria.fr> Date: Tue, 28 May 2024 12:04:10 +0200 Subject: [PATCH 4/5] llow user to make fault in options he insert in the file config.yml by catching exception --- agdbentures | 103 +++++++++++++++++++++++++--------------------------- 1 file changed, 50 insertions(+), 53 deletions(-) diff --git a/agdbentures b/agdbentures index 9abe256b..86654ccd 100755 --- a/agdbentures +++ b/agdbentures @@ -45,18 +45,6 @@ from config import Config from language import Lang from graphic.constants import Anim -# fonction Tommy peut être inutile - -def print_possible_value(low_value : str, high_value : str, value : str, key : str) -> None: - try : - int_value = int(value) - if int(low_value) <= int_value <= int(high_value): - debug_default = int_value - else : - print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre {low_value} et {high_value} inclus et attendu") - except ValueError: - print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre {low_value} et {high_value} inclus et attendu") - if __name__ == "__main__": @@ -67,51 +55,57 @@ if __name__ == "__main__": speed_default = 5 left_default = False win_move_default = False - + level_default = None import yaml - with open("config.yml", 'r') as f: - try: - # Chargement du fichier - config = yaml.safe_load(f) - - # Récupération des commandes - inputs = config["inputs"] - - # Lecture des argument - for key,value in inputs.items(): - print(key, value) - if key == "langue" and value in ["en","fr"]: - langue_default = value - if key == "debug" and value != None: - try : - int_value = int(value) - if 0 <= int_value <= 3: - debug_default = int_value - else : + # Chargement du fichier + try: + with open("config.yml", 'r') as f: + + try: + + config = yaml.safe_load(f) + + # Récupération des commandes + inputs = config["inputs"] + + # Lecture des argument + for key,value in inputs.items(): + if key == "langue" and value in ["en","fr"]: + langue_default = value + if key == "debug" and value != None: + try : + int_value = int(value) + if 0 <= int_value <= 3: + debug_default = int_value + else : + print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 0 et 3 inclus et attendu") + except ValueError: print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 0 et 3 inclus et attendu") - except ValueError: - print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 0 et 3 inclus et attendu") - - if key == "speed" and value != None: - try : - int_value = int(value) - if 1 <= int_value <= 100: - speed_default = int_value - else : + + if key == "speed" and value != None: + try : + int_value = int(value) + if 1 <= int_value <= 100: + speed_default = int_value + else : + print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 1 et 100 inclus et attendu") + except ValueError: print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 1 et 100 inclus et attendu") - except ValueError: - print(f"la config du yaml sur la valeur : {key} ne correspond pas aux attentes.\n un entier entre 1 et 100 inclus et attendu") - if key == "left" and value == True: - left_default = True - if key == "win_move" and value == True: - win_move_default = True - - - except yaml.YAMLError as ex: - print("YAML FILE HAS SYNTAX ERROR :") - print(ex) + if key == "left" and value == True: + left_default = True + if key == "win_move" and value == True: + win_move_default = True + if key == "level" : + level_default = value + + + except yaml.YAMLError as ex: + log.error("YAML FILE HAS SYNTAX ERROR :") + log.error(ex) + except FileNotFoundError: + log.error("\n***************************************\nle fichier de configuration n'existe pas\nLancement du jeu en mode normal\n***************************************") @@ -264,9 +258,11 @@ if __name__ == "__main__": window = MainWindow(code_window_cls) try: - if args.level is None: + if args.level is None and level_default is None: window.run() else: + if args.level is None: + args.level = level_default if args.level[-1] == '/': # remove trailing slash lvld = args.level[:-1] else: @@ -278,6 +274,7 @@ if __name__ == "__main__": log.info(f"Directly loading level '{lvl}'") window.load_level(lvl) arcade.run() + except Exception as e: log.error(f"Exception caught in main thread: {e}") log.info(f"Remaining threads running: {threading.active_count()}") -- GitLab From 1cca7fb6ada1edb2f780ff3bb1024c8eed72fb2a Mon Sep 17 00:00:00 2001 From: tprats <tommy.prats@inria.fr> Date: Tue, 28 May 2024 16:34:05 +0200 Subject: [PATCH 5/5] final version of the config.yml file and his impact on agdbentures --- agdbentures | 2 +- config.yml | 34 ++++++++++++-- levels/medium/pet_follow/pet_follow.py | 63 ++++++++++++++++++++++++-- 3 files changed, 90 insertions(+), 9 deletions(-) diff --git a/agdbentures b/agdbentures index 86654ccd..184f8953 100755 --- a/agdbentures +++ b/agdbentures @@ -71,7 +71,7 @@ if __name__ == "__main__": # Lecture des argument for key,value in inputs.items(): - if key == "langue" and value in ["en","fr"]: + if key == "language" and value in ["en","fr"]: langue_default = value if key == "debug" and value != None: try : diff --git a/config.yml b/config.yml index d7d99894..d0d3b36d 100644 --- a/config.yml +++ b/config.yml @@ -1,6 +1,30 @@ +# pour chaque champ, il est possible de ne rien indiquer et alors le jeu prendra ses paramétres par défaut inputs: - langue: fr - debug : 5 - speed: 50 - left : True - win_move : True \ No newline at end of file + + # le champ langue a deux arguments possibles , ce champ permet de gérer la langue de l'affichage du jeu: "en" ou "fr" + language: fr + + # le champ debug a quatre arguments possibles, ce champ gère les affichages qui seront fait dans la console selon leur type: + # 0 -> critique + # 1 -> warning + # 2 -> info ( de plus ce mode indique les FPS) + # 3 -> debug ( de plus ce mode indique les FPS) + debug : 3 + + # le champ speed prend un argument dans un intervalle allant de 1 à 100 (inclus), ce champ régle la vitesse des animations dans le jeu + speed: 70 + + # le champ left gère la disposition dans laquelle les fenetres vont apparaître au lancement du jeu + # True -> La fenêtre du jeu va s'alligner à gauche de l'écran + # autre chose que True -> la fenêtre du jeu va se positionner au centre de l'écran + left : + + # le champ win_move gère la séparation des différentes fenetres de jeu + # True -> les fenêtres se superposent + # autre chose que True -> mode "normal" du jeu ou le jeu va apparaitre à gauche de l'éditeur de code + win_move : + + # le champ level gère le niveau qui va être chargé au lancement du jeu + # pour charger un niveau spécifique il faut donner son chemin relatif depuis le répertoire level exemple : basic/command_args pour charger le niveau command_args + # Ne rien mettre lance le jeu dans son interface "normale" ou les niveaux peuvent s'encahiner et ou le joueur peut voir sa progression + level : \ No newline at end of file diff --git a/levels/medium/pet_follow/pet_follow.py b/levels/medium/pet_follow/pet_follow.py index c4614a29..fda2fca9 100644 --- a/levels/medium/pet_follow/pet_follow.py +++ b/levels/medium/pet_follow/pet_follow.py @@ -1,14 +1,71 @@ #!/usr/bin/env python3 from level.level_abc import AbstractLevel -from lib.loader.loader import load_level, run_level, test_level -from lib.level.objects import find_map -from lib.utils import cus +from loader.loader import load_level, run_level, test_level +from level.objects import find_map +from utils import cus +from language import lmessage, Lang class Level(AbstractLevel): def arcade_pre_run(self): pass + def pre_validation(self): + print("salut toi !!!") + if 1==1: + print("salut") + self.checker.failed( + lmessage( + { + Lang.EN: "You don't have to move the exit.", + Lang.FR: "Vous n'avez pas à bouger la sortie.", + } + ) + ) + print("hyeh") + print("je passe ici ??") + self.checker.append_inputs( + [ + 'UP', + 'UP', + 'RIGHT', + 'RIGHT', + 'RIGHT', + 'RIGHT', + 'UP', + 'UP', + 'LEFT', + 'LEFT', + 'LEFT', + 'LEFT', + 'LEFT', + 'RIGHT', + ] + ) + print("et la ??") + + pass def test(self): + import tests.lib_test as T + self.recompile_bug() + for _ in range(120): + T.cnext() + print("UP") + + + + T.expect_defeat() + self.run() + # self.restart() + + # version qui marche + self.recompile_answer() + for _ in range(120): + T.cnext() + print("UP") + + + T.expect_victory() + self.run() pass -- GitLab