Probleme sur python

wolfnight28 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
_Ritchi_ Messages postés 21333 Date d'inscription   Statut Contributeur Dernière intervention   -



Bonjour a tous je suis un eleve de terminale S et je suis en option ISN et j ai pour bit de creer un jeux de mon choix sur python. J 'ai choisi un jeu simple : un tableau en mouvement sur un fond et un pistolet a clou le but est de clouer le tableau rien de plus simple. Pour l 'instant j ai commencer et j ai fait en sorte que le clic de la souris creer une image d un clou a l endroit cliqué sur un fichier python et sur un deuxieme j ai mis une image en mouvement. Maintenant je dois les relier pour en faire qu un fichier avec une image en mouvement et un clou qui apparait a l'endroit ou l'on clique. Le probleme est que, a la fin, si je met l'initialisation avant le fen1.mainloop l image ne bouge pas et lorsque j inverse les deux l 'image bouge mais le clou n apparait pas au clic. Comment faire en sorte de combiner ces deux options ? voici une capture d ecran de mon programme.

1 réponse

_Ritchi_ Messages postés 21333 Date d'inscription   Statut Contributeur Dernière intervention   6 104
 
Bonjour,

Voici ma proposition en Python3.6
Note: n'ayant pastes images, j'en ai mis d'autres: à toi de remettre les tiennes.

# -*- coding: utf-8 -*-

from tkinter import *

def initialisation():
    global photoL, imageL, personnage1,  photoH, imageH, personnage2, photoD,  imageD

    photoD = PhotoImage(file="MonDecor.gif")
    imageD = can1.create_image(406,305, image=photoD)
    photoH = PhotoImage(file="MonClou.gif")
    imageH = can1.create_image(50,50,anchor=CENTER, image=photoH)
    photoL = PhotoImage(file="MonTableau.gif")
    imageL = can1.create_image(60,50,anchor=CENTER, image=photoL)
    can1.pack()

    personnage1 = "Clou"
    personnage2 = "Tableau"

def depl_clou(x,y):
    print("depl_clou")
    can1.coords(imageH, x, y)


def config_clou():
    global personnage1
    print("config_clou")
    personnage1="Clou"

def clic(event):
    global personnage1
    print("clic")
    if personnage1 == "Clou":
        depl_clou(event.x, event.y)

def move():
    global x1, y1, dx, dy, flag
    print("move")

    if x1 > 210:
        x1, dx, dy = 210, 0, 15
    if y1 > 210:
        y1, dx, dy = 210, -15, 0
    if x1 < 10:
        x1, dx, dy = 10, 0, -15
    if y1 < 10:
        y1, dx, dy = 10, 15, 0

    x1, y1 = x1+dx, y1+dy
    can1.coords(imageL, x1, y1)
    if flag >0:
        print("flag>0")
        fen1.after(50,move)

def stop_it():
    global flag
    print("stop_it")
    flag=0

def start_it():
    global flag
    print("start_it")
    if flag == 0:
        flag=1
        move()

print("init")
x1, y1 = 10, 10
dx, dy = 15, 0
flag = 0

fen1 = Tk()
can1 = Canvas(fen1, bg='dark grey', height=610, width=812)
can1.pack(side=LEFT, padx=5, pady=5)
initialisation()

# oval1 = can1.create_image(20,50,anchor=CENTER,image=photoL)
bou1 = Button(fen1, text="Quitter", width=8, command=fen1.quit)
bou1.pack()
bou2 = Button(fen1, text="Démarrer", width=8, command=start_it)
bou2.pack()
bou3 = Button(fen1, text="Arrêter", width=8, command=stop_it)
bou3.pack()
can1.bind("<Button-1>", clic)


fen1.mainloop()


Qu'ai-je changé ?
J'ai déplacé la ligne "x1, y1 = x1+dx, y1+dy", supprimé ce qui concernait "oval1" car c'est en fait "imageL", déplacé "initialisation()", remplacé dans clic() "global personnage" par "global personnage1" mais je ne vois pas l'intérêt de ce global ni du test "if personnage1 == "Clou":", ...

Ritchi
0