pacman
Exemple de pacman n°1
#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
animation pacman.py
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()
|