Snake like : le serpent ne veut pas bouger

Fermé
Oyanel - 11 mai 2014 à 20:05
 Oyanel - 12 mai 2014 à 21:58
Bonjour,
je fais appelle à la communauté de comment ça marche car je n'arrive pas à comprendre pourquoi mon carré ne veut pas se déplacer, c'est le début de mon snake et il ne fonctionne pas du tout. :/ J'avais déjà présenter un snake sous une autre forme et j'ai donc refait le snake avec des listes mais ça ne semble pas fonctionner.
Merci pour votre aide
from tkinter import *
from random import *
from PIL import Image, ImageTk

#            ******************
#            *                *
#            *   Fonctions    *
#            *                *
#            ******************
# on creer une partie:
    
def newGame(): 
    global flag, pX, pY, p, flag2, flag4, score,carre1
    can1.delete(text1)
    can1.delete(img1)
    flag2=1
    flag4=1
    score=0
    pX = randrange(10, fen1.winfo_screenwidth()-150)
    pY = randrange(10, fen1.winfo_screenheight()-150)
    p=can1.create_oval(pX, pY, pX+10, pY+10,fill="green")#création d'une pomme à un endroit aléatoire
    if flag == 0:   #Si jeu n'est pas activé
        flag = 1      #Alors activation du programme
        bou2.config(state= DISABLED) #Désactiver (griser) le bouton démarrer
        Serpent_avance() #Activation de la fonction "serpent avance"
        
def Serpent_avance(): 
    "déplacement du snake" #Fonction qui permet le deplacement du snake
    global x, y, dx, dy, flag, flag2, p, pX, pY,score #Global: repertorie les variables utilisées dans la fonction du dessus
    if abs(snake[0]-pX) < 17 and abs(snake[1]-pY) < 17 : #Quand serpent passe sur la pomme,
        can1.create_oval(x, y, x+20, y+20, fill="black")
        can1.delete(p)# disparition
        pX = randrange(10, fen1.winfo_screenwidth()-150) #réapparition de la pomme
        pY = randrange(10, fen1.winfo_screenheight()-150)
        p=can1.create_oval(pX, pY, pX+10, pY+10,fill="green")
        score=score+10
        
    if snake[0] > fen1.winfo_screenwidth()-100: #Quand serpent arrive sur le mur coté droit,
        snake[0]=10
        snake[2]=30                             #Réapparait de l'autre coté        
    if snake[1] > fen1.winfo_screenheight()-5:  #IDEM mur du bas
        snake[1]=10
        snake[3]=30                             #Réapparait au mur du haut
    if snake[0] < 5:                            #Quand serpent arrive sur le mur coté gauche
        snake[0]=fen1.winfo_screenwidth()-100
        snake[2]=fen1.winfo_screenwidth()-120   #Réapparait mur coté droit
    if snake[1] < 5:                            #Quand serpent arrive sur le mur haut
        snake[1]=fen1.winfo_screenheight()-10   #Réapparait sur le mur bas
        snake[3]=fen1.winfo_screenheight()-30
           
    snake[0]=snake[0]+dx                        # faire avancer le serpent automatiquement
    snake[1]=snake[1]+dx
    snake[2]=snake[0]+20
    snake[3]=snake[1]+20  
    
    can1.coords(Serpent, snake[0], snake[11], snake[2], snake[3])    # coordonées du snake
    
    if flag >0:                                                     #Quand jeu activé
        fen1.after(50,Serpent_avance)                               #boucler, après 50 millisecondes (vitesse de repetition)

def depl_gauche(event):
    global flag, dx, dy
    if flag==1:
        dx, dy = -20, 0
        
def depl_droite(event):
    global flag, dx, dy
    if flag==1:
        dx, dy = 20, 0 
        
def depl_haut(event):
    global flag, dx, dy
    if flag==1:
        dx, dy = 0, -20
        
def depl_bas(event):
    global flag, dx, dy
    if flag==1:
        dx, dy = 0, 20

def pause():  #Pause
    global flag, pause, flag2, flag4, score, score1
    if flag4 ==1:
        if flag == 1 and flag2 == 1:
            pause=can1.create_text(fen1.winfo_screenwidth()/2-100,fen1.winfo_screenheight()/2-5,font=('Fixedsys',18),text="PAUSE")
            score1=can1.create_text(150,150,font=('Fixedsys',18),text="Score : "+str(score))
            can1.create_text(fen1.winfo_screenwidth(),fen1.winfo_screenheight(),font=('Fixedsys',18),text=print(score))
            flag=0
        elif flag==0 and flag2 == 1:
            flag=1
            can1.delete(pause)
            can1.delete(score1)
            Serpent_avance()
            
    

def fullscreen():
    fen1.overrideredirect(1)
    fen1.geometry("%dx%d+0+0" % (w, h)) 
    

#    *********************
#    *      Programme    *
#    *       Princal     *
#    *********************

#création de la fenêtre
fen1 = Tk()
fen1.title("Snake")

x, y = (fen1.winfo_screenheight()+250)/2, (fen1.winfo_screenwidth()-250)/2
dx, dy = 20, 0
flag =0
flag4=0                                                 #pour ne pas appuyer sur pause qi le jeu ne démarre pas

image_tk2= ImageTk.PhotoImage(Image.open("serpent.jpg"))

image_tk = ImageTk.PhotoImage(Image.open("image.jpg"))  #on la transforme pour tk

#on la met dans le canvas
can1 = Canvas(fen1,width=fen1.winfo_screenwidth()-100, height=fen1.winfo_screenheight())
can1.pack()
img  = can1.create_image(0,0, anchor = NW, image=image_tk)

can1.pack(side=LEFT, padx =10, pady =10)
snake=[x, y, x+20, y+20]
Serpent=[can1.create_rectangle(snake[0], snake[1], snake[2], snake[3], fill="yellow")]
img1  = can1.create_image(0,0, anchor = NW, image=image_tk2)
text1=can1.create_text(fen1.winfo_screenwidth()/2,fen1.winfo_screenheight()-400,font=('Fixedsys',18),text="appuyer sur Démarrer")

bou2 = Button(fen1, text='Démarrer', width =8, command = newGame)
bou2.pack()
bou3= Button(fen1, text='Pause',width= 8,command= pause)
bou3.pack()
bou4 = Button(fen1, text='Quitter', width= 8, command=fen1.destroy)
bou4.pack(side=BOTTOM)
bou5 = Button(fen1, text='Plein écran', width= 8, command=fullscreen)
bou5.pack()
# Quelques exemples de touches
fen1.bind("<Up>", depl_haut)#haut
fen1.bind("<Down>", depl_bas)#bas
fen1.bind("<Left>", depl_gauche)#gauche
fen1.bind("<Right>", depl_droite)#Droite
#lancement du gestionnaire d'évènement
fen1.mainloop()




A voir également:

1 réponse

désolé j'avais fait plusieurs gourdes pas malin genre global ou faute de frappe mais le carré ne bouge toujours pas :/
0

Discussions similaires