148 lines
4.1 KiB
Python
Executable File
148 lines
4.1 KiB
Python
Executable File
#!/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)
|
||
#
|
||
# Doc FLTK : https://antoinemeyer.frama.io/fltk/
|
||
import random, time, fltk, os
|
||
import maps
|
||
import game
|
||
|
||
## VARIABLES DE CONFIGURATION
|
||
TAILLE_DONJON = 6
|
||
LARGEUR_FENETRE = 800
|
||
HAUTEUR_FENETRE = 400
|
||
|
||
## Variables globales
|
||
|
||
donjon = [] # liste de salles (N,E,S,O)
|
||
dragons = [] # liste de dragons
|
||
N = 0
|
||
E = 1
|
||
S = 2
|
||
O = 3
|
||
|
||
aventurier = {
|
||
'position' : (0,0),
|
||
'niveau' : 1,
|
||
'vivant': True
|
||
}
|
||
|
||
## Fonctions
|
||
def selection_menu():
|
||
"""
|
||
Home selection menu
|
||
@params void
|
||
@return path, chemin d'accès à un fichier de map
|
||
"""
|
||
|
||
list_maps = os.listdir("maps")
|
||
|
||
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')
|
||
else:
|
||
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()
|
||
|
||
if "Quitte" in fltk.type_ev(event):
|
||
fltk.ferme_fenetre()
|
||
return None
|
||
|
||
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
|
||
|
||
fltk.ferme_fenetre()
|
||
return "./maps/" + list_maps[x_n+y_n*4]
|
||
|
||
fltk.ferme_fenetre()
|
||
return "./maps/map1.txt"
|
||
|
||
def run_game():
|
||
"""
|
||
Running game
|
||
@params void
|
||
@return void
|
||
"""
|
||
pass
|
||
|
||
def main():
|
||
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
|
||
|
||
return 0
|
||
|
||
main()
|