diff --git a/__pycache__/fltk.cpython-310.pyc b/__pycache__/fltk.cpython-310.pyc new file mode 100644 index 0000000..d26513d Binary files /dev/null and b/__pycache__/fltk.cpython-310.pyc differ diff --git a/__pycache__/fltk.cpython-39.pyc b/__pycache__/fltk.cpython-39.pyc new file mode 100644 index 0000000..810a89a Binary files /dev/null and b/__pycache__/fltk.cpython-39.pyc differ diff --git a/__pycache__/game.cpython-310.pyc b/__pycache__/game.cpython-310.pyc new file mode 100644 index 0000000..0d512e4 Binary files /dev/null and b/__pycache__/game.cpython-310.pyc differ diff --git a/__pycache__/maps.cpython-310.pyc b/__pycache__/maps.cpython-310.pyc new file mode 100644 index 0000000..27cb298 Binary files /dev/null and b/__pycache__/maps.cpython-310.pyc differ diff --git a/__pycache__/wall_is_you.cpython-39.pyc b/__pycache__/wall_is_you.cpython-39.pyc new file mode 100644 index 0000000..170e95c Binary files /dev/null and b/__pycache__/wall_is_you.cpython-39.pyc differ diff --git a/game.py b/game.py index a5b7c67..75524ba 100644 --- a/game.py +++ b/game.py @@ -2,6 +2,11 @@ import random, time +N = 0 +E = 1 +S = 2 +O = 3 + ## Gestion de partie def créer_salle_random(): diff --git a/maps.py b/maps.py index cdcc28e..05af3fc 100644 --- a/maps.py +++ b/maps.py @@ -4,6 +4,8 @@ import random, time ## Gestion des maps +NOM_MAP = "" + def créer_salle(forme_salle): """ Créer une salle aléatoire (N,E,S,O) @@ -42,10 +44,14 @@ def charger(fichier, donjon, dragons, aventurier): @params fichier, chemin d'accès à un fichier @return 1 ou None """ + global NOM_MAP + donjon.clear() dragons.clear() - # Lecture fichier brut + NOM_MAP = fichier + + # Lecture fichier brut contenu = "" with open(fichier, 'r') as fichier: contenu = fichier.read() @@ -67,13 +73,13 @@ def charger(fichier, donjon, dragons, aventurier): # Déclaration de l'aventurier if "A" in declaration: cible, x, y = declaration.split(" ") - aventurier["position"] = (x,y) + aventurier["position"] = (int(x),int(y)) aventurier["niveau"] = 1 # Déclaration d'un dragon elif "D" in declaration: cible, x, y, niveau = declaration.split(" ") - dragons.append({ 'position' : (x,y), 'niveau' : niveau }) + dragons.append({ 'position' : (int(x),int(y)), 'niveau' : int(niveau) }) return 1 except Exception as e: diff --git a/media/salle_0.png b/media/salle_0.png new file mode 100644 index 0000000..a5480b8 Binary files /dev/null and b/media/salle_0.png differ diff --git a/media/salle_1.png b/media/salle_1.png new file mode 100644 index 0000000..36deb12 Binary files /dev/null and b/media/salle_1.png differ diff --git a/media/salle_1_E.png b/media/salle_1_E.png new file mode 100644 index 0000000..6a45f69 Binary files /dev/null and b/media/salle_1_E.png differ diff --git a/media/salle_1_N.png b/media/salle_1_N.png new file mode 100644 index 0000000..6042a5a Binary files /dev/null and b/media/salle_1_N.png differ diff --git a/media/salle_1_O.png b/media/salle_1_O.png new file mode 100644 index 0000000..d8d1638 Binary files /dev/null and b/media/salle_1_O.png differ diff --git a/media/salle_1_S.png b/media/salle_1_S.png new file mode 100644 index 0000000..51f018c Binary files /dev/null and b/media/salle_1_S.png differ diff --git a/media/salle_2_E_S.png b/media/salle_2_E_S.png new file mode 100644 index 0000000..3ae9c7a Binary files /dev/null and b/media/salle_2_E_S.png differ diff --git a/media/salle_2_N_E.png b/media/salle_2_N_E.png new file mode 100644 index 0000000..ad856f9 Binary files /dev/null and b/media/salle_2_N_E.png differ diff --git a/media/salle_2_N_S.png b/media/salle_2_N_S.png new file mode 100644 index 0000000..e483821 Binary files /dev/null and b/media/salle_2_N_S.png differ diff --git a/media/salle_2_O_E.png b/media/salle_2_O_E.png new file mode 100644 index 0000000..6fcb339 Binary files /dev/null and b/media/salle_2_O_E.png differ diff --git a/media/salle_2_O_N.png b/media/salle_2_O_N.png new file mode 100644 index 0000000..16b409c Binary files /dev/null and b/media/salle_2_O_N.png differ diff --git a/media/salle_2_S_O.png b/media/salle_2_S_O.png new file mode 100644 index 0000000..bfe817a Binary files /dev/null and b/media/salle_2_S_O.png differ diff --git a/media/salle_3_E_S_O.png b/media/salle_3_E_S_O.png new file mode 100644 index 0000000..4627cce Binary files /dev/null and b/media/salle_3_E_S_O.png differ diff --git a/media/salle_3_N_E_S.png b/media/salle_3_N_E_S.png new file mode 100644 index 0000000..10e3fcf Binary files /dev/null and b/media/salle_3_N_E_S.png differ diff --git a/media/salle_3_O_N_E.png b/media/salle_3_O_N_E.png new file mode 100644 index 0000000..aedc4ae Binary files /dev/null and b/media/salle_3_O_N_E.png differ diff --git a/media/salle_3_S_O_N.png b/media/salle_3_S_O_N.png new file mode 100644 index 0000000..5b18835 Binary files /dev/null and b/media/salle_3_S_O_N.png differ diff --git a/media/salle_4.png b/media/salle_4.png new file mode 100644 index 0000000..318561e Binary files /dev/null and b/media/salle_4.png differ diff --git a/wall_is_you.py b/wall_is_you.py index 88693f0..63a0e8a 100755 --- a/wall_is_you.py +++ b/wall_is_you.py @@ -9,7 +9,7 @@ # - Intention : cible le dragon le plus fort accessible (orgueil) # # Doc FLTK : https://antoinemeyer.frama.io/fltk/ -import random, time, fltk, os +import random, fltk, time, os, importlib import maps import game @@ -95,10 +95,12 @@ def selection_menu(): event = fltk.attend_ev() if "Quitte" in fltk.type_ev(event): + fltk.efface_tout() fltk.ferme_fenetre() return None if "Touche" in fltk.type_ev(event) and "Escape" in fltk.touche(event): + fltk.efface_tout() fltk.ferme_fenetre() return None @@ -116,6 +118,7 @@ def selection_menu(): if x_n+y_n*4 < 0 or x_n+y_n*4 >= len(list_maps): continue + fltk.efface_tout() fltk.ferme_fenetre() return "./maps/" + list_maps[x_n+y_n*4] @@ -128,10 +131,118 @@ def run_game(): @params void @return void """ - pass + LARGEUR_FENETRE = 800 + HAUTEUR_FENETRE = 800 + + fltk.cree_fenetre(LARGEUR_FENETRE, HAUTEUR_FENETRE) + fltk.texte(LARGEUR_FENETRE/2, HAUTEUR_FENETRE/20, + "Wall is You : map {}".format(maps.NOM_MAP), + couleur="black", + taille=30, + ancrage='center') + + fltk.texte(LARGEUR_FENETRE/2, HAUTEUR_FENETRE/10, + "Cliquez sur une salle pour entraîner sa rotation. " + "Appuyez sur Entrée pour valider votre tour.", + couleur="black", + taille=10, + ancrage='center') + + fltk.texte(LARGEUR_FENETRE/2, HAUTEUR_FENETRE/8, + "Tapez Echap pour quitter le jeu", + couleur="green", + taille=10, + ancrage='center') + + modeles = { + (True,)*4 : "salle_4", + (False, False, False, True) : "salle_1_O", + (False, True, False, False) : "salle_1_E", + (False, False, True, False) : "salle_1_S", + (True, False, False, False) : "salle_1_N", + (False, True, True, False) : "salle_2_E_S", + (False, False, True, True) : "salle_2_S_O", + (True, False, False, True) : "salle_2_O_N", + (True, True, False, False) : "salle_2_N_E", + (True, False, True, False) : "salle_2_N_S", + (False, True, False, True) : "salle_2_O_E", + (False, True, True, True) : "salle_3_E_S_O", + (True, True, False, True) : "salle_3_O_N_E", + (True, True, True, False) : "salle_3_N_E_S", + (True, False, True, True) : "salle_3_S_O_N" + } + + while True: + fltk.mise_a_jour() + # Affichage donjon + for i in range(6): + for j in range(6): + fltk.image( 100+i*100, + 150+j*100, + 'media/{}.png'.format(modeles[donjon[i][j]]), + ancrage = "nw", + largeur=100, + hauteur=100, + tag="{},{}".format(i,j)) + + # Affichage aventurier + fltk.image( 110+aventurier["position"][0]*100, + 170+aventurier["position"][1]*100, + 'media/Knight_s.png', + ancrage = "nw", + largeur=39, + hauteur=50) + + # Affichage dragon + for dragon in dragons: + fltk.image( 143+dragon["position"][0]*100, + 170+dragon["position"][1]*100, + 'media/Dragon_s.png', + ancrage = "nw", + largeur=39, + hauteur=50) + + event = fltk.attend_ev() + + if "Quitte" in fltk.type_ev(event): + for i in range(6): + for j in range(6): + fltk.efface("{},{}".format(i,j)) + fltk.ferme_fenetre() + return None + + if "Touche" in fltk.type_ev(event) and "Escape" in fltk.touche(event): + for i in range(6): + for j in range(6): + fltk.efface("{},{}".format(i,j)) + fltk.ferme_fenetre() + fltk.ferme_fenetre() + return None + + if "Touche" in fltk.type_ev(event) and "Return" in fltk.touche(event): + print("Validation tour") + intent = game.intention(donjon, aventurier["position"], dragons) + print(intent) + + if "ClicGauche" in fltk.type_ev(event): + # XXX à améliorer + x = fltk.abscisse(event) + y = fltk.ordonnee(event) + + print("Clic sur coords ({},{})".format(x,y)) + + if x > 100 and y > 150 and x < 700 and y < 750: + x_n = int((x - 100) / 100) + y_n = int((y - 150) / 100) + print("Rotation de salle ({},{}) demandée".format(x_n, y_n)) + game.pivoter_donjon(donjon, (x_n, y_n)) + + +## Fonction principale def main(): while True: + importlib.reload(fltk) # corrige un bug sérieux de fltk avec les images map_choice = selection_menu() if not map_choice: break @@ -140,6 +251,7 @@ def main(): if maps.charger(map_choice, donjon, dragons, aventurier): run_game() else: + print("Erreur de chargement de la map : {}".format(map_choice)) return 1 return 0