from tkinter import * from math import sin,cos,atan,radians def newGame(): #fct permetant de supprimer une fen et d'en recrer une nv def depTank(t,dx,dy,n): cot = MyCanvas.coords(t) ov = MyCanvas.find_overlapping(cot[0]+dx,cot[1]+dy,cot[2]+dx,cot[3]+dy) #on prévoit la futur position du rectangle cond = True for b in briques: #si briques dans overlapping, on avance pas if b in ov: cond = False if cond: MyCanvas.move(t,dx,dy) if not [ft1,ft2][n]: MyWindow.after(dt,lambda: depTank(t,dx,dy,n)) def MoveTank1(event): global ft1 MyCanvas.unbind('') MyCanvas.bind('',StopTank1) ft1 = 0 depTank(tank[0]["canvas"],dx1,dy1,0) def MoveTank2(event): global ft2 MyCanvas.unbind('') MyCanvas.bind('',StopTank2) ft2 = 0 depTank(tank[1]["canvas"],dx2,dy2,1) #""" Crée une fonction StopTank, quand on relache la touche 'a' """ def StopTank1(event): global ft1 MyCanvas.unbind('') MyCanvas.bind('',MoveTank1) ft1 = 1 def StopTank2(event): global ft2 MyCanvas.unbind('') MyCanvas.bind('',MoveTank2) ft2 = 1 #""" Fonction qi permet de créer des boulets de canon """ def ShootTank1(event): pt = MyCanvas.coords(tank[0]["canvas"]) bullets.append([MyCanvas.create_oval(*pt,fill="black"),dx1,dy1]) def ShootTank2(event): pt = MyCanvas.coords(tank[1]["canvas"]) bullets.append([MyCanvas.create_oval(*pt,fill="black"),dx2,dy2]) print(MyCanvas.coords(bullets)) #''' On crée une fonction qui fait tourner notre tank quand le tank n'est pas en mouvement''' def rotation(): global dx1,dx2,dy1,dy2,a1,a2 if ft1 == 1: a1 += radians(dg) dy1 = sin(a1)*r dx1 = cos(a1)*r if ft2 == 1: a2 += radians(dg) dy2 = sin(a2)*r dx2 = cos(a2)*r root2.after(dt,rotation) MyWindow.destroy() root2 = Tk() root2.title ( "THE ARMATA") MyCanvas=Canvas(root2, width=400, height=400, bg='white') for t in tank: t["canvas"]=MyCanvas.create_rectangle( t["pos"][0]*20, t["pos"][1]*20, t["pos"][0]*20+20, t["pos"][1]*20+20, width=2, outline='black', fill=t["fill"],) label_player1 = Label(root2, text = "player1").pack(side=LEFT,padx=5,pady=5) label_vie1 = Label(root2, text = "vie1").pack(side=LEFT,padx=5,pady=5) label_player2 = Label(root2, text = "player2" ).pack(side=LEFT,padx=5,pady=5) label_vie2 = Label(root2, text = "vie2").pack(side=LEFT,padx=5,pady=5) def play(): for b in bullets: MyCanvas.move(b[0],b[1],b[2]) root2.after(dt,play) Button(root2, text='Exit', command=root2.destroy).pack(side=LEFT,padx=5,pady=5) Button(root2, text='Play', command=play).pack(side=LEFT,padx=5,pady=5) MyCanvas.focus_set() MyCanvas.bind('',MoveTank1) MyCanvas.bind('',MoveTank2) MyCanvas.bind('',ShootTank1) MyCanvas.bind('',ShootTank2) MyCanvas.pack(padx=50, pady=50) #MyCanvas.coords(tank[0]["canvas"]) #MyCanvas.coords(tank[1]["canvas"]) rotation() for j in range(20): for i in range(20): if LC[j][i]==1: briques.append(MyCanvas.create_rectangle(i*20,j*20,i*20+20,j*20+20,fill='brown') ) def option(): # ouverture d'un fichiers text expliquant le fctioment du jeux root_option = Tk() f = open("consigne.txt","r") txt=f.read() message_option = Message(root_option, text = txt ) message_option.grid(row=1 , column= 1) f.close() def continuer(): sauvegarde = open ("sauvegarde.txt","rb") S = pickle.load(sauvegarde) fichier.close() return(S) def pause(event): global flag #print(event.keysym) if event.keysym == "p": if flag == 1: flag = 0 elif flag == 0: flag = 1 updateTime() def sauvegarde(n): #le mettre dans une commande dans la partie pause pour appeler la fct sauvegarde = open ("sauvegarde.txt","wb") pickle.dump(n,sauvegarde) sauvegarde.close() """" On initialise les valeurs pour la fonction rotate, ici ft= 1 indique que le tank est a l'arret """ dx,dy=3,3 dg = 5 dr=0.2 dx1,dy1=3,3 dx2,dy2=3,3 r = (dx1**2+dy1**2)**0.5 a1 = atan(dy1/dx1) a2 = atan(dy2/dx2) ft1 =1 ft2 =1 dt=50 H =667 W =1188 H2 = 400 W2 = 400 flag = 0 variablesauvegarde=0 MyWindow=Tk() MyWindow.title ("THE ARMATA") tank=({ "nom" : "Tank1", "pos" : [18, 18], "fill" : "red", }, { "nom" : "Tank2", "pos" : [1, 1], "fill" : "green", }) bullet = () LC=[[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1], [1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1], [1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]] bullets = [] briques = [] """ On initialise la liaison entre le clavier et le canvas""" can = Canvas(MyWindow, height=H, width=W, bg="white") #creation d'un canvas can.grid(row=0,column=1,columnspan=5) # ajout d'une photo sur le canva photo = PhotoImage(file =r"Capture.gif") item = can.create_image(594,335, image =photo) #creation de boutons + mise sur l'image grace a la 2emes du bouton btn_start = Button(can, text="New Game", command=newGame,bg = "goldenrod") btn_start_can = can.create_window(600,225, window=btn_start) btn_quit = Button(can, text=" Quit ", command=MyWindow.destroy, bg = "red4") btn_quit_can = can.create_window(600,375, window=btn_quit) btn_option = Button(can, text=" Option ", command=option, bg = "goldenrod") btn_option_can = can.create_window(600,325, window=btn_option) if variablesauvegarde == 1: btn_continuer = Button(can, text=" Continue ", command = continuer , bg = "goldenrod") btn_continuer_can = can.create_window(600,275, window=btn_continuer) elif variablesauvegarde ==0: pass MyWindow.mainloop()