Projet BAC isn : programmer un circuit (style automobile)

Fermé
eyhe Messages postés 11 Date d'inscription jeudi 27 novembre 2014 Statut Membre Dernière intervention 6 mai 2015 - Modifié par eyhe le 6/05/2015 à 14:43
eyhe Messages postés 11 Date d'inscription jeudi 27 novembre 2014 Statut Membre Dernière intervention 6 mai 2015 - 6 mai 2015 à 14:45
Bonjour !
Je suis actuellement en terminale scientifique et c'est ma première année de cour d'ISN ... on est une promo assez importante et le prof est totalement débordé !
Du coup je suis perdue pour mon projet de fin d'année ...

Le but étant de créer un circuit qui fonctionnerait avec le module turtle
voila ce que j'ai fait avec ce module :

<code>from turtle import *
import time

#~ debut = time.time() #Temps
#~ S=0
 #==============image de fond===============
 
import tkinter
#~ import PIL.Image, PIL.ImageTk  #Permet d'ouvrir une image en jpg/png ...
#~ img_PIL = PIL.Image.open("dessin.png")

mafen = Screen()
marta = RawTurtle(mafen)

canevas = getcanvas()
#~ imgTK = PIL.ImageTk.PhotoImage(img_PIL)
#~ canevas.create_image(0,0, image=imgTK,tags="carte")
#~ jaune = PhotoImage(file = "j2.gif") #si l'image avait été en gif ...

banniere=canevas.create_rectangle(-320,-320,320,-250,outline="black",fill="grey",tags="banniere")
#~ canevas.itemconfig(banniere,text="Temps : " + str(S) #S sera la variable qui gere le temps
 
 
 
 #==============Sortie de Piste===============


données_tk = [(78, 88), (84, 78), (91, 68), (99, 59), (108, 51), (119, 45), (129, 40), (141, 36), (153, 34), (165, 33), (177, 34), (189, 36), (200, 40), (211, 44), (221, 51), (231, 58), (240, 66), (246, 75), (253, 84), (259, 93), (265, 102), (272, 110), (280, 118), (289, 124), (299, 128), (310, 130), (322, 130), (333, 127), (343, 123), (353, 118), (363, 111), (372, 104), (381, 97), (389, 90), (399, 83), (408, 77), (418, 72), (429, 68), (441, 67), (452, 67), (463, 70), (473, 77), (481, 85), (487, 96), (490, 107), (491, 119), (489, 131), (486, 142), (480, 152), (473, 162), (465, 170), (456, 178), (446, 185), (435, 190), (424, 195), (413, 199), (402, 203), (379, 211), (368, 214), (357, 219), (346, 223), (335, 228), (325, 234), (315, 241), (306, 249), (298, 258), (292, 268), (287, 278), (284, 290), (283, 302), (285, 314), (289, 325), (297, 337), (305, 344), (314, 349), (328, 354), (338, 356), (348, 356), (358, 355), (368, 353), (386, 346), (404, 336), (413, 331), (421, 325), (429, 318), (444, 305), (460, 292), (468, 286), (476, 280), (484, 274), (493, 269), (511, 260), (530, 255), (540, 254), (550, 254), (560, 256), (570, 259), (583, 265), (594, 275), (603, 286), (609, 299), (613, 312), (615, 327), (614, 341), (611, 355), (606, 368), (598, 381), (589, 392), (579, 402), (568, 411), (555, 418), (542, 424), (529, 429), (513, 433), (496, 436), (480, 437), (463, 437), (447, 436), (430, 435), (414, 432), (397, 430), (364, 425), (348, 423), (331, 421), (315, 420), (298, 419), (282, 420), (265, 421), (249, 425), (232, 429), (216, 434), (199, 439), (183, 444), (167, 449), (150, 453), (133, 456), (116, 457), (99, 457), (82, 454), (66, 448), (51, 440), (38, 429), (28, 415), (21, 399), (19, 383), (21, 366), (27, 351), (35, 336), (47, 324), (60, 314), (74, 305), (90, 299), (109, 293), (128, 289), (147, 284), (165, 276), (177, 269), (188, 259), (196, 247), (200, 233), (200, 223), (197, 210), (189, 199), (179, 191), (168, 185), (151, 179), (126, 174), (109, 169), (93, 161), (84, 152), (77, 142), (72, 127), (72, 111), (75, 96),(78, 88)]

données = []
x0 = 640//2
y0 = 480//2

for d in données_tk : 
 données = données + [(d[0]-x0, y0-d[1])]

def distance(A,B) : # carré de la distance 
 D = (A[0]-B[0])**2+(A[1]-B[1])**2
 return D

def hors_circuit(marge) :
 resultat = True  # à priori on est hors circuit
 P = marta.position()
 for D in données :
  if distance(P,D) < marge :
   resultat = False # matra est près d'un point de contrôle, donc n'est pas hors circuit
 return resultat
 
marta.goto( données[0] ) # place marta sur un point du circuit



 #==============Tortue===============
 
marta.shape("turtle")


def gauche() :
 marta.left(5)
 mafen.delay(10)

def droite() :
 marta.right(5)
 mafen.delay(10)


def ralentis() :
 global pas
 if pas > 0 : pas  = pas-0.5


def accelere() :
 global pas
 if pas < 8 : pas  = pas+0.5


pas = 1
def demarre() :
 global actif
 actif = True
 while actif :
  print ("c'est bon")  #marta est bien dans le circuit
  mafen.delay(50)
  marta.forward(pas)
  print(marta.position())


def stop() :
 global actif
 actif = False
 print("arret demandé")
 

if hors_circuit(10) :  #marta est hors circuit : stop --> perdu
 
 actif = False 
 print("perdu") 


def quitte() :
 mafen.bye()


mafen.onkey(gauche, "Left")
mafen.onkey(droite, "Right")
mafen.onkey(ralentis, "Down")
mafen.onkey(accelere, "Up")
mafen.onkey(demarre, "Return")
mafen.onkey(stop, "Escape")
mafen.onkey(quitte, "Q")
mafen.onkey(quitte, "q")


#~ fin = time.time()
#~ print ("temps d'exécution : ",round (fin-debut,0),"s")

mafen.listen()
mafen.mainloop()
</code>
J'en suis la ! le problème c'est que je n'arrive pas a programmer le fait que lorsque la tortue s'éloigne trop du circuit on ait perdu ....
(j'aurais aussi voulu mettre un chrono qui s'arrête quand on perd ou qu'on arrive au bout du circuit : d'où le bandeau... mais bon il faudrait déjà qu'il fonctionne correctement)

Bref voila si quelqu'un a la patience de m'aider un peu ça serait sympa :)
A voir également:

1 réponse

eyhe Messages postés 11 Date d'inscription jeudi 27 novembre 2014 Statut Membre Dernière intervention 6 mai 2015
6 mai 2015 à 14:45


(l'image qui s'ouvre en fond au début normalement)
0