def affichageV2(carte, nbdiamand, diamand, taille, x_, y_, nbrcase): """ Affiche la carte dans le menu des map :param list carte: liste 2D contenant le jeu :param int nb_diamand: :param int diamand: :param int taille: taille des cases :param int x_: position de l'apercu de la map :param int y_ position de l'apercu de la map :param int nbrcase: nombre de case a afficher sur l'apercu """ esthetique.fond("black") for y in range(len(carte) - 1, -1, -1): # y = ligne for x in range(len(carte[y]) - 1, -1, -1): # x = colonne dico[carte[y][x]]( (x + (var["nb_cases"] // 2 - var["pos_x"])) + x_, (y + (var["nb_cases"] // 2 - var["pos_y"])) + y_, taille, nbdiamand, diamand, "goldenrod3", ) # centre le perso upemtk.rectangle( x_ * taille + nbrcase * taille + 2 * taille, y_ * taille, var["dimension_fenetre"], var["dimension_fenetre"] + 100, remplissage="black", ) upemtk.rectangle( x_ * taille, y_ * taille + nbrcase * taille + 2 * taille, var["dimension_fenetre"], var["dimension_fenetre"] + 100, remplissage="black", ) upemtk.rectangle( x_ * taille, y_ * taille, x_ * taille + 2 * taille, var["dimension_fenetre"] + 100, remplissage="black", ) upemtk.rectangle( x_ * taille, y_ * taille, var["dimension_fenetre"], y_ * taille + 3 * taille, remplissage="black", ) upemtk.rectangle( x_ * taille + 2 * taille, y_ * taille + 3 * taille, x_ * taille + nbrcase * taille + 2 * taille + 5, y_ * taille + nbrcase * taille + 2 * taille + 5, couleur="gold", epaisseur=10, )
def affiche_map(carte, **kwargs): """ affiche la map en cours de creation :param list carte: liste 2D contenant le jeu """ if "nbdiamand" not in kwargs: kwargs["nbdiamand"], kwargs["diamand"] = 0, 0 esthetique.fond("white") upemtk.rectangle( 0, 0, var["w_map"] * var["taille_case"], var["h_map"] * var["taille_case"], remplissage="black", ) for j in range(var["h_map"]): for i in range(var["w_map"]): fonction.dico[carte[j][i]](i, j, var["taille_case"], kwargs["nbdiamand"], kwargs["diamand"], "goldenrod3")
def win(nbdiamand, diamand, tempsrestant, cartes, score, nommap): """ Regarde si l'utilisateur gagne si oui, met l'image de victoire et retourne True :param int nb_diamand: nombre de diamant deja recupere en jeu :param int diamand: nombre de diamant requis avant de pouvoir gagner :param int tempsrestant: temps restant de la partie en cours :param cartes: :param str score: score de la partie :param str nommap: nom de la map en cours de jeu :return: bool """ MS = 0 if (var["pos_x"] == var["pos_sortie_x"] and var["pos_y"] == var["pos_sortie_y"] and nbdiamand >= diamand): suivant = 0 upemtk.efface_tout() while suivant == 0: suivant, score = esthetique.menu_score(nbdiamand, tempsrestant, suivant, score) upemtk.efface_tout() esthetique.fond("cyan") upemtk.texte( var["dimension_fenetre"] // 2, var["dimension_fenetre"] // 3, "Victoire !", couleur="black", ancrage="center", taille=75, ) esthetique.personnage_victorieux() esthetique.coffre() esthetique.affiche_score_victoire(score) if MS == 0: test_meilleurscore(nommap, score) MS = 1 if cartes == 6: del var["carte"] return True return False
def loose(carte, tempsrestant): """ test si joueur s'est pris une pierre si oui met l'image de défaite et retourne True :param list carte: liste 2D contenant le jeu :param int tempsrestant: temps restant de la partie en cours :return: bool """ if carte[var["pos_y"] - 1][var["pos_x"]] in ["K", "C" ] or tempsrestant <= 0: upemtk.efface_tout() esthetique.fond("black") esthetique.personnage_defaitiste() upemtk.texte( var["dimension_fenetre"] // 2, var["dimension_fenetre"] // 4, "DÉFAITE !", couleur="red", ancrage="center", taille=75, ) return True return False
def main(): tools = ["G", "P", "W", "D", "R", "E", "L", "F", "K", "C"] # block disponible dans la barre d'outil esthetique.fond("black") var["w_map"] = fonction.my_input("Nombre de colonnes:", "int") var["h_map"] = fonction.my_input("Nombre de lignes:", "int") var["taille_case"] = int( var["dimension_fenetre"] / max([var["w_map"], var["h_map"]]) ) # fait en sorte que la map reste sur l'ecran carte = [["." for i in range(var["w_map"])] for i in range(var["h_map"])] element = "." while True: upemtk.efface_tout() affiche_map(carte) affiche_tools(tools) quitter = fonction.encadrement( "Quitter", var["dimension_fenetre"] * 2 / 3, 2, "White", "white", 15, 1, 1, "Impact", ) sauvegarder = fonction.encadrement( "Sauvegarder", var["dimension_fenetre"] / 3, 2, "White", "white", 15, 1, 1, "Impact", ) upemtk.mise_a_jour() ev = upemtk.donne_evenement() type_ev = upemtk.type_evenement(ev) if type_ev == "Quitte": return -1 if type_ev == "ClicGauche": x_, y_ = (upemtk.clic_x(ev), upemtk.clic_y(ev)) if fonction.test_clic((x_, y_), quitter): return 0 if fonction.test_clic((x_, y_), sauvegarder): save(carte) else: x = x_ // var["taille_case"] y = y_ // var["taille_case"] if x < var["w_map"] and y < var["h_map"]: carte[y][x] = element elif y_ // var["bandeau"] == 6: element = tools[int(x_ // (var["bandeau"] * 6/len(tools)))] elif type_ev == "Touche": t = upemtk.touche(ev) if t.upper() in fonction.dico: element = t.upper() elif t.lower() == "s": save(carte) elif t.lower() == "t": # touche pour les test if not test_1_entree_1_sortie(carte): test_map(carte, 150, 0) # remet les bonnes tailles var["w_map"] = len(carte[0]) var["h_map"] = len(carte) var["taille_case"] = int( var["dimension_fenetre"] / max([var["w_map"], var["h_map"]]) ) # fait en sorte que la map reste sur l'ecran var["porte"] = 1 elif t == "Escape": break elif type_ev == "ClicDroit": if upemtk.clic_y(ev) // var["taille_case"] < len(carte): carte[upemtk.clic_y(ev) // var["taille_case"]][ upemtk.clic_x(ev) // var["taille_case"] ] = "." return 0
def affichage(carte, nbdiamand, diamand, tempslumiere): """ Affiche la carte :param list carte: liste 2D contenant le jeu :param int nb_diamand: nombre de diamant deja recupere en jeu :param int diamand: nombre de diamant requis avant de pouvoir gagner :param int tempslumiere: temps restant de lumiere """ esthetique.fond("black") if time() - tempslumiere < 0: esthetique.lumiere(0) else: esthetique.lumiere(time() - tempslumiere) if var["porte"] == 0: esthetique.lumiere_escalier() carte[2][0] = "F" for y in range(len(carte) - 1, -1, -1): # y = ligne for x in range(len(carte[y]) - 1, -1, -1): # x = colonne if carte[y][x] == "R" and var["personnage"]: if var["personnage"]: for elem in var["forme_personnage"].values(): copy_elem = deepcopy(elem) if elem[1] == "R": copy_elem[2] += var["dimension_fenetre"] // 2 copy_elem[4] += var["dimension_fenetre"] // 2 copy_elem[3] += var["dimension_fenetre"] // 2 copy_elem[5] += var["dimension_fenetre"] // 2 elif elem[1] == "C": copy_elem[2] += var["dimension_fenetre"] // 2 copy_elem[3] += var["dimension_fenetre"] // 2 elif copy_elem[1] == "P": for i in range(len(copy_elem[2])): copy_elem[2][i] = ( copy_elem[2][i][0] + var["dimension_fenetre"] // 2, copy_elem[2][i][1] + var["dimension_fenetre"] // 2, ) elif copy_elem[1] in {"T", "Y"}: copy_elem[2] += var["dimension_fenetre"] // 2 copy_elem[3] += var["dimension_fenetre"] // 2 if copy_elem[1] not in {"T", "Y"}: editeur_personnage.forme_possible[copy_elem[1]][1]( *copy_elem[2:]) elif copy_elem[1] == "T": editeur_personnage.forme_possible[copy_elem[1]][1]( *copy_elem[2:-1], var["taille_case"]) elif (copy_elem[1] == "Y" and nbdiamand >= diamand and var["porte"] == 1): editeur_personnage.forme_possible[copy_elem[1]][1]( *copy_elem[2:-1], var["taille_case"]) else: dico[carte[y][x]]( x + (var["nb_cases"] // 2 - var["pos_x"]), y + (var["nb_cases"] // 2 - var["pos_y"]), var["taille_case"], nbdiamand, diamand, "goldenrod3", ) # centre le perso if not var["lumiere"]: if 400 + (time() - tempslumiere) * 5 < 350: esthetique.noir_lumiere(350) else: esthetique.noir_lumiere(400 + (time() - tempslumiere) * 5)
def menu_echap(temps, tempslumiere): """ affiche un menu si jamais l'utilisateur à appuyer sur echap et renvoie un des différents choix disponible (retry, continue, sauvegarder, quitter le jeu) :param int temps: temps du jeu en debut de menu afin de le conserver :param int tempslumiere: temps de lumiere restant :return: code de retour, duree de la partie, temps de lumiere """ d = time() while True: esthetique.fond("black") encadrement( "MENU", var["dimension_fenetre"] // 2, 30, "White", "black", 50, 1, 1, "Impact", ) continuer = encadrement( "CONTINUER", var["dimension_fenetre"] // 2, var["dimension_fenetre"] // 5, "White", "white", 36, 1, 5, "Impact", ) sauvegarder = encadrement( "SAUVEGARDER", var["dimension_fenetre"] // 2, 2 * var["dimension_fenetre"] // 5, "White", "white", 36, 1, 5, "Impact", ) recommencer = encadrement( "RECOMMENCER", var["dimension_fenetre"] // 2, 3 * var["dimension_fenetre"] // 5, "White", "white", 36, 1, 5, "Impact", ) quitter = encadrement( "RETOURNER AU MENU", var["dimension_fenetre"] // 2, 4 * var["dimension_fenetre"] // 5, "White", "white", 36, 1, 5, "Impact", ) upemtk.mise_a_jour() ev = upemtk.donne_evenement() type_ev = upemtk.type_evenement(ev) if type_ev == "Quitte": return -1, temps + time() - d, tempslumiere + time() - d if type_ev == "Touche": t = upemtk.touche(ev) if t == "Escape": return 5, temps + time() - d, tempslumiere + time() - d if type_ev == "ClicGauche": coords = [upemtk.clic_x(ev), upemtk.clic_y(ev)] if test_clic(coords, continuer): return 5, temps + time() - d, tempslumiere + time() - d if test_clic(coords, sauvegarder): return 6, temps + time() - d, tempslumiere + time() - d if test_clic(coords, recommencer): return 9, temps + time() - d, tempslumiere + time() - d if test_clic(coords, quitter): return 7, temps + time() - d, tempslumiere + time() - d
def menu(d, temps): esthetique.fond("black") if time() - d >= 1: temps += 0.1 d = time() if temps < 4: esthetique.rockford(1 + temps, 6, 100, 0, 1, "black") esthetique.diamand(5.5, 6, 100, 0, 1, "black") if temps >= 4 and temps < 15.4 / 3: esthetique.pierre_eboulement(5, 2 + (temps - 4) * 3, 100) esthetique.rockford(5, 6, 100, 1, 1, "black") if temps >= 15.4 / 3: esthetique.pierre_eboulement(5, 5.4, 100) esthetique.rockford_dead(5, 6, 100, 1, 1, "black") if temps >= 6: temps = 0 fonction.encadrement( "BOULDER DASH", var["dimension_fenetre"] // 2, 30, "White", "black", 50, 1, 1, "Impact", ) MAP = fonction.encadrement( "SELECTION MAP", var["dimension_fenetre"] // 2, var["dimension_fenetre"] // 5, "White", "white", 36, 1, 5, "Impact", ) Sauvegarde_ = fonction.encadrement( "DERNIERE SAUVEGARDE", var["dimension_fenetre"] // 2, 2 * var["dimension_fenetre"] // 5, "White", "white", 36, 1, 5, "Impact", ) EDIT_MAP = fonction.encadrement( "EDITEUR DE MAP", var["dimension_fenetre"] // 2, 3 * var["dimension_fenetre"] // 5, "White", "white", 36, 1, 5, "Impact", ) EDIT_PERSO = fonction.encadrement( "EDITEUR DE PERSONNAGE", var["dimension_fenetre"] // 2, 4 * var["dimension_fenetre"] // 5, "White", "white", 36, 1, 5, "Impact", ) ev = donne_evenement() type_ev = type_evenement(ev) if type_ev == "ClicGauche": coords = [clic_x(ev), clic_y(ev)] if fonction.test_clic(coords, MAP): return 1, temps if fonction.test_clic(coords, Sauvegarde_): return 2, temps if fonction.test_clic(coords, EDIT_MAP): return 3, temps if fonction.test_clic(coords, EDIT_PERSO): return 4, temps elif type_ev == "Quitte": return -1, temps mise_a_jour() return 0, temps
def menu_map(d): numcarte = 0 choisis_carte = 0 nombre_total = len(os.listdir("map")) liste_map = os.listdir("map") print(list(map(lambda x: x[:-4], liste_map))) while choisis_carte == 0: efface_tout() if numcarte == nombre_total: esthetique.fond("black") esthetique.point_dinterogation() elif numcarte == nombre_total + 1: esthetique.fond("black") fonction.encadrement( "RECHERCHE", var["dimension_fenetre"] // 2, var["dimension_fenetre"] // 2, "White", "White", 48, 5, 5, "Impact", ) else: cartes = liste_map[numcarte] ( cartes1, inutile, inutile1, var["score1"], var["score2"], var["score3"], score, nommap, tempslumiere, ) = fonction.creer_map(cartes) fonction.initialiser_partie(cartes1) fonction.affichageV2(cartes1, 0, 1, 50, 0, -2, 8) esthetique.affiche_score( [var["score1"], var["score2"], var["score3"]]) fonction.encadrement( liste_map[numcarte], var["dimension_fenetre"] // 2, 5, "White", "black", 24, 1, 1, "Impact", ) suivant_menu = esthetique.fleche_(11, 5, 50, 1) precedent = esthetique.fleche_(1, 5, 50, -1) choix = fonction.encadrement( "SUIVANT", 4 * var["dimension_fenetre"] // 5, var["dimension_fenetre"] + 30, "red", "red", 24, 5, 5, "Impact", ) retour = fonction.encadrement( "Retour au Menu", var["dimension_fenetre"] // 5, var["dimension_fenetre"] + 30, "red", "red", 24, 5, 5, "Impact", ) mise_a_jour() ev = donne_evenement() if type_evenement(ev) == "Quitte": return -1 if type_evenement(ev) == "ClicGauche": coords = [clic_x(ev), clic_y(ev)] if fonction.test_suivant_menu(coords, suivant_menu): numcarte += 1 numcarte = numcarte % (nombre_total + 2) if fonction.test_precedent(coords, precedent): numcarte -= 1 numcarte = numcarte % (nombre_total + 2) if fonction.test_clic(coords, choix): if numcarte == nombre_total: return 6 elif numcarte == nombre_total + 1: nom = fonction.test_ouverture_custom_map() if nom: return nom else: return cartes if fonction.test_clic(coords, retour): return 0