pacman

Exemple de pacman n°1


_images/programmefonctionnel05.PNG
#1405 deplacement balle.py from tkinter import * from math import* from fenetre import* def avance(balle,x,y,parametres,dx,dy,largeur,hauteur): ""fait déplacer la balle horizontalement ou verticalement"" avancer=0 rayon=parametres[6] x1,y1=parametres[0],parametres[1] x2,y2=parametres[2],parametres[3] x,y=x+dx,y+dy if x+rayon+dx > largeur: avancer=1# arret à la largeur if x<x1 : y= y if x==x1:# deuxième point vertical haut dx,dy=0,-5 if y==y1:dx,dy=5,0 if x>x1 and x<x2:y=y1# horizontal vers troisième point if x==x2:# quatrième point point vertical bas dx,dy=0,5 if y==y2:dx,dy=5,0# cinquième point if x>x2:y=y2# horizontal can.coords(balle,x-rayon,y-rayon,x+rayon,y+rayon) if avancer ==0: fenetre.after(20,lambda:avance(balle,x,y,parametres,dx,dy,largeur,hauteur)) def lancer_balle(x,y,parametres,dx,dy,largeur,hauteur,couleur): ""création de la balle et lancement "" rayon=parametres[6] if x<500: balle=can.create_oval(x,y,x+rayon,y+rayon,fill=couleur) avance(balle,x,y,parametres,dx,dy,largeur,hauteur) def creer_fenetre(fenetre,taille,titre,couleur): #construit la fenêtre fenetre.geometry(taille) fenetre.title(titre) fenetre.configure(bg=couleur) fenetre.resizable(height=False,width=False) #fenetre.iconbitmap(icone) return fenetre # -------------programme principal --------------------------# titre="Déplacement Balle" largeur,hauteur=1000,500 taille=str(largeur)+'x'+str(hauteur+80) couleur='light blue' #------------------------------------------------------------# fenetre = Tk() fenetre=creer_fenetre(fenetre,taille,titre,couleur) couleur='red' x,y,x1,y1,x2,y2,dx,dy,rayon=0,300,270,170,530,300,5,0,30 parametres=[x1,y1,x2,y2,dx,dy,rayon] can=Canvas(fenetre,width=largeur,height=hauteur,bg='ivory') can.grid(row=0,column=0,columnspan=2) mur=can.create_rectangle(300,200,500,330,width=5,fill='green',outline='black') sol=can.create_rectangle(0,330,largeur,330,fill='green',width=5) b=Button(fenetre,text='Balle rouge',font='verdana 12 bold',fg='red') b.config(command=lambda:lancer_balle(x,y,parametres,dx,dy,largeur,hauteur,couleur) ) b.grid(row=1,column=0) fenetre.mainloop()
Exemple de pacman n°2

Exemple de pacman

animation pacman.py

_images/programmefonctionnel06.PNG
from random import * from tkinter import * from math import * #import os #bibliothèque pour le travail sur les dossier #from PIL.Image import * #from PIL import Image def remplir(tableau,liste,ligne,colonne): #remplissage du tableau par une liste for ln in range(0,ligne): for cn in range(0,colonne): tableau[ln][cn]=liste[colonne*ln+cn] return tableau def melange(liste,numimage,nombre): " remplissage aléatoire d'une liste de larg0 nombres entiers" for i in range(0,numimage):liste[i]=2 k,compt=0,0 while k<numimage-1: remelange=False numero=randrange(0,numimage) for j in range(0,numimage): if numero==liste[j] :remelange=True if remelange==False: liste[k]=numero if numero%nombre==0: compt=compt+1 k=k+1 return liste,compt def listetableau(liste,tableau,ligne,colonne): "fabrication d'une liste avec un tableau lignes colonnes" #remplissage d'une liste for ln in range(0,ligne): for cn in range(0,colonne): liste[colonne*ln+cn]=tableau[ln][cn] return liste def creerfenetre(titre ,taille): "modifie une fenêtre" fenetre.title(titre) fenetre.geometry(taille) return fenetre def Tableau(ligne,colonne): "fabrication d'un tableau lignes colonnes" #fabrication du tableau tableau=ligne*[0] for ln in range(ligne):tableau[ln]=colonne*[0] return tableau def creeritem(tim): "creation d'un item " p1=PhotoImage(file=tim+'.png') return p1 def creeritems(): items=larg2*[''] for i in range(larg2): tim='items/i'+str(i+1) items[i]=creeritem(tim) return items def creerimage(tim): "creation d'un item " p1=PhotoImage(file='imgpac/'+tim+'.png') return p1 def creerimages(numimage): images=numimage*[''] for i in range(numimage): tim=str(i+1) images[i]=creerimage(tim) return images def avancer(b1,b2,fenetre,can,images,tableau,tableau2,listetemp,ligne,colonne,b4,larg,compteur,xc,yc): global tableau3 x5,y5=cherche5(tableau3,ligne,colonne) cn,ln=x5+b1,y5+b2 largeur,hauteur=colonne*larg,ligne*larg if cn<0 or cn==colonne: b1=-b1 ln=y5+b1 if ln==ligne or ln<0: b2=-b2 cn=x5+b2 if (ln>=0 and ln<ligne) and (cn>=0 and cn<colonne): if tableau3[ln][cn]%4!=0: can.create_rectangle((cn)*larg,(ln)*larg,(cn+1)*larg,(ln+1)*larg,fill='light blue',outline='light blue') can.create_oval((cn)*larg+3,(ln)*larg+3,(cn+1)*larg-3,(ln+1)*larg-3,fill='red') can.create_rectangle(x5*larg,y5*larg,(x5+1)*larg,(y5+1)*larg,fill='light blue',outline='light blue') x1,y1=cn,ln for i in range(20): xt,yt=xc[i],yc[i] xc[i],yc[i]=x1,y1 x1,y1=xt,yt if tableau[ln][cn]%7==0: tableau3[ln][cn]=1 tableau2[ln][cn]=1 listetemp=listetableau(listetemp,tableau2,ligne,colonne) for i in range(nombre): if listetemp[i]==1: compteur=int(compteur+1) b4.configure(text=str(compteur)) temp=tableau[ln][cn] tableau3[ln][cn]=4 tableau3[y5][x5]=temp if compteur>0: if compteur<10: nt=compteur fin=nt+1 else: nt=9 fin=10 if compteur==1: can.create_rectangle(xc[1]*larg,yc[1]*larg,(xc[1]+1)*larg,(yc[1]+1)*larg,fill='gold',outline='light green') can.create_text(xc[1]*larg+larg/2,yc[1]*larg+larg/2,text="1",fill='red',font="verdana 8 bold") can.create_rectangle(xc[2]*larg,yc[2]*larg,(xc[2]+1)*larg,(yc[2]+1)*larg,fill='light blue',outline='light blue') if compteur>1: for i in range(1,nt+2): x1,y1=xc[i],yc[i] if i<nt: can.create_rectangle(x1*larg,y1*larg,(x1+1)*larg,(y1+1)*larg,fill='light green',outline='light green') can.create_text(x1*larg+larg/2,y1*larg+larg/2,text=str(i),fill='red',font="verdana 8 bold") if i==nt: can.create_rectangle(x1*larg,y1*larg,(x1+1)*larg,(y1+1)*larg,fill='gold',outline='light green') can.create_text(x1*larg+larg/2,y1*larg+larg/2,text=str(compteur),fill='red',font="verdana 8 bold") x1,y1=xc[fin],yc[fin] tableau3[y1][x1]=1 can.create_rectangle((x1)*larg,(y1)*larg,(x1+1)*larg,(y1+1)*larg,fill='light blue',outline='light blue') tableau3[ln][cn]=4 tableau=tableau3 def touche(event,fenetre,can,images,tableau,tableau1,listetemp,ligne,colonne,b4,larg,compteur,xc,yc): code=event.keycode if code==38: # Up avancer(0,-1,fenetre,can,images,tableau,tableau1,listetemp,ligne,colonne,b4,larg,compteur,xc,yc) elif code==40: # Down avancer(0,1,fenetre,can,images,tableau,tableau1,listetemp,ligne,colonne,b4,larg,compteur,xc,yc) elif code==37: #Left avancer(-1,0,fenetre,can,images,tableau,tableau1,listetemp,ligne,colonne,b4,larg,compteur,xc,yc) elif code==39: #Right avancer(1,0,fenetre,can,images,tableau,tableau1,listetemp,ligne,colonne,b4,larg,compteur,xc,yc) def deplacer(fenetre,images,tableau,tableau1,listetemp,liste,ligne,colonne,b5,larg): global tableau3 tableau=tableau3 x5,y5=cherche6(tableau,ligne,colonne) compteur1=0 nombre=ligne*colonne lr=0 if x5==0: cr=randrange(0,2) elif x5==colonne-1: cr=randrange(0,2)-1 elif x5>0 and x5< colonne-1: cr=randrange(0,3)-1 if abs(cr)==0: if y5==0: lr=randrange(0,2) elif y5>0 and y5< ligne-1: lr=randrange(0,3)-1 elif y5==ligne-1: lr=-1*randrange(0,2)-1 ln,cn=y5+lr,x5+cr if tableau[ln][cn]%7==0 and tableau[ln][cn]%4!=0 : if tableau1[ln][cn]==0: tableau1[ln][cn]=1 listetemp=listetableau(listetemp,tableau1,ligne,colonne) for i in range(nombre): if listetemp[i]==1: compteur1=int(compteur1+1) b5.configure(text=str(compteur1)) regarder(fenetre,images,ln,cn,x5,y5,tableau,larg,compteur1) if liste[0]==0: can.create_rectangle(cn*larg,ln*larg,cn*larg+larg,ln*larg+larg,fill="light blue",outline="light blue") if liste[0]==1: fenetre.after(200,lambda:deplacer(fenetre,images,tableau,tableau1,listetemp,liste,ligne,colonne,b5,larg)) def regarder(fenetre,images,ln,cn,x5,y5,tableau,larg,compteur1): global tableau3 if tableau[ln][cn]%4!=0 : if x5>=cn:pacmang(can,ln,cn,larg) else:pacman(can,ln,cn,larg) if x5!=cn or y5!=ln: can.create_rectangle(x5*larg,y5*larg,x5*larg+larg,y5*larg+larg,fill="light blue",outline="light blue") tableau[ln][cn]=19 tableau[y5][x5]=1 tableau[ln][cn]=19 tableau3=tableau def pacman(can,ln,cn,larg): can.create_oval(cn*larg+3,ln*larg+3,cn*larg+larg-3,ln*larg+larg-3,fill='light blue',outline='light blue') can.create_arc(cn*larg+3,ln*larg+3,cn*larg+larg-3,ln*larg+larg-3,fill="yellow",outline="black",start=25,extent=305) can.create_oval(larg*cn+larg/2,larg*ln+larg/3,larg*cn+larg/2+3,larg*ln+larg/3-3,fill="black",outline="black") def pacmang(can,ln,cn,larg): can.create_oval(cn*larg+3,ln*larg+3,cn*larg+larg-3,ln*larg+larg-3,fill='light blue',outline='light blue') can.create_arc(cn*larg+3,ln*larg+3,cn*larg+larg-3,ln*larg+larg-3,fill="yellow",outline="black",start=205,extent=305) can.create_oval(larg*cn+larg/2,larg*ln+larg/3,larg*cn+larg/2+3,larg*ln+larg/3-3,fill="black",outline="black") def creerlabel(fenetre,can,images,tim): "creation d'un item " p1=Label(can,image=images[tim]) return p1 def creerlabels(fenetre,can,numimage,images): labels=numimage*[''] for i in range(numimage): tim=i labels[i]=creerlabel(fenetre,can,images,tim) return labels def cherche5(tableau,ligne,colonne): "recherche l'emplacement de la case qui bouge" for ln in range(0,ligne): for cn in range(0,colonne): if tableau[ln][cn]==4: x,y=cn,ln return x,y def cherche6(tableau,ligne,colonne): "recherche l'emplacement de la case qui bouge" for ln in range(0,ligne): for cn in range(0,colonne): if tableau[ln][cn]==19: x,y=cn,ln return x,y def nettoie_fenetre(fenetre,can,liste_widgets): can.delete(ALL) for w in liste_widgets:w.destroy() return fenetre,can def jouer(fenetre,can,ligne,colonne,listen,images,compteur,liste,nombre,larg,liste_widgets): global tableau3 num=0 listetemp=nombre*[0] fenetre,can=nettoie_fenetre(fenetre,can,liste_widgets) can.grid(row=0,column=0,rowspan=ligne,columnspan=colonne) listen,compt=melange(listen,nombre,6) tableau1=Tableau(ligne,colonne) tableau1=remplir(tableau1,listetemp,ligne,colonne) tableau2=Tableau(ligne,colonne) tableau2=remplir(tableau2,listetemp,ligne,colonne) tableau3=Tableau(ligne,colonne) tableau3=remplir(tableau3,listen,ligne,colonne) tableau=Tableau(ligne,colonne) tableau=remplir(tableau,listen,ligne,colonne) b2=Label(fenetre,text="PACMAN se déplace\n tout seul\net mange les oeufs",bg="light blue",font="verdana 10 bold") b2.grid(row=1,column=colonne+1,columnspan=2) liste_widgets.append(b2) b3=Label(fenetre,text="oeufs mangés =",bg='light blue',font="verdana 10 bold") b3.grid(row=2,column=colonne+1) liste_widgets.append(b3) b4=Label(fenetre,text="0",bg='light blue',font="verdana 10 bold") liste_widgets.append(b4) b4.grid(row=2,column=colonne+2) b36=Label(fenetre,text="oeufs mangés\npacman =",bg='light blue',font="verdana 10 bold") b36.grid(row=4,column=colonne+1) liste_widgets.append(b3) b5=Label(fenetre,text="0",bg='light blue',font="verdana 10 bold") liste_widgets.append(b4) b5.grid(row=4,column=colonne+2) for ln in range(0,ligne): for cn in range(0,colonne): if tableau[ln][cn]%4==0: item=can.create_rectangle(cn*larg+1,ln*larg+1,(cn+1)*larg-1,(ln+1)*larg-1,fill='blue') if tableau[ln][cn]%7==0 and tableau[ln][cn]%4!=0: num=num+1 item=can.create_oval(cn*larg+7,ln*larg+3,(cn+1)*larg-7,(ln+1)*larg-3,fill='light green') if tableau[ln][cn]==4: can.create_rectangle(cn*larg+1,ln*larg+1,(cn+1)*larg-1,(ln+1)*larg-1,fill='light blue',outline='light blue') can.create_oval(cn*larg+3,ln*larg+3,cn*larg+larg-3,ln*larg+larg-3,width=2,fill='red',outline='red') if tableau[ln][cn]==19: pacmang(can,ln,cn,larg) liste[0]=1 xc=num*[0] yc=num*[0] x5,y5=cherche6(tableau,ligne,colonne) cn,ln=x5,y5 compteur=0 yc[0],xc[0]=y5,x5 fenetre.bind_all('<Key>', lambda event:touche(event,fenetre,can,images,tableau,tableau2,listetemp,ligne,colonne,b4,larg,compteur,xc,yc)) deplacer(fenetre,images,tableau,tableau1,listetemp,liste,ligne,colonne,b5,larg) fenetre=Tk() liste_widgets=[] colonne,ligne=20,12 larg=50 nombre=ligne*colonne largeur,hauteur=int(colonne*larg),int(ligne*larg) listen=nombre*[0] vert=[0,0,0] listetemp=nombre*[0] fenetre=creerfenetre("Jeu snake",str(largeur+230)+"x"+str(hauteur)) fenetre.configure(bg='light blue') compteur=0 can=Canvas(fenetre,width=largeur,height=hauteur,bg='light blue') can.grid(row=0,column=0,rowspan=ligne,columnspan=colonne) images=0 b1=Button(fenetre,text="JOUER",bg="light green",font="verdana 20 bold", command=lambda:jouer(fenetre,can,ligne,colonne,listen,images,compteur,vert,nombre,larg,liste_widgets)) b1.grid( row=0,column=colonne+1,columnspan=2) liste_widgets.append(b1) for ln in range(0,ligne): for cn in range(0,colonne): pacman(can,ln,cn,larg) item1=can.create_text(largeur/2,hauteur/2,text=" PACMAN ",font="verdana 60 bold",fill="red") item1=can.create_text(largeur/2,hauteur/2+100,text=" se déplace ",font="verdana 20 bold",fill="red") fenetre.mainloop()