#************************************************************* # Programme ROBOT #************************************************************ #modules a importer from tkinter import * #fenêtres graphiques from math import * #fonctions mathématiques from random import * #nombres aléatoires from time import * #============================================================ #Fonctions : def depart(): cnv1.delete(ALL) dessiner_terrain() creer_robot() creer_cible() for i in range(max_trajets): trajet() def trajet(): global xr,yr pas=0 while pas <= max_pas and cible_atteinte==FALSE: memo_position_robot() calc_future_position_robot() rebond_bord_robot() affiche_robot(xr,yr) affiche_trace_robot(xr0,yr0) pause(delai) pas+=1 actualise_nb_pas_robot(pas) def affiche_robot(x,y): cnv1.coords(robot,floor(x)*patch,floor(y)*patch,floor(x+1)*patch,floor(y+1)*patch) def affiche_trace_robot(x,y): cnv1.create_rectangle(floor(x)*patch+dxr,floor(y)*patch+dyr,floor(x+1)*patch-dxr,floor(y+1)*patch-dyr,fill='blue') def actualise_nb_pas_robot(pas): nb_pas_robot.configure(text=str(pas)) def test_cible_atteinte(): global cible_atteinte if floor(xr)==xc and floor(yr)==yc: cible_atteinte=TRUE def rebond_bord_robot(): global xr,yr,vxr,vyr #bord vertical gauche : if (floor(xr)<=xmin) or (floor(xr)>=xmax): vxr=-vxr xr,yr=xr0,yr0 if (floor(yr)<=ymin) or (floor(yr)>=ymax): vyr=-vyr xr,yr=xr0,yr0 def memo_position_robot(): global xr0,yr0 xr0,yr0=xr,yr def calc_future_position_robot(): global xr,yr xr,yr=xr+vxr,yr+vyr def pause(t): fnt1.update() sleep(t) def dessiner_terrain(): for i in range(xmin,xmax+1): dessiner_brique(i*patch,ymin*patch) dessiner_brique(i*patch,ymax*patch) for j in range(ymin,ymax+1): dessiner_brique(xmin*patch,j*patch) dessiner_brique(xmax*patch,j*patch) def dessiner_brique(x,y): cnv1.create_rectangle(x,y,x+patch,y+patch,fill='green') def creer_robot(): global robot,xr,yr,xr0,yr0,capr,vxr,vyr,trace_robot xr=randint(xmin+1,xmax-1) yr=randint(ymin+1,ymax-1) robot=cnv1.create_rectangle(xr*patch,yr*patch,(xr+1)*patch,(yr+1)*patch,fill='blue') trace_robot=cnv1.create_rectangle(xr*patch+dxr,yr*patch+dxr,(xr+1)*patch-dxr,(yr+1)*patch-dxr,fill='blue') xr0,yr0=xr,yr capr=randint(0,359) vxr,vyr=sin(capr),-cos(capr) def creer_cible(): global cible,xc,yc,xc0,yc0,capc,vxc,vyc xc=randint(xmin+1,xmax-1) yc=randint(ymin+1,ymax-1) while (xc==xr and yc==yr): xc=randint(xmin+1,xmax-1) yc=randint(ymin+1,ymax-1) cible=cnv1.create_rectangle(xc*patch,yc*patch,(xc+1)*patch,(yc+1)*patch,fill='red') xc0,yc0=xc,yc capc=randint(0,359) vxc,vyc=sin(capc),-cos(capc) def accelerer_robot(): global vxr,vyr vxr *= 1.2 vyr *= 1.2 def ralentir_robot(): global vxr,vyr vxr *= 0.8 vyr *= 0.8 #============================================================ #Variables : xmin,ymin=1,1 #coordonnées minimales xmax,ymax=50,20 #coordonnées maximales patch=10 #taille des sprites max_pas=1000 #nb de pas maximal du robot pas=0 #compteur de pas du robot cible_atteinte=FALSE #indicateur de cible atteinte robot=0 #image du robot xr,yr,xr0,yr0=0,0,0,0 #coordonnées du robot, et copies capr=0 #cap du robot vxr,vyr=0,0 #vitesse du robot xc,yc,xc0,yc0=0,0,0,0 #coordonnées du robot, et copies capc=0 #cap du robot vxc,vyc=0,0 #vitesse du robot delai=0.1 #délai entre 2 mouvements du robot max_trajets=3 #nb maximum de trajets pour le robot dxr,dyr = 4,4 #dimensions trace du robot #============================================================ #Programme principal #------------------------------------------------------------ #Fenêtre graphique : fnt1=Tk() #canevas : cnv1=Canvas(fnt1,bg='cyan',height=250,width=600) cnv1.pack(side=LEFT) #bouton de départ : bt_depart=Button(fnt1,text="départ",command=depart) bt_depart.pack(side=TOP) #bouton d'arret : bt_stop=Button(fnt1,text="stop",command=fnt1.destroy) bt_stop.pack(side=TOP) #indicateurs pour le robot : txt_pas_robot=Label(fnt1, text='robot', fg='red') txt_pas_robot.pack(side=TOP) nb_pas_robot=Label(fnt1, text=str(pas),fg='red') nb_pas_robot.pack(side=TOP) bt_accelerer_robot=Button(fnt1, text="Rob++", fg='red',command=accelerer_robot) bt_accelerer_robot.pack(side=TOP) bt_ralentir_robot=Button(fnt1, text="Rob--", fg='red',command=ralentir_robot) bt_ralentir_robot.pack(side=TOP) fnt1.mainloop() #============================================================