JEU DU SERPENT PYTHON

tefclbg Messages postés 2 Date d'inscription samedi 20 mai 2017 Statut Membre Dernière intervention 21 mai 2017 - Modifié le 21 mai 2017 à 19:57
luckykamon Messages postés 28 Date d'inscription lundi 27 juillet 2015 Statut Membre Dernière intervention 5 juillet 2018 - 27 mai 2017 à 23:02
Bonjour, pouvez vous m'aidez a arreté la partie et afficher le score lorsque le serpent touche une des 4 murs svp. VOILA LE CODE



from Tkinter import *
from random import randrange

#Fonction la plus compliquée permettant le déplacement du serpent
def deplacement():
        global a,b,z,y,lu,lv,score,serpent,j,m
        c=len(serpent)
        c=c-1
        #Chaque carré reprend la coordonnée du précédent dans la liste (serpent)
        while c!=0 :
                lu[c]=lu[c-1]
                lv[c]=lv[c-1]
                c+=-1
        #On change les coordonées du premier carré
        lu[0] += a
        lv[0] += b
        c=0
        #On applique les nouvelles coordonnées aux carrés correspondant
        while c!=len(serpent):
                can.coords(serpent[c],lu[c],lv[c],lu[c]+10,lv[c]+10)
                c+=1
        c=1
        #Si les coordonnées du premier carré sont égales à celle d'un autre le jeu s'arrêtera
        while c!=len(serpent):
                if lu[c]==lu[0] and lv[c]==lv[0]:
                        j=1
                        score = 'Perdu  avec  ' + str(score*10)
                        scores.set(score)
                        break
                c+=1
        #Si le serpent est mord un coté il ressort de l'autre
        #La valeur 'd' sert à empecher un bug empechant la transfert du serpent de l'autre coté du canvevas
        d=1
        if lu[0]==200:
                lu[0],d=10,0
        if lu[0]==0 and d==1:
                lu[0]=200
        if lv[0]==200:
                lv[0],d=10,0
        if lv[0]==0 and d==1:
                lv[0]=200
        d=0
        #Si le carré de tête recoupe le cercle, le score augmente et un nouveau cercle apparait aléatoirement
        if z-7<=lu[0]<=z+7 and y-7<=lv[0]<=y+7:
                score+=1
                scores.set(str(score*10))
                bestiole()
        if j!=1 and m!=1:
                fen.after(100,deplacement)

#Cette fonction crée un cercle de coordonée multiple de 10 pour éviter que le cercle soit partiellement coupé par le serpent

def bestiole():
        global z,y,n,lu,lv,serpent,a,b
        z=randrange(2,18)
        y=randrange(2,18)
        z = z*10
        y = y*10
        can.coords(cercle,z,y,z+5,y+5)
        #On ajoute un carré hors du canevas (pour allèger le code) qui se rajoutera à la suite
        serpents = can.create_rectangle(300,300,310,310,fill='green')
        serpent.append(serpents)
        lu.append(lu[n]+12+a)
        lv.append(lv[n]+12+b)
        n+=1

#Ces quatres fonctions permettent le déplacement dans quatres directions du serpent
#Grace aux modifications successives des coordonées du premier carrée grave au valeur a et b
#La valeur s permet de ne pas accelerer la vitesse du serpent ou à modifier ca direction
#en appuyant successivement sur Haut/Bas/Gauche/Droite

def gauche(event):
        global a,b,s
        a=-10
        b=0
        if s==0:
                s=1
                deplacement()

def droite(event):
        global a,b,s
        a=10
        b=0
        if s==0:
                s=1
                deplacement()
        
def haut(event):
        global a,b,s
        a=0
        b=-10
        if s==0:
                s=1
                deplacement()

        
def bas(event):
        global a,b,s
        a=0
        b=10
        if s==0:
                s=1
                deplacement()

#Cette fonction permet d'arrêter le serpent
                
def pause(event):
        global j,a,b,m,enpause
        t=0
        if a==b:
                t=1
        if j!=1:
                #Affichage ou Effacage du texte 'PAUSE'
                #Et arrêt du serpent
                if m!=1:
                        m=1
                        can.coords(enpause,100,100)
                else:
                        m=0
                        can.coords(enpause,300,300)
                        if t!=1:
                                deplacement()

#Cette fonction réinitialise toutes les valeurs et recréée le serpent de base ainsi que le premier repas

def recommencer(event):
        global z,y,lu,lv,score,serpent,j,m,s,n,a,b,cercle
        if j!=1:
                print 'Le suicide est puni'
        can.delete(ALL)
        s=score=j=m=a=b=0
        z=y=50
        lu,lv,serpent = [100,112],[100,112],[]
        n=1
        tete = can.create_rectangle(100,100,110,110,fill='dark green')
        carre = can.create_rectangle(112,100,122,110,fill='green')
        cercle = can.create_oval(z,y,z+5,y+5,fill='red')
        serpent.append(tete)
        serpent.append(carre)
        scores.set('0')

#On définit les valeurs initiales

s=score=j=m=t=a=b=0
z=y=50
lu,lv,serpent = [100,112],[100,112],[]
n=1

print ' '*35 + 'Les fleches pour bouger'
print ' '*35 + 'P pour mettre/enlever la pause'
print ' '*35 + 'Entree pour recommencer, attention au suicide'

#On crée un canevas tout gris

fen = Tk()
can = Canvas(fen,width = 200, height = 200 , bg = 'gray')
can.grid(row=1,column=0,columnspan=3)

enpause=can.create_text(300,300,text="PAUSE")

#On crée la base du serpent ainsi que le premier repas

tete = can.create_rectangle(100,100,110,110,fill='dark green')
carre = can.create_rectangle(112,100,122,110,fill='green')
cercle = can.create_oval(z,y,z+5,y+5,fill='red')

serpent.append(tete)
serpent.append(carre)

#On crée les commandes au clavier

can.bind_all('<Up>', haut)
can.bind_all('<Down>', bas)
can.bind_all('<Left>', gauche)
can.bind_all('<Right>', droite)
can.bind_all('<Return>',recommencer)
can.bind_all('p',pause)

#L'affichage du score

Label(fen, text='Score:  ').grid(row=0,column=0)

scores = StringVar()
Score = Entry(fen, textvariable=scores)
Score.grid(row=0,column=1)
scores.set('0')

fen.mainloop()


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

luckykamon Messages postés 28 Date d'inscription lundi 27 juillet 2015 Statut Membre Dernière intervention 5 juillet 2018
Modifié le 27 mai 2017 à 23:03
Bonjour,
Voici une technique que j'emploierais si c'était mon programme:
Tu crées une autre définition:
def score(score):
print (score)
Et tu place score(score) à la ligne 29 de ton code à la place du break.
Utilisant la bibliothèque pygame et non pas Tkinter:
J'aurais comme définition:
def score(score):
import pygame # installe au préalable cette bibliothèque
from pygame.locals import *
pygame.init()
window = pygame.display.set_mode((648, 604), RESIZABLE)
window.blit(pygame.image.load("white.png").convert(), (0, 0)) #tu ouvres une image nommée "white.png" dans le même dossier que ton programme python
pygame.display.flip() #permet d'afficher les modifications faites sur la fenêtre pygame
window.blit(pygame.font.Font(None, 150).render(score,1,(0,0,0)), (160,220)) #Les trois 0 correspond a l'intensité du rouge vert et bleu et (160,220) les coordonnées
pygame.display.flip()
0
Rejoignez-nous