Wall_Is_You/wall_is_you.py

148 lines
4.1 KiB
Python
Raw Normal View History

2023-04-14 11:25:38 +02:00
#!/usr/bin/env python3
# Concept :
# - Donjon : action par tour, manipule des salles
# - Salles : passages vers des directions cardinales, contiennent des dragons
# - Dragons : plusieurs niveaux, tous différents
#
# - Aventurier : déplacement tour par tour de salle en salle vers l'intention
# - Intention : cible le dragon le plus fort accessible (orgueil)
2023-04-28 11:31:18 +02:00
#
# Doc FLTK : https://antoinemeyer.frama.io/fltk/
2023-05-10 10:09:36 +02:00
import random, time, fltk, os
import maps
import game
2023-04-14 11:25:38 +02:00
## VARIABLES DE CONFIGURATION
TAILLE_DONJON = 6
2023-05-10 10:09:36 +02:00
LARGEUR_FENETRE = 800
HAUTEUR_FENETRE = 400
2023-04-14 11:25:38 +02:00
## Variables globales
donjon = [] # liste de salles (N,E,S,O)
dragons = [] # liste de dragons
2023-04-14 11:25:38 +02:00
N = 0
E = 1
S = 2
O = 3
aventurier = {
'position' : (0,0),
'niveau' : 1,
'vivant': True
2023-04-14 11:25:38 +02:00
}
2023-05-10 10:09:36 +02:00
## Fonctions
def selection_menu():
"""
2023-05-10 10:09:36 +02:00
Home selection menu
2023-04-14 11:25:38 +02:00
@params void
2023-05-10 10:09:36 +02:00
@return path, chemin d'accès à un fichier de map
2023-04-14 11:25:38 +02:00
"""
2023-05-10 10:09:36 +02:00
list_maps = os.listdir("maps")
2023-05-10 10:09:36 +02:00
fltk.cree_fenetre(LARGEUR_FENETRE, HAUTEUR_FENETRE)
fltk.texte(LARGEUR_FENETRE/2, HAUTEUR_FENETRE/8,
"Bienvenue dans Wall is You !",
couleur="black",
taille=40,
ancrage='center')
fltk.texte(LARGEUR_FENETRE/2, HAUTEUR_FENETRE/4,
"Vous allez pouvoir sélectionner un donjon auquel jouer"
" dans la liste ci-dessous."
" Cliquez sur le donjon de votre choix pour y jouer.",
couleur="black",
taille=10,
ancrage='center')
fltk.texte(LARGEUR_FENETRE/2, HAUTEUR_FENETRE/3,
"Tapez Echap pour quitter le jeu",
couleur="green",
taille=10,
ancrage='center')
if len(list_maps) == 0:
fltk.texte(LARGEUR_FENETRE/2, HAUTEUR_FENETRE/2,
"Aucun donjon jouable installé.",
couleur="red",
taille=30,
ancrage='center')
2023-04-14 11:25:38 +02:00
else:
2023-05-10 10:09:36 +02:00
x1 = LARGEUR_FENETRE/40
x2 = HAUTEUR_FENETRE/2.22
y1 = HAUTEUR_FENETRE/2.22
y2 = LARGEUR_FENETRE/3
for i in range(len(list_maps)):
fltk.rectangle(x1, y1, x2, y2, remplissage="white")
fltk.texte(x1+(x2-x1)/2,
y1+(y2-y1)/2,
list_maps[i].replace(".txt", ""),
couleur="blue",
taille=20,
ancrage='center')
x1 += LARGEUR_FENETRE/4
x2 += LARGEUR_FENETRE/4
if max(x1, x2) > LARGEUR_FENETRE:
x1 = LARGEUR_FENETRE/40
x2 = HAUTEUR_FENETRE/2.22
y1 += HAUTEUR_FENETRE/3.5
y2 += HAUTEUR_FENETRE/3.5
while True:
event = fltk.attend_ev()
2023-05-10 10:09:36 +02:00
if "Quitte" in fltk.type_ev(event):
fltk.ferme_fenetre()
return None
2023-05-10 10:09:36 +02:00
if "Touche" in fltk.type_ev(event) and "Escape" in fltk.touche(event):
fltk.ferme_fenetre()
return None
if "ClicGauche" in fltk.type_ev(event):
# XXX à améliorer
x = fltk.abscisse(event)
y = fltk.ordonnee(event)
x_i = LARGEUR_FENETRE/40
y_i = HAUTEUR_FENETRE/2.22
x_n = int((x - x_i) / (LARGEUR_FENETRE/4))
y_n = int((y - y_i) / (HAUTEUR_FENETRE/3.5))
if x_n+y_n*4 < 0 or x_n+y_n*4 >= len(list_maps):
continue
2023-05-10 10:09:36 +02:00
fltk.ferme_fenetre()
return "./maps/" + list_maps[x_n+y_n*4]
2023-04-28 11:05:41 +02:00
2023-05-10 10:09:36 +02:00
fltk.ferme_fenetre()
return "./maps/map1.txt"
2023-04-28 11:05:41 +02:00
2023-05-10 10:09:36 +02:00
def run_game():
2023-04-28 11:05:41 +02:00
"""
2023-05-10 10:09:36 +02:00
Running game
2023-04-28 11:05:41 +02:00
@params void
2023-05-10 10:09:36 +02:00
@return void
2023-04-28 11:05:41 +02:00
"""
2023-05-10 10:09:36 +02:00
pass
2023-04-14 11:25:38 +02:00
def main():
2023-05-10 10:09:36 +02:00
while True:
map_choice = selection_menu()
if not map_choice:
break
else:
print("chargement de {}".format(map_choice))
if maps.charger(map_choice, donjon, dragons, aventurier):
run_game()
else:
return 1
2023-04-14 11:25:38 +02:00
return 0
main()