SHARE
TWEET

Untitled

a guest Jan 21st, 2020 68 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import PIL
  2. from PIL import ImageTk, Image
  3. import tkinter as tk
  4. import sqlite3 as sq
  5. import numpy as np
  6.  
  7. #Connexion à la base de données
  8. connexion= sq.connect('Ports.sqlite')
  9. curseur=connexion.cursor()
  10.  
  11.  
  12. class Carte:
  13.     def __init__(self,fenetre):
  14.         self.fenetre = tk.Frame(fenetre, bd=2, relief=tk.SUNKEN)
  15.         fenetre.title("Carte")
  16.         self.fenetre.grid_rowconfigure(0, weight=1)
  17.         self.fenetre.grid_columnconfigure(0, weight=1)
  18.         # Création d'un widget Canvas
  19.         self.Largeur = 1156 #TODO remplacer par des grandeurs "absolues", définies selon l'image
  20.         self.Hauteur = 1046
  21.         self.xscrollbar = tk.Scrollbar(self.fenetre, orient=tk.HORIZONTAL)
  22.         self.xscrollbar.grid(row=1, column=0, sticky=tk.E+tk.W)        
  23.         self.yscrollbar = tk.Scrollbar(self.fenetre)
  24.         self.yscrollbar.grid(row=0, column=1, sticky=tk.N+tk.S)
  25.         self.Canevas = tk.Canvas(self.fenetre, width = self.Largeur, height =self.Hauteur, bd=0,
  26.                 scrollregion=(0, 0, 1000, 1000),xscrollcommand=self.xscrollbar.set,
  27.                 yscrollcommand=self.yscrollbar.set)
  28.         self.im=PIL.Image.open("mancheajustee.png")
  29.         self.img = ImageTk.PhotoImage(self.im,master=self.Canevas) #TODO : remplacer par une image générique
  30.         self.image = self.Canevas.create_image(0,0,anchor=tk.NW,image=self.img)
  31.         self.im_arr = np.fromstring(self.im.tobytes(), dtype=np.uint8)
  32.         self.im_arr = self.im_arr.reshape((self.im.size[1], self.im.size[0], 3))
  33.        
  34.         self.Canevas.grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W)
  35.        
  36.         self.xscrollbar.config(command=self.Canevas.xview)
  37.         self.yscrollbar.config(command=self.Canevas.yview)
  38.        
  39.         self.fenetre.pack()
  40.  
  41.         Mafenetre.bind("<Button-3>",self.add_navireb)   #evenement clic droit
  42.         Mafenetre.bind("<Button-1>",self.add_portb)     #evenement clic gauche
  43.        
  44.     #Interface
  45.         self.menubar = tk.Menu(self.fenetre) #Menu en haut
  46.        
  47.         self.menu1 = tk.Menu(self.menubar, tearoff=0) #Menu Port
  48.         self.menu1.add_command(label="Créer",command=self.creaport)
  49.         self.menu1.add_command(label="Modifier",command=self.attr_port)
  50.         self.menu1.add_separator()
  51.         self.menu1.add_command(label="Quitter", command=fenetre.quit)
  52.         self.menubar.add_cascade(label="Port", menu=self.menu1)
  53.        
  54.         self.menu2 = tk.Menu(self.menubar, tearoff=0) #Menu Navire
  55.         self.menu2.add_command(label="Créer Navire",command=self.creanavire)
  56.         self.menu2.add_command(label="Modifier")
  57.         self.menu1.add_command(label="Quitter", command=fenetre.quit)
  58.         self.menubar.add_cascade(label="Navires", menu=self.menu2)
  59.        
  60.        
  61.         self.littoraux=self.littoral(self.im_arr,self.Hauteur,self.Largeur) #liste des coordonnées des littoraux
  62.         fenetre.config(menu=self.menubar)    
  63.        
  64.     def littoral(self,img,x,y): #definition des littoraux
  65.             self.littorall=[]
  66.             for i in range (x):
  67.                 for j in range (y):
  68.                     if np.array_equal(img[i][j],np.array([ 0, 0, 0])):
  69.                         self.littorall.append([j,i])
  70.             return self.littorall
  71.        
  72.            
  73.    
  74.     def meilleurpoint(self,x,y,littoral):
  75.         """ renvoie le point du littoral le plus proche du point (x,y) """
  76.         mindist=10e75
  77.         meilleurecoo=[0,0]
  78.         for i in littoral:
  79.             distance2=np.sqrt((i[0]-x)**2+(i[1]-y)**2)
  80.             if distance2<mindist:
  81.                 mindist=distance2
  82.                 meilleurecoo=[i[0],i[1]]
  83.         return meilleurecoo
  84.  
  85. #Fonctions pour les ports
  86.  
  87.     ListePort=[]
  88.     dico_port={'grand_agricole': 0,'grand_industriel': 0,'grand_minier': 0,'grand_militaire': 0,'moyen_agricole': 0,'moyen_industriel': 0,'moyen_minier': 0,'moyen_militaire': 0,'petit_agricole':0,'petit_industriel': 0,'petit_minier': 0,'petit_militaire': 0}
  89.     dicoind_port={'grand_agricole': 0,'grand_industriel': 0,'grand_minier': 0,'grand_militaire': 0,'moyen_agricole': 0,'moyen_industriel': 0,'moyen_minier': 0,'moyen_militaire': 0,'petit_agricole':0,'petit_industriel': 0,'petit_minier': 0,'petit_militaire': 0}
  90.     #Nomination des navires par defaut
  91.    
  92.     def compteur_Port(self,value,eco_port):
  93.         if value==0 and eco_port==0:
  94.             self.dico_port['grand_agricole']+=1
  95.         elif value==0 and eco_port==1:
  96.             self.dico_port['grand_industriel']+=1
  97.         elif value==0 and eco_port==2:
  98.             self.dico_port['grand_minier']+=1
  99.         elif value==0 and eco_port==3:
  100.             self.dico_port['grand_militaire']+=1
  101.            
  102.         elif value==1 and eco_port==0:
  103.             self.dico_port['moyen_agricole']+=1
  104.         elif value==1 and eco_port==1:
  105.             self.dico_port['moyen_industriel']+=1
  106.         elif value==1 and eco_port==2:
  107.             self.dico_port['moyen_minier']+=1
  108.         elif value==1 and eco_port==3:
  109.             self.dico_port['moyen_militaire']+=1
  110.        
  111.         elif value==2 and eco_port==0:
  112.             self.dico_port['petit_agricole']+=1
  113.         elif value==2 and eco_port==1:
  114.             self.dico_port['petit_industriel']+=1
  115.         elif value==2 and eco_port==2:
  116.             self.dico_port['petit_minier']+=1
  117.         elif value==2 and eco_port==3:
  118.             self.dico_port['petit_militaire']+=1
  119.  
  120.     def creaport(self):
  121.         """ Nouvelle fenetre pour créer un port """
  122.         self.FenCre = tk.Toplevel() #Nouvelle fenêtre
  123.         self.value = tk.IntVar()
  124.         self.bouton1 = tk.Radiobutton(self.FenCre,text="Grand",variable=self.value, value=0)
  125.         self.bouton2 = tk.Radiobutton(self.FenCre,text="Moyen",variable=self.value, value=1)
  126.         self.bouton3 = tk.Radiobutton(self.FenCre,text="Petit",variable=self.value, value=2)
  127.         self.bouton1.pack()
  128.         self.bouton2.pack()
  129.         self.bouton3.pack()
  130.        
  131.          #Type d'économie du port
  132.        
  133.         self.eco_port= tk.IntVar()
  134.         self.bouton4 = tk.Radiobutton(self.FenCre,indicatoron=0,text="Agricole",variable=self.eco_port, value=0)
  135.         self.bouton5 = tk.Radiobutton(self.FenCre,indicatoron=0,text="Industriel",variable=self.eco_port, value=1)
  136.         self.bouton6 = tk.Radiobutton(self.FenCre,indicatoron=0,text="Minier",variable=self.eco_port, value=2)
  137.         self.bouton7 = tk.Radiobutton(self.FenCre,indicatoron=0,text="Militaire",variable=self.eco_port, value=3)
  138.         self.bouton4.pack()
  139.         self.bouton5.pack()
  140.         self.bouton6.pack()
  141.         self.bouton7.pack()
  142.        
  143.         self.Confirmer1=tk.Button(self.FenCre,text="confirmer",command=lambda:(self.FenCre.destroy(), self.compteur_Port(self.value.get(),self.eco_port.get())))
  144.         self.Confirmer1.pack()
  145.        
  146.     def decre_portb(self,event):
  147.         """ récupère l'événement clic droit, pour actionner decre_port """
  148.         self.decre_port()
  149.    
  150.     def add_portb(self,event):
  151.         """ récupère l'événement clic gauche et les coordonées du clic pour actionner add_port """
  152.         if self.dico_port['grand_agricole']>=1: #TODO problème avec le scrollbar sur les coordonées
  153.             self.taille='grand_agricole'
  154.             self.dico_port['grand_agricole']-=1
  155.             self.add_port(event.x,event.y,"grand_agricole",0)
  156.         elif self.dico_port['grand_industriel']>=1:
  157.             self.taille='grand_industriel'
  158.             self.dico_port['grand_industriel']-=1
  159.             self.add_port(event.x,event.y,"grand_industriel",1)
  160.         elif self.dico_port['grand_minier']>=1:
  161.             self.taille='grand_minier'
  162.             self.dico_port['grand_minier']-=1
  163.             self.add_port(event.x,event.y,"grand_minier",2)
  164.         elif self.dico_port['grand_militaire']>=1:
  165.             self.taille='grand_militaire'
  166.             self.dico_port['grand_militaire']-=1
  167.             self.add_port(event.x,event.y,"grand_militaire",3)
  168.            
  169.         elif self.dico_port['moyen_agricole']>=1:
  170.             self.taille='moyen_agricole'
  171.             self.dico_port['moyen_agricole']-=1
  172.             self.add_port(event.x,event.y,"moyen_agricole",0)
  173.         elif self.dico_port['moyen_industriel']>=1:
  174.             self.taille='moyen_industriel'
  175.             self.dico_port['moyen_industriel']-=1
  176.             self.add_port(event.x,event.y,"moyen_industriel",1)
  177.         elif self.dico_port['moyen_minier']>=1:
  178.             self.taille='moyen_minier'
  179.             self.dico_port['moyen_minier']-=1
  180.             self.add_port(event.x,event.y,"moyen_minier",2)
  181.         elif self.dico_port['moyen_militaire']>=1:
  182.             self.taille='moyen_militaire'
  183.             self.dico_port['moyen_militaire']-=1
  184.             self.add_port(event.x,event.y,"moyen_militaire",3)
  185.            
  186.         elif self.dico_port['petit_agricole']>=1:
  187.             self.taille='petit_agricole'
  188.             self.dico_port['petit_agricole']-=1
  189.             self.add_port(event.x,event.y,"petit_agricole",0)
  190.         elif self.dico_port['petit_industriel']>=1:
  191.             self.taille='petit_industriel'
  192.             self.dico_port['petit_industriel']-=1
  193.             self.add_port(event.x,event.y,"petit_industriel",1)
  194.         elif self.dico_port['petit_minier']>=1:
  195.             self.taille='petit_minier'
  196.             self.dico_port['petit_minier']-=1
  197.             self.add_port(event.x,event.y,"petit_minier",2)
  198.         elif self.dico_port['petit_militaire']>=1:
  199.             self.taille='petit_militaire'
  200.             self.dico_port['petit_militaire']-=1
  201.             self.add_port(event.x,event.y,"petit_militaire",3)
  202.            
  203.     def BDD_Ports(self,L):
  204.         """ ajout des ports et de leurs caractéristiques dans la base de données """
  205.         curseur.execute(""" INSERT INTO Ports(nom,Taille,Type,Xport,Yport) VALUES (?,?,?,?,?)""",(L[-1][0],L[-1][1],L[-1][-1],L[-1][2][0],L[-1][2][1],))
  206.         connexion.commit()
  207.            
  208.     def BDD_Ports_modif(self):
  209.         """ modification des données des ports dans la base de données"""
  210.         curseur.execute(""" UPDATE Ports
  211.                             SET nom=(?), Taille=(?), Type=(?)
  212.                             WHERE Id=(?)
  213.                                                 """,(self.ListePort[self.j][0],self.ListePort[self.j][1],self.ListePort[self.j][3],self.f[0],))
  214.         connexion.commit()
  215.        
  216.        
  217.     def add_port(self,x,y,taille,eco_port):
  218.         self.B=self.meilleurpoint(x,y,self.littoraux)
  219.         self.x,self.y=self.B[0],self.B[1]
  220.        
  221.         if self.taille == 'grand_agricole' or  self.taille =='grand_industriel' or  self.taille =='grand_minier' or  self.taille =='grand_militaire': #Ajoute un cercle représentant un port de taille grande
  222.             self.Canevas.create_oval(self.x-self.Largeur/50,self.y+self.Hauteur/100,self.x+self.Largeur/50,self.y-self.Hauteur/100,fill='red')
  223.             if eco_port==0:
  224.                 self.ListePort.append(['grand'+str(self.dicoind_port['grand_agricole']),'grand',[self.x,self.y],'agricole'])
  225.                 self.dicoind_port['grand_agricole']+=1
  226.             if eco_port==1:
  227.                 self.ListePort.append(['grand'+str(self.dicoind_port['grand_industriel']),'grand',[self.x,self.y],'industriel'])
  228.                 self.dicoind_port['grand_industriel']+=1
  229.             if eco_port==2:
  230.                 self.ListePort.append(['grand'+str(self.dicoind_port['grand_minier']),'grand',[self.x,self.y],'minier'])
  231.                 self.dicoind_port['grand_minier']+=1
  232.             if eco_port==3:
  233.                 self.ListePort.append(['grand'+str(self.dicoind_port['grand_militaire']),'grand',[self.x,self.y],'militaire'])
  234.                 self.dicoind_port['grand_militaire']+=1
  235.            
  236.         elif self.taille == 'moyen_agricole' or  self.taille =='moyen_industriel' or  self.taille =='moyen_minier' or  self.taille =='moyen_militaire': #Ajoute un cercle représentant un port de taille moyenne
  237.             self.Canevas.create_oval(self.x-self.Largeur*4.6/300,self.y+self.Hauteur*2.3/300,self.x+self.Largeur*4.6/300,self.y-self.Hauteur*2.3/300,fill='orange')
  238.             if eco_port==0:
  239.                 self.ListePort.append(['moyen'+str(self.dicoind_port['moyen_agricole']),'moyen',[self.x,self.y],'agricole'])
  240.                 self.dicoind_port['moyen_agricole']+=1
  241.             if eco_port==1:
  242.                 self.ListePort.append(['moyen'+str(self.dicoind_port['moyen_industriel']),'moyen',[self.x,self.y],'industriel'])
  243.                 self.dicoind_port['moyen_industriel']+=1
  244.             if eco_port==2:
  245.                 self.ListePort.append(['moyen'+str(self.dicoind_port['moyen_minier']),'moyen',[self.x,self.y],'minier'])
  246.                 self.dicoind_port['moyen_minier']+=1
  247.             if eco_port==3:
  248.                 self.ListePort.append(['moyen'+str(self.dicoind_port['moyen_militaire']),'moyen',[self.x,self.y],'militaire'])
  249.                 self.dicoind_port['moyen_militaire']+=1
  250.            
  251.         else: #Ajoute un cercle représentant un port de taille petite
  252.             self.Canevas.create_oval(self.x-self.Largeur*3/300,self.y+self.Hauteur*1.5/300,self.x+self.Largeur*3/300,self.y-self.Hauteur*1.5/300,fill='violet')
  253.             if eco_port==0:
  254.                 self.ListePort.append(['petit'+str(self.dicoind_port['petit_agricole']),'petit',[self.x,self.y],'agricole'])
  255.             self.dicoind_port['petit_agricole']+=1
  256.             if eco_port==1:
  257.                 self.ListePort.append(['petit'+str(self.dicoind_port['petit_industriel']),'petit',[self.x,self.y],'industriel'])
  258.             self.dicoind_port['petit_industriel']+=1
  259.             if eco_port==2:
  260.                 self.ListePort.append(['petit'+str(self.dicoind_port['petit_minier']),'petit',[self.x,self.y],'minier'])
  261.             self.dicoind_port['petit_minier']+=1
  262.             if eco_port==3:
  263.                 self.ListePort.append(['petit'+str(self.dicoind_port['petit_militaire']),'petit',[self.x,self.y],'militaire'])
  264.             self.dicoind_port['petit_militaire']+=1
  265.        
  266.        
  267.        
  268.        
  269.        
  270.         self.BDD_Ports(self.ListePort)
  271.        
  272.     def attr_port(self):
  273.         """ Nouvelle fenetre pour éditer le type et le nom des ports """
  274.         self.FenCre = tk.Toplevel(height=self.Hauteur/2,width=self.Largeur/2) #Nouvelle fenêtre
  275.         self.ListeboxPort = tk.Listbox(self.FenCre,selectmode=tk.SINGLE)
  276.         self.i=1
  277.         while self.ListeboxPort.size() != len(self.ListePort) and len(self.ListePort)!=0:
  278.             self.ListeboxPort.insert(self.i, str(self.ListePort[self.ListeboxPort.size()-len(self.ListePort)][0]))
  279.             self.i+=1
  280.         self.ListeboxPort.pack()
  281.        
  282.         self.value = tk.IntVar() #Choix du port à éditer
  283.         self.Confirmer1=tk.Button(self.FenCre,text="confirmer",command=lambda:(self.edition()))
  284.         self.Confirmer1.pack()
  285.        
  286.         #Nom du port
  287.         self.NomEdit = tk.StringVar()
  288.         self.NomEdit.set(self.ListeboxPort.get(tk.ANCHOR))
  289.         self.entree = tk.Entry(self.FenCre, textvariable = self.NomEdit, width = 30 )
  290.         self.entree.pack()
  291.         self.ListeboxPort.bind('<<ListboxSelect>>',self.CurSelet_port)
  292.        
  293.         #Type d'économie du port
  294.        
  295.         self.eco_port=tk.IntVar()
  296.         self.bouton1 = tk.Radiobutton(self.FenCre,indicatoron=0,text="Agricole",variable=self.eco_port, value=0)
  297.         self.bouton2 = tk.Radiobutton(self.FenCre,indicatoron=0,text="Industriel",variable=self.eco_port, value=1)
  298.         self.bouton3 = tk.Radiobutton(self.FenCre,indicatoron=0,text="Militaire",variable=self.eco_port, value=2)
  299.         self.bouton4 = tk.Radiobutton(self.FenCre,indicatoron=0,text="Minier",variable=self.eco_port, value=3)
  300.         self.bouton1.pack()
  301.         self.bouton2.pack()
  302.         self.bouton3.pack()
  303.         self.bouton4.pack()
  304.        
  305.     def CurSelet_port(self,evt):  
  306.         """ Pour gérer l'événement "séléction du port" """
  307.         self.a=self.ListeboxPort.get(self.ListeboxPort.curselection())
  308.         self.NomEdit.set(self.a)
  309.  
  310.        
  311.     def edition(self):
  312.         """ Pour changer le nom et l'économie des ports"""
  313.         try:
  314.            
  315.             self.j=self.ListeboxPort.index(self.ListeboxPort.curselection())
  316.             self.id_port=curseur.execute("""SELECT Id FROM Ports WHERE nom=(?) and Type=(?)""",(self.ListePort[self.j][0],self.ListePort[self.j][3]))
  317.             self.f=self.id_port.fetchone()
  318.             self.ListePort[self.j][0]=self.entree.get()
  319.             if self.eco_port.get()==0:
  320.                self.ListePort[self.j][3]='agricole'
  321.             elif self.eco_port.get()==1:
  322.                 self.ListePort[self.j][3]='industriel'
  323.             elif self.eco_port.get()==2:
  324.                 self.ListePort[self.j][3]='minier'
  325.             elif self.eco_port.get()==3:
  326.                 self.ListePort[self.j][3]='militaire'
  327.            
  328.             self.ListeboxPort.delete(self.j)
  329.             self.ListeboxPort.insert(self.j,self.entree.get())
  330.             self.BDD_Ports_modif()
  331.         except:
  332.             pass
  333.  
  334.  
  335. #Fonctions Navires
  336.    
  337.     ListeCargo=[]
  338.     ListePirate=[]
  339.     ListeMilitaire=[]
  340.     dico_navire={'Cargo_agricole': 0,'Cargo_industriel': 0,'Cargo_minier': 0, 'Militaire': 0,'Pirate':0}
  341.     dicoind_navire={'Cargo_agricole': 0,'Cargo_industriel': 0,'Cargo_minier': 0, 'Militaire': 0,'Pirate':0}
  342.    
  343.     def compteur_Navire(self,value,eco):
  344.         if value==0 and eco==0:
  345.             self.dico_navire['Cargo_agricole']+=1
  346.         elif value==0 and eco==1:
  347.             self.dico_navire['Cargo_industriel']+=1
  348.         elif value==0 and eco==2:
  349.             self.dico_navire['Cargo_minier']+=1
  350.         elif value==1:
  351.             self.dico_navire['Militaire']+=1
  352.         else:
  353.             self.dico_navire['Pirate']+=1
  354.            
  355.     def Pirate(self,x,y,idnavire):
  356.         """ Dessine un navire pirate """
  357.         r = 5
  358.         coco="#000000"
  359.         self.Canevas.create_oval(x-r, y-r, x+r, y+r, outline=coco, fill=coco,tags=idnavire)
  360.  
  361.            
  362.     def Cargo(self,x,y,idnavire):
  363.         """ Dessine un navire cargo """
  364.         r = 5
  365.         coco="#FFFF00"
  366.         self.Canevas.create_oval(x-r, y-r, x+r, y+r, outline=coco, fill=coco,tags=idnavire)
  367.  
  368.            
  369.     def Militaire(self,x,y,idnavire):
  370.         """ Dessine un navire militaire"""
  371.         r = 5
  372.         coco="#33FF00"
  373.         self.Canevas.create_oval(x-r, y-r, x+r, y+r, outline=coco, fill=coco,tags=idnavire)
  374.        
  375.     def Choix_port(self):
  376.         self.FenCre2= tk.Toplevel()
  377.         self.ListeboxPort = tk.Listbox(self.FenCre2,selectmode=tk.SINGLE) #choix du port de départ
  378.         self.i=1
  379.         while self.ListeboxPort.size() != len(self.ListePort) and len(self.ListePort)!=0:
  380.               self.ListeboxPort.insert(self.i, str(self.ListePort[self.ListeboxPort.size()-len(self.ListePort)][0]))
  381.               self.i+=1
  382.         self.ListeboxPort.pack()
  383.         self.Confirmer2=tk.Button(self.FenCre2,text="confirmer",command=lambda:(self.FenCre2.destroy(),self.edition(),self.add_navireb(self.x,self.y)))
  384.         self.Confirmer2.pack()
  385.         self.ListeboxPort.bind('<<ListboxSelect>>',self.CurSelet_navire)
  386.        
  387.     def CurSelet_navire(self,evt):  
  388.         """ Pour gérer l'événement "séléction du port" """
  389.         self.a=self.ListeboxPort.get(self.ListeboxPort.curselection())
  390.         self.port=curseur.execute("""SELECT Xport,Yport FROM Ports WHERE nom=(?)""",(str(self.a),)).fetchall()
  391.         print(self.port)
  392.         self.x,self.y=self.port[0][0],self.port[0][1]
  393.        
  394.        
  395.     def creanavire(self):
  396.          """ Nouvelle fenetre pour créer un navire """
  397.          self.FenCre = tk.Toplevel() #Nouvelles fenêtres
  398.          self.value = tk.IntVar()
  399.          self.bouton1 = tk.Radiobutton(self.FenCre,text="Cargo",variable=self.value, value=0)
  400.          self.bouton2 = tk.Radiobutton(self.FenCre,text="Militaire",variable=self.value, value=1)
  401.          self.bouton3 = tk.Radiobutton(self.FenCre,text="Pirate",variable=self.value, value=2)
  402.          self.bouton1.pack()
  403.          self.bouton2.pack()
  404.          self.bouton3.pack()
  405.          self.eco=tk.IntVar()
  406.            #Type de Cargo
  407.          self.bouton4 = tk.Radiobutton(self.FenCre,indicatoron=0,text="Agricole",variable=self.eco, value=0)
  408.          self.bouton5 = tk.Radiobutton(self.FenCre,indicatoron=0,text="Industriel",variable=self.eco, value=1)
  409.          self.bouton6 = tk.Radiobutton(self.FenCre,indicatoron=0,text="Minier",variable=self.eco, value=2)
  410.          self.bouton4.pack()
  411.          self.bouton5.pack()
  412.          self.bouton6.pack()
  413.          
  414.          self.Confirmer2=tk.Button(self.FenCre,text="confirmer",command=lambda:(self.FenCre.destroy(),self.Choix_port(),self.compteur_Navire(self.value.get(),self.eco.get())))
  415.          self.Confirmer2.pack()
  416.          
  417.     def add_navire(self,x,y,taille):
  418.         if taille == 'Cargo_agricole': #Ajoute un navire cargo agricole
  419.             self.Canevas.create_oval(self.x-5,self.y+5,self.x+5,self.y-5,fill="#FF00E0")          
  420.             self.ListeCargo.append(['Cargo_agri'+str(self.dicoind_navire['Cargo_agricole']),'agricole',x,y])
  421.             self.dicoind_navire['Cargo_agricole']+=1
  422.             self.BDD_Navires(self.ListeCargo)
  423.             self.id_navire=curseur.execute("""SELECT Id FROM Navires WHERE nom=(?)""",(self.ListeCargo[-1][0],)).fetchone()
  424.            
  425.         elif taille == 'Cargo_industriel': #Ajoute un navire cargo industriel
  426.             self.Canevas.create_oval(self.x-5,self.y+5,self.x+5,self.y-5,fill='grey')
  427.             self.ListeCargo.append(['Cargo_ind'+str(self.dicoind_navire['Cargo_industriel']),'industriel',x,y])
  428.             self.dicoind_navire['Cargo_industriel']+=1
  429.             self.BDD_Navires(self.ListeCargo)
  430.             self.id_navire=curseur.execute("""SELECT Id FROM Navires WHERE nom=(?)""",(self.ListeCargo[-1][0],)).fetchone()
  431.         elif taille == 'Cargo_minier': #Ajoute un navire cargo minier
  432.             self.Canevas.create_oval(self.x-5,self.y+5,self.x+5,self.y-5,fill="#FFD700")
  433.             self.ListeCargo.append(['Cargo_mine'+str(self.dicoind_navire['Cargo_minier']),'minier',x,y])
  434.             self.dicoind_navire['Cargo_minier']+=1
  435.             self.BDD_Navires(self.ListeCargo)
  436.             self.id_navire=curseur.execute("""SELECT Id FROM Navires WHERE nom=(?)""",(self.ListeCargo[-1][0],)).fetchone()
  437.         elif taille == 'Militaire': #Ajoute un navire militaire
  438.             self.Canevas.create_oval(self.x-5,self.y+5,self.x+5,self.y-5,fill='green')
  439.             self.ListeMilitaire.append(['Militaire'+str(self.dicoind_navire['Militaire']),'Militaire',x,y])
  440.             self.dicoind_navire['Militaire']+=1
  441.             self.BDD_Navires(self.ListeMilitaire)
  442.             self.id_navire=curseur.execute("""SELECT Id FROM Navires WHERE nom=(?)""",(self.ListeMilitaire[-1][0],)).fetchone()
  443.         else: #Ajoute un navire pirate
  444.             self.Canevas.create_oval(self.x-5,self.y+5,self.x+5,self.y-5,fill='black')
  445.             self.ListePirate.append(['Pirate'+str(self.dicoind_navire['Pirate']),'Pirate',x,y])
  446.             self.dicoind_navire['Pirate']+=1
  447.             self.BDD_Navires(self.ListePirate)
  448.             self.id_navire=curseur.execute("""SELECT Id FROM Navires WHERE nom=(?)""",(self.ListePirate[-1][0],)).fetchone()
  449.          
  450.            
  451.     def BDD_Navires(self,L):
  452.             curseur.execute(""" INSERT INTO Navires(nom,Type,Xnavire,Ynavire) VALUES (?,?,?,?)""",(L[-1][0],L[-1][1],L[-1][2],L[-1][3]))
  453.             connexion.commit()
  454.  
  455.     def add_navireb(self,x,y):
  456.              """ récupère l'événement du bouton Confirmer et les coordonées du navire pour actionner add_navire """
  457.              if self.dico_navire['Cargo_agricole']>=1:
  458.                  self.type='agricole'
  459.                  self.dico_navire['Cargo_agricole']-=1
  460.                  self.add_navire(x,y,"Cargo_agricole") #remplacer les event par self.port[]
  461.              elif self.dico_navire['Cargo_industriel']>=1:
  462.                  self.type='industriel'
  463.                  self.dico_navire['Cargo_industriel']-=1
  464.                  self.add_navire(x,y,"Cargo_industriel") #remplacer les event par self.port[]
  465.              elif self.dico_navire['Cargo_minier']>=1:
  466.                  self.type='minier'
  467.                  self.dico_navire['Cargo_minier']-=1
  468.                  self.add_navire(x,y,"Cargo_minier") #remplacer les event par self.port[]
  469.              elif self.dico_navire['Militaire']>=1:
  470.                  self.taille='Militaire'
  471.                  self.type='Militaire'
  472.                  self.dico_navire['Militaire']-=1
  473.                  self.add_navire(x,y,"Militaire") #remplacer les event par self.port[]
  474.              elif self.dico_navire['Pirate']>=1:
  475.                  self.taille='Pirate'
  476.                  self.type='Pirate'
  477.                  self.dico_navire['Pirate']-=1
  478.                  self.add_navire(x,y,"Pirate") #remplacer les event par self.port[]
  479.                              
  480.                  
  481. #Trajectoire
  482.                  
  483.     def Avance(self,navireid,cheminid):
  484.         """ Sert à faire avancer un navire sur un chemin déja défini,
  485.             repéré par son ID, et l'ID de son chemin """
  486.         self.a=0
  487.         self.navirex=curseur.execute("""SELECT Xnavire FROM Navires WHERE Id=(?) """,(navireid,)).fetchone()
  488.         self.navirey=curseur.execute("""SELECT Ynavire FROM Navires WHERE Id=(?) """,(navireid,)).fetchone()
  489.         self.navirecoo=[self.navirex,self.navirey]
  490.         self.cheminx=("""SELECT Xchemin FROM Chemins WHERE Id=(?) """,(cheminid,))
  491.         self.cheminy=("""SELECT Ychemin FROM Chemins WHERE Id=(?) """,(cheminid,))
  492.         self.chemincoo=[[self.cheminx[self.n],self.cheminy[self.n]] for self.n in range(len(self.cheminx))]
  493.         for i in self.chemincoo:
  494.             if i==self.navirecoo:
  495.                 self.Canevas.delete(navireid)
  496.                 self.navirecoo=self.chemincoo[self.a+1]
  497.                 self.type=curseur.execute("""SELECT Type FROM Navires WHERE Id=(?) """(navireid,))
  498.                 if self.type=='agricole' or self.type=='minier' or self.type=='industriel':
  499.                     self.Cargo(self.navirecoo[0],self.navirecoo[1],navireid)
  500.                 elif self.type=='Militaire':
  501.                     self.Militaire(self.navirecoo[0],self.navirecoo[1],navireid)
  502.                 elif self.type=='Pirate':
  503.                     self.Militaire(self.navirecoo[0],self.navirecoo[1],navireid)
  504.                 curseur.execute("""UPDATE Navires
  505.                                 SET Xnavire=(?), Ynavire=(?)
  506.                                 WHERE Id=(?)""",(self.navirecoo[0],self.navirecoo[1],navireid,))
  507.                 connexion.commit()
  508.                 return(self.navirecoo)
  509.             self.a+=1
  510.    
  511.     def creachemin(self,navirex,navirey,portx,porty):
  512.         """ création d'un chemin par tâtonnement, ayant pour arguments les coordonées du navire,
  513.             les coordonées du port d'arrivée."""
  514.         self.pasx,self.pasy=15,15 #Nombre de pixel par avancée du navire
  515.         self.L=[]
  516.         self.senx,self.sensy= (navirex-portx)/abs(navirex-portx),(navirey-porty)/abs(navirey-porty)#Sens de parcours
  517.         while navirex!=portx and navirey!=porty: #Tant que le navire n'est pas arrivé à destination
  518.                 if self.proche_littoral() and not self.navire_proche():
  519.                     pass
  520.                 elif self.navire_proche() and not self.proche_littoral():
  521.                     pass
  522.                 elif self.navire_proche() and self.proche_littoral():
  523.                     pass
  524.                 else:
  525.                     self.navirex+=self.pasx*self.sensx
  526.                     self.navirey+=self.pasy*self.sensy
  527.                     self.L.append([self.navirex,self.navirey])
  528.                
  529.            
  530.     def ChoixChemin(self):
  531.         """ Au moment de la création du navire, décide s'il faut créer un nouveau
  532.         chemin, ou en employer un déjà existant"""
  533.         pass
  534.    
  535.    
  536.    
  537.     def proche_littoral(self):
  538.         """ Remédiation du chemin si le navire se dirige vers un littoral autre que le port """
  539.         pass
  540.     def Contourner_littoral(self):
  541.         pass
  542.    
  543.    
  544.     def navire_proche(self):
  545.         """ Déviation du chemin originel si un navire est proche """
  546.         pass
  547.    
  548.     def BDD_Navires(self,L):
  549.             curseur.execute(""" INSERT INTO Chemins(Xchemin,Ychemin,emplacement) VALUES (?,?,?) GROUP BY Id""",(L[-1][0],L[-1][1],L[-1][2]))
  550.             connexion.commit()
  551.                  
  552.  
  553.        
  554. Mafenetre = tk.Tk()
  555. app=Carte(Mafenetre)
  556. Mafenetre.mainloop()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top