Commit 822f178f authored by Leo Peron's avatar Leo Peron
Browse files

Merge remote-tracking branch 'origin/main'

parents 2a56cdde d838f345
......@@ -2,4 +2,6 @@
.idea/
venv/
__pycache__/
.mypy_cache/
\ No newline at end of file
.mypy_cache/
asp/__pycache__/
asp/.mypy_cache/
\ No newline at end of file
......@@ -2,7 +2,8 @@
## Présentation
Le projet **helltaker_ia02** contient différents utilitaires pour gérer les grilles *Helltaker*, ainsi que des exemples. Il sera mis à jour au fur et à mesure. Si vous aves des propositions de cartes, n'hésitez pas à nous les soumettre <mailto:sylvain.lagrue@hds.utc.fr>.
Projet de solving de niveau du jeu helltaker, comprenant une solution résolvant les niveaux en python et une solution les resolvant en ASP.
Projet réalisé par Adrien Simon, Julie Pichon, et Léo Peron.
## Structure des niveaux
......@@ -37,35 +38,3 @@ Level 1
# B B D#
#########
```
## Les utilitaires
Le package python3 `helltaker_utils` permet de lire les fichiers et de vérifier les plans.
### `grid_from_file(filename: str, voc: dict = {})`
Cette fonction lit un fichier et le convertit en une grille de Helltaker
Arguments:
- filename: fichier contenant la description de la grille
- voc: argument facultatif permettant de convertir chaque case de la grille en votre propre vocabulaire
Retour:
- un dictionnaire contenant:
- la grille de jeu sous une forme d'une liste de liste de (chaînes de) caractères
- le nombre de ligne `m`
- le nombre de colonnes `n`
- le titre de la grille
- le nombre maximal de coups `max_steps`
### `check_plan(plan: str)`
Cette fonction vérifie que votre plan est valide.
- Argument: un plan sous forme de chaîne de caractères
- Retour : `True` si le plan est valide, `False` sinon
# ASP SOLVER FOR HELLTAKER
Ceci est un solveur codé en ASP, automatisé sous Python avec le module clingo pour résoudre des niveaux du jeu helltaker.
### How to use
- en console, vous avez juste à taper `python3 main.py path_to_txt_file` pour lancer le programme
- le programme renverra sous la forme "hbgd" un modèle valide pour le niveau
\ No newline at end of file
......@@ -837,19 +837,23 @@ fluent(F, T + 1) :-
asp = level_specificities + pb
ctl = clingo.Control([f"-c maxstep={infos['max_steps']}"], logger=log)
ctl = clingo.Control([f"-c maxstep={infos['max_steps']}"], logger=log) # ajouter '-n0' pour afficher tt les modeles
ctl.add("base", [], asp)
ctl.ground([("base", [])])
plan = [0] * infos["max_steps"]
model_count = 0
with ctl.solve(yield_=True) as handle:
for model in handle:
model_count += 1
for atom in model.symbols(atoms=True):
if atom.name == "do":
plan[atom.arguments[1].number] = atom.arguments[0].name
#print(f"Model count: {model_count}")
plan_str = ""
for i in range(len(plan)):
if "up" in plan[i]:
......@@ -869,12 +873,6 @@ def log(code, message):
afficher des warnings inutiles dans la console lors du solving."""
pass
def msg():
"""Cette fonction récupère les messages des logs et n'en fait rien."""
return
def main():
# récupération du nom du fichier depuis la ligne de commande
filename = sys.argv[1]
......@@ -883,11 +881,15 @@ def main():
infos = grid_from_file(filename)
# calcul du plan
start = time.time()
plan = planify_asp(infos)
end = time.time()
# affichage du résultat
if check_plan(plan):
# print(f"Temps d'exécution : {(end - start):.2f} secondes.")
print("[OK]", plan)
# print("")
else:
print("[Err]", plan, file=sys.stderr)
sys.exit(2)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment