Beispiel #1
0
def gestionClicGauche(clic):
    #Utilise l'objet évènement qui contient un clic, retourne l'objet de la barre d'édition séléctionné ou les coordonnées d'une case ou None
    x = tk.clic_x(clic)
    y = tk.clic_y(clic)

    if x < largeurFenetre - largeurEditeur:  # le clic est sur la carte
        return y // largeurCase, x // largeurCase

    else:  # le clic est sur la fenêtre d'édition
        # la position par défaut des objets avant d'appliqué le coefficient
        objet_x = largeurFenetre - largeurEditeur + largeurCase // 2
        objet_y = largeurCase * 1.5

        # détection de quel objet est touché par le clic
        if toucher(x, y, objet_x, objet_y, 0):
            return "mur"
        elif toucher(x, y, objet_x, objet_y, 1):
            return "cible"
        elif toucher(x, y, objet_x, objet_y, 2):
            return "joueur"
        elif toucher(x, y, objet_x, objet_y, 3):
            return "porte"
        elif toucher(x, y, objet_x, objet_y, 4):
            return "clef"
        elif toucher(x, y, objet_x, objet_y, 5):
            return "boite"
        else:
            return "vide"
def updateCursor(ev, canvas, block=None, onPressed=False):
    """
    Met à jour la position du curseur dans la matrice de l'éditeur de niveau.
    :param tuple ev: Evenement donné par upemtk
    :param string canvas: ID du canvas cible
    :param string block: type de bloc
    :param bool onPressed: condition vraie si le clic de la souris est resté enfoncé
    """
    evType=type_evenement(ev)
    # print(ev)
    # print(ui.objects["editorCanvas"]["selected"])
    if evType in ("Deplacement", "ClicGauche"):
        pos=[clic_x(ev), clic_y(ev)]
        multiSelection=ui.objects["editorCanvas"]["selected"] and len(ui.objects["editorCanvas"]["selected"])>1
        squaresMap=ui.objects[canvas]["squaresMap"]
        if ui.objects[canvas]["ax"] < pos[0] < ui.objects[canvas]["bx"]-1 and ui.objects[canvas]["ay"] < pos[1] < ui.objects[canvas]["by"]-1:
            
            x=int((pos[0]-ui.objects[canvas]["ax"])/ui.objects[canvas]["cellSize"])
            y=int((pos[1]-ui.objects[canvas]["ay"])/ui.objects[canvas]["cellSize"])
            if block:
                # print("inSquare")
                if not onPressed:
                    if multiSelection:
                        writeMultipleBlocks(canvas, squaresMap, block)
                        return
                    else:
                        ui.setObject(canvas, {"selected":[(x,y)]})
                else:
                    if ui.objects["editorCanvas"]["selected"]:
                        ui.setObject(canvas, {"selected":list(set((*ui.objects["editorCanvas"]["selected"],(x,y))))})
                    # ui.setObject(canvas, {"selected":[*ui.objects["editorCanvas"]["selected"],(x,y)]}) # Bad memory usage
            else:
                ui.setObject(canvas, {"selected":[ui.objects["blockCanvas"]["selected"][0], (x,y)]})
            if evType == "ClicGauche":
                if block:
                    squaresMap[y][x]=block
                else:
                    ui.setObject(canvas, {"selected":[(x,y),ui.objects["blockCanvas"]["selected"][1]]})
                render.update(squaresMap, canvas)
        else:
            
            if block:
                # print("notinSquare")
                if multiSelection:
                    writeMultipleBlocks(canvas, squaresMap, block)
                    return
                    # onPressed=False
                    # return onPressed
            else:
                ui.setObject(canvas, {"selected":[ui.objects["blockCanvas"]["selected"][0], None]})
Beispiel #3
0
def logic(ev):
    """
    Exécute toutes les actions liées à la logique de l'interface, principalement la vérification des clics de la souris sur les boutons.
    :param tuple ev: Evenement de upemtk
    """
    global focus, exclusiveLayer
    type_ev = type_evenement(ev)
    for r in logicRoutines.values():
        r[0](*r[1])
    if type_ev == "ClicGauche":
        pos = (clic_x(ev), clic_y(ev))
        layers = set(range(len(renderQueue) - 1, 0, -1))
        layers.add(0)
        if exclusiveLayer is None:
            for l in layers:
                for p in positions[l]:
                    if checkClick(p, pos):
                        return
        else:
            try:
                for p in positions[exclusiveLayer]:
                    if checkClick(p, pos):
                        return
            except KeyError as e:
                print("UI Warning: exclusive layer", e,
                      "is non existent, defaulting to None")
                exclusiveLayer = None
                return
        focus = None
    elif focus is not None and type_ev == "Touche":
        if focus["type"] == "textField":
            key = touche(ev)
            if len(key) == 1 and key.isalnum():
                setObject(focus["ID"],
                          {"text": objects[focus["ID"]]["text"] + key})
                #objects[focus["ID"]]["text"] += key
            elif key == "BackSpace":
                setObject(focus["ID"],
                          {"text": objects[focus["ID"]]["text"][:-1]})
                #objects[focus["ID"]]["text"] = objects[focus["ID"]]["text"][:-1]
            elif key == "space":
                setObject(focus["ID"],
                          {"text": objects[focus["ID"]]["text"] + " "})
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
Beispiel #5
0
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
Beispiel #6
0
def main():
    historique = {}

    zone_edit = (
        var["dimension_fenetre"],
        var["dimension_fenetre"],
    )

    coordonnee_souris_x = coordonnee_souris_y = 0
    liste_clic = []
    forme_active = ""

    boutons = {
        "C": ("cercle", 50, 655, "green", "black", 20, 1, 2, "Impact"),
        "R": ("rectangle", 75, 610, "green", "black", 20, 1, 2, "Impact"),
        "P": ("polygone", 152, 655, "green", "black", 20, 1, 2, "Impact"),
        "Y": ("cle", 160, 610, "#ff0080", "black", 20, 1, 2, "Impact"),
        "T": ("torche", 257, 655, "#ff0080", "black", 20, 1, 2, "Impact"),
        "suppr (backspace)": (
            "supprimer (dernier)",
            302,
            610,
            "red",
            "black",
            20,
            1,
            2,
            "Impact",
        ),
        "suppr (enter)": (
            "supprimer (nom)",
            402,
            655,
            "red",
            "black",
            20,
            1,
            2,
            "Impact",
        ),
        "sauvegarder":
        ("sauvegarder", 500, 610, "black", "black", 20, 1, 2, "Impact"),
        "quitter": ("quitter", 548, 655, "black", "black", 20, 1, 2, "Impact"),
    }

    while True:
        ev = upemtk.donne_evenement()
        type_ev = upemtk.type_evenement(ev)

        if type_ev == "Quitte":
            return -1

        if type_ev == "Touche":
            t = upemtk.touche(ev)
            t_upper = t.upper()

            if (t_upper in forme_possible and not forme_active
                    and t_upper not in {"T", "Y"}):
                forme_active = t_upper
            elif (t_upper in {"T", "Y"} and not forme_active and
                  not any(map(lambda x: t_upper in x, historique.values()))):
                forme_active = t_upper

            elif t == "BackSpace":
                if len(historique):
                    del historique[len(historique)]
                    affiche_historique(historique)

            elif t == "Return":
                nom_forme_a_suppr = fonction.my_input(
                    "nom de la forme\n    a supprimer", "str")
                for cle, valeur in historique.items():
                    if valeur and valeur[0] == nom_forme_a_suppr:
                        historique[cle] = []
                        affiche_historique(historique)
                        break

            elif t == "Escape":
                return 0

            elif t_upper == "S":
                res = verif_1_cle_1_torche(historique)
                if res:
                    fonction.my_input(res, "str")
                else:
                    sauvegarde_historique(historique)
                    return 0

        elif type_ev == "Deplacement":
            coordonnee_souris_x = upemtk.clic_x(ev)
            coordonnee_souris_y = upemtk.clic_y(ev)

        if type_ev == "ClicGauche":
            x, y = upemtk.clic_x(ev), upemtk.clic_y(ev)
            if (forme_active != ""
                    and (len(liste_clic) < forme_possible[forme_active][3])
                    and (x <= zone_edit[0] and y <= zone_edit[1])):
                liste_clic.append((x, y))

        elif (type_ev == "ClicDroit" and forme_active != ""
              and len(liste_clic) >= forme_possible[forme_active][2]):
            forme_possible[forme_active][0](
                historique, liste_clic
            )  # cree la forme dans l'historique a partir des clics
            forme_active = ""
            del liste_clic[:]
            affiche_historique(historique, len(historique))

        upemtk.efface_tout()
        upemtk.rectangle(
            0,
            0,
            zone_edit[0],
            zone_edit[1],
            remplissage="black",
        )

        # affiche les formes dans l'historique
        for elem in historique.values():
            if elem:
                forme_possible[elem[1]][1](*elem[2:])

        # affiche une croix sur les clics afin de conserver visuellement leur position
        for elem in liste_clic:
            affiche_croix(*elem, 5)

        # efface les traits sortant de la zone d'edit
        upemtk.rectangle(
            zone_edit[0],
            0,
            var["dimension_fenetre"],
            var["dimension_fenetre"] - var["dimension_fenetre"] // 6,
            couleur="white",
            remplissage="white",
        )
        upemtk.rectangle(
            0,
            zone_edit[1],
            var["dimension_fenetre"],
            var["dimension_fenetre"] + var["bandeau"],
            couleur="white",
            remplissage="white",
        )

        for cle, elem in boutons.items():

            pos = fonction.encadrement(*boutons[cle])
            if type_ev == "ClicGauche" and fonction.test_clic(
                (coordonnee_souris_x, coordonnee_souris_y), pos):
                if cle in forme_possible and cle not in {"T", "Y"}:
                    del liste_clic[:]
                    forme_active = cle
                elif cle in forme_possible and not any(
                        map(lambda x: cle in x, historique.values())):
                    del liste_clic[:]
                    forme_active = cle

                elif cle == "sauvegarder":
                    res = verif_1_cle_1_torche(historique)
                    if res:
                        fonction.my_input(res, "str")
                    else:
                        sauvegarde_historique(historique)
                        return 0
                elif cle == "quitter":
                    return 0

                elif cle == "suppr (backspace)":
                    if len(historique):
                        del historique[len(historique)]
                    affiche_historique(historique)
                elif cle == "suppr (enter)":
                    nom_forme_a_suppr = fonction.my_input(
                        "nom de la forme\n    a supprimer", "str")
                    for cle, valeur in historique.items():
                        if valeur and valeur[0] == nom_forme_a_suppr:
                            historique[cle] = []
                            affiche_historique(historique)
                            break

        # affiche la croix sur le curseur pour plus de precision du clic
        affiche_croix(coordonnee_souris_x, coordonnee_souris_y, 20)
        upemtk.mise_a_jour()

        # fait de la place dans les evenements car le surplus d'evenemement est très présent et casse tout
        # la lignes peut etre supprimé afin de bien apprécier le spectacle puis venir la remettre dans les secondes qui suivent ;)
        del upemtk.__canevas.eventQueue[:-5]

    return 0