Facebook
From emilie bazire, 3 Years ago, written in Python.
Embed
Download Paste or View Raw
Hits: 122
  1. from tkinter import *
  2. from math import *
  3. from tkinter import ttk
  4.  
  5. def pointsuivant_sansbarriere(*args):#v0 vitesse initiale, x0 et y0 positions initiales, alpha angle initial de lancer
  6.     if y0>1.05 or y0<0:
  7.         print("Le paramètre doit être compris entre 0 et 1,05")
  8.         return([])
  9.     x1=x0+v0*sin(alpha)*0.1 #0,1 est l'intervalle de temps entre chaque point
  10.     y1=y0+v0*cos(alpha)*0.1
  11.     x=x1
  12.     y=y1
  13.     X=[]
  14.     Y=[]
  15.     while x<18.29: #18,29m est la longueur de la piste
  16.         x=N((x+v0*sin(alpha)*0.1),digits=4)
  17.         y=N((y+v0*cos(alpha)*0.1),digits=4)
  18.         X.append(x)
  19.         Y.append(y)
  20.     return((X,Y))
  21.  
  22. def sansbarriere(*args):
  23.     x=x0
  24.     y=y0
  25.     pos=pointsuivant_sansbarriere(*args)
  26.     X=pos[0]
  27.     Y=pos[1]
  28.     Lx=[]
  29.     Ly=[]
  30.     n=len(X)
  31.     for i in range(n):
  32.         if 0<=X[i]<=18.29 and 0<Y[i]<1.05:
  33.             Lx.append(X[i])
  34.             Ly.append(Y[i])
  35.         elif Y[i]<0 or Y[i]>1.05:
  36.             return((Lx,Ly))
  37.         elif X[i]>18.29 or X[i]<0:
  38.             return((Lx,Ly))
  39.  
  40. def trajectoire_sansbarriere(*args):
  41.     sb=sansbarriere(*args)
  42.     X=sb[0]
  43.     Y=sb[1]
  44.     n=len(Y)
  45.     L=[]
  46.     for i in range (n):
  47.         L.append((X[i],Y[i]))
  48.     return(L)
  49.  
  50. def calcul_pointsuivant(*args):#v0 vitesse initiale, x0 et y0 positions initiales, alpha angle initial de lancer
  51.     x1=x0+v0*sin(alpha)*0.1 #0,1 est l'intervalle de temps entre chaque point
  52.     y1=y0+v0*cos(alpha)*0.1
  53.     return([v0,x1,y1,alpha])
  54.  
  55. def calcul_pointsuivant_barriere(*args):#ça ne marche pas avec le randint
  56.     if x>=18.29 :
  57.         return([v0,x,y,alpha])
  58.     elif (y >= 1.05) :
  59.         alpha=alpha-pi/2#+randint(0,pi/18)
  60.         return(calcul_pointsuivant(*args))
  61.     elif (y <= 0) :
  62.         alpha=alpha+pi/2#+randint(0,pi/18)
  63.         return(calcul_pointsuivant(*args))
  64.  
  65.     return(calcul_pointsuivant(*args))
  66.  
  67. def trajectoire_barriere(*args) :
  68.     LX=[]
  69.     LY=[]
  70.     v,x,y,alpha=v0,x0,y0,alpha
  71.     for i in range(0,N) :
  72.         LX.append(calcul_pointsuivant_barriere(v,x,y,alpha)[1])
  73.         LY.append(calcul_pointsuivant_barriere(v,x,y,alpha)[2])
  74.         alpha=calcul_pointsuivant_barriere(v,x,y,alpha)[3]
  75.         x,y=LX[i],LY[i]
  76.     return(LX,LY)
  77.  
  78. def coordonnees_barriere(*args):#il faudrait trouver un moyen pour qu'on n'ai pas à définir le N
  79.     sb=trajectoire_barriere(*args)
  80.     X=sb[0]
  81.     Y=sb[1]
  82.     n=len(Y)
  83.     L=[]
  84.     for i in range (n):
  85.         L.append((X[i],Y[i]))
  86.     return(L)
  87.  
  88.  
  89. #création de la fenêtre principale
  90. fenetre = Tk()
  91. fenetre.title('Bowling')
  92. #initialisation des variables
  93. v0= StringVar()
  94. x0= StringVar()
  95. y0= StringVar()
  96. alpha= StringVar()
  97. N= StringVar()
  98. #définition de la zone d'entrée
  99. v0_entree = ttk.Entry(fenetre, width=7, textvariable = v0)
  100. x0_entree = ttk.Entry(fenetre, width=7, textvariable = x0)
  101. y0_entree = ttk.Entry(fenetre, width=7, textvariable = y0)
  102. alpha_entree = ttk.Entry(fenetre, width=7, textvariable = alpha)
  103. N_entree = ttk.Entry(fenetre, width=7, textvariable = N)
  104. #Définition des widgets
  105. bouton2 = Button(fenetre, text = "Quitter", command = fenetre.destroy)
  106. bouton = ttk.Button ( fenetre, text = "Avec barrières", command = coordonnees_barriere)
  107. bouton3 = ttk.Button ( fenetre, text = "Sans barrière", command = trajectoire_sansbarriere)
  108. message = Label(fenetre, text= "Choisir une option")
  109. #Placement des widgets dans le fenêtre principale
  110. message.grid()
  111. bouton.grid()
  112. bouton2.grid()
  113. bouton3.grid()
  114. N_entree.grid()
  115. alpha_entree.grid()
  116. x0_entree.grid()
  117. y0_entree.grid()
  118. v0_entree.grid()
  119. #Boucle sur les évènements liés à la fenêtre principale
  120. fenetre.mainloop()
  121. fenetre.configure(bg = 'yellow')
  122. fenetre.geometry("700*700")
  123.  
  124.  
  125.