Programmation d'un circuit
Neirdah
-
neirdah -
neirdah -
Bonjour,
Je me présente d'abord. Je suis un étudiant en CPGE et nous avons un projet informatique à faire pour la fin d'année.
Nous avons choisi de le faire sur les 24h du mans. Nous avons coder l'interface mais nous arrivons dans une partie bien plus difficile : la modélisation du circuit.
Nous n'avons par bien d'idée de comment faire varier des paramètres en fonction d'une durée de course ou même de comment modéliser une voiture sur le circuit.
Je suis donc preneur de toute idée sur le sujet.
Merci.
Je me présente d'abord. Je suis un étudiant en CPGE et nous avons un projet informatique à faire pour la fin d'année.
Nous avons choisi de le faire sur les 24h du mans. Nous avons coder l'interface mais nous arrivons dans une partie bien plus difficile : la modélisation du circuit.
Nous n'avons par bien d'idée de comment faire varier des paramètres en fonction d'une durée de course ou même de comment modéliser une voiture sur le circuit.
Je suis donc preneur de toute idée sur le sujet.
Merci.
Configuration: Windows / Edge 88.0.705.56
A voir également:
- Programmation d'un circuit
- Application de programmation - Guide
- Court circuit antenne parabole ✓ - Forum TNT / Satellite / Réception
- Programmer un sms - Guide
- Mettre en veille un programme - Guide
- Programmer un mail gmail - Guide
12 réponses
Bonjour Neirdah,
Vaste sujet !
C'est un programme graphique ?
En 2D, donc en vue de dessus du circuit ?
Ou en 3D, donc avec les perspectives et tout et tout ?
Vaste sujet !
C'est un programme graphique ?
En 2D, donc en vue de dessus du circuit ?
Ou en 3D, donc avec les perspectives et tout et tout ?
Alors c'est un programme en 2D, le format 3D n'étant pas judicieux étant donné que l'on veut faire un jeu de gestion.
Le but sera de gérer sa voiture, la faire rentrer au stand dans les bons temps pour gagner la course.
Nous avons commencer à coder certaines fonctions.
Il nous manque tout de même l'essentiel, étant de modélisé la voiture par un point circulant sur le circuit.
Nous avons entendu parler des courbes de Béziers mais nous ne savons pas trop comment les mettre en œuvres.
Le but sera de gérer sa voiture, la faire rentrer au stand dans les bons temps pour gagner la course.
Nous avons commencer à coder certaines fonctions.
Il nous manque tout de même l'essentiel, étant de modélisé la voiture par un point circulant sur le circuit.
Nous avons entendu parler des courbes de Béziers mais nous ne savons pas trop comment les mettre en œuvres.
Ah ok, la voiture est simplement un point..
Les courbes de Bézier, c'est pour la forme du circuit ?
Et pourquoi pas une suite d'arcs de cercle ?
Ce serait plus simple, les courbes de Bézier sont pilotées par des points externes appelés
points de contrôle, et ce n'est pas facile à mettre en œuvre, il faut utiliser des équations
paramétriques du genre x(t)=... et y(t)= ...
Les courbes de Bézier, c'est pour la forme du circuit ?
Et pourquoi pas une suite d'arcs de cercle ?
Ce serait plus simple, les courbes de Bézier sont pilotées par des points externes appelés
points de contrôle, et ce n'est pas facile à mettre en œuvre, il faut utiliser des équations
paramétriques du genre x(t)=... et y(t)= ...
C'est notre prof de math qui nous a proposé de faire cela avec les courbes de Béziers mais une suite d'arc de cercle semble pertinente.
Je ne vois par contre pas bien comment faire cela et faire ensuite circulé la voiture dessus.
Je ne vois par contre pas bien comment faire cela et faire ensuite circulé la voiture dessus.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour Neirdah,
Comment as-tu fait ton interface graphique ?
Avec la bibliothèque Tkinter, ou autre ?
Il est facile de dessiner des arcs de cercle et un petit cercle qui représenterai la voiture ..
Comment as-tu fait ton interface graphique ?
Avec la bibliothèque Tkinter, ou autre ?
Il est facile de dessiner des arcs de cercle et un petit cercle qui représenterai la voiture ..
Peux-tu nous afficher le code de ton interface ici, en appliquant les balises de code ?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :
On pourrait voir ce que l'on peut faire ...
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :
def test(): print('test') test()
On pourrait voir ce que l'on peut faire ...
Bonjour,
globalement j'ai cela :
J'ai aussi l'insertion d'une image que j'aimerai mettre en fond des pages.
globalement j'ai cela :
from tkinter import * import random as rd class Menu() : WIDTH=1000 HEIGHT=500 def __init__(self) : self.f = Tk() self.f.title('Les 24 Heures Du Mans') self.f.config(bg = '#A4A4A4') self.f.geometry('1000x500') self.f.iconbitmap(r'C:\Users\lbhad\OneDrive\Documents\BCPST\2\Informatique\circuit_entier.ico') l=Label(self.f, text = 'Bienvenue dans Le Mans, Le jeu', bg = '#A4A4A4' ).pack() l0=Label(self.f, text = "Ceci est un jeu de simulation visant à recréer différentes années de la célèbre course des 24h du Mans.\nVous allez être projeté au coeur de l'une de ces années avec pour objectif de réussir à gagner.\nPlusieurs paramètres seront pris en compte pour cela.\nNous vous laissons découvrir tout cela... Bon jeu !", bg = '#A4A4A4').pack() b0 = Button(self.f, width = '10', text = 'Suite !', bg = '#A4A4A4', command=self.s).pack() bEnd = Button(self.f, text = 'Quitter', command = self.destroyf).pack(side=BOTTOM) self.f.mainloop() def Ecuries(self) : self.f1 = Tk() self.f1.title('Les 24 Heures Du Mans') self.f1.config(bg = '#A4A4A4') self.f1.geometry('1000x500') l1 = Label(self.f1, text = 'Veuillez choisir votre écurie.', bg = '#A4A4A4').pack() l2 = Label(self.f1, text = 'Attention, chaque écurie possède ses propres caractéristiques !', bg = '#A4A4A4', fg = '#B40431').pack() l3 = Label(self.f1, text = 'Bon jeu !', bg = '#A4A4A4').pack() b1 = Button(self.f1, width = '10', text = "Ferrari", bg = '#A4A4A4', fg = '#FF0040', command=self.s1).pack() b2 = Button(self.f1, width = '10', text = 'Alpine', bg = '#A4A4A4', command=self.s1).pack() b3 = Button(self.f1, width = '10', text = 'Porsche', bg = '#A4A4A4', fg = '#F3F781', command=self.s1).pack() b4 = Button(self.f1, width = '10', text = 'Ford', bg = '#A4A4A4', fg = '#2E2EFE', command=self.s1).pack() b5 = Button(self.f1, width = '10', text = 'Shelby', bg = '#A4A4A4', fg = '#01A9DB', command=self.s1).pack() b6 = Button(self.f1, width = '10', text = 'Austin', bg = '#A4A4A4', fg = '#088A08', command=self.s1).pack() bEnd = Button(self.f1, text = 'Quitter', command = self.destroyf1).pack(side=BOTTOM) self.f1.mainloop() def Boost(self) : self.f2 = Tk() self.f2.title('Les 24 Heures Du Mans') self.f2.config(bg = '#A4A4A4') self.f2.geometry('1000x500') value = DoubleVar() l1 = Label(self.f2, text = 'Les pneus', bg = '#A4A4A4').pack() c1 = Checkbutton(self.f2, width = '100' , text = 'Soft tires', bg = '#A4A4A4', fg = '#58FA58').pack() c2 = Checkbutton(self.f2, width = '100' , text = 'Medium tires', bg = '#A4A4A4', fg = '#DF7401').pack() c3 = Checkbutton(self.f2, width = '100' , text = 'Wet time tires', bg = '#A4A4A4', fg = '#DF0101').pack() l2 = Label(self.f2, text = 'Les spoilers', bg = '#A4A4A4').pack() c4 = Checkbutton(self.f2, width = '100' , text = 'Spoiler basique', bg = '#A4A4A4', fg = '#58FA58').pack() c5 = Checkbutton(self.f2, width = '100' , text = 'Spoiler élite', bg = '#A4A4A4', fg = '#DF0101').pack() l3 = Label(self.f2, text = 'Puissance moteur', bg = '#A4A4A4').pack() s1 = Scale(self.f2, bg = '#A4A4A4', orient = HORIZONTAL, variable = value).pack() b1 = Button(self.f2, width = '10', text = 'Suite !', bg = '#A4A4A4', command=self.s2).pack() bEnd = Button(self.f2, text = 'Quitter', command = self.destroyf2).pack(side=BOTTOM) self.f2.mainloop() def circuit(self) : self.f3 = Tk() self.f3.title('Les 24 Heures Du Mans') self.f3.config(bg = '#A4A4A4') self.f3.geometry(str(WIDTH)+'x'+str(HEIGHT)+'+300+100') l1 = Label(self.f3, width = 20, text = 'Vos options en jeu.', bg = '#A4A4A4').place(x = 850, y = 15) l2 = Label(self.f3, width = 20 , text = 'Retour au stand', bg = '#A4A4A4').place(x = 850,y = 100) l3 = Label(self.f3, width = 20, text = 'Etat des pneus', bg = '#A4A4A4').place(x = 850, y = 280) l4 = Label(self.f3, width = 20, text = "Jauge d'essence", bg = '#A4A4A4').place(x = 850, y = 350) b1 = Button(self.f3, width = 20, text = "Plein d'essence", bg = '#A4A4A4').place(x = 850, y = 120) b2 = Button(self.f3, width = 20, text = "Changement pour pneu\nmedium", bg = '#A4A4A4').place(x = 850, y = 150) b2 = Button(self.f3, width = 20, text = "Changement pour pneu\nmou", bg = '#A4A4A4').place(x = 850, y = 195) b2 = Button(self.f3, width = 20, text = "Changement pour pneu\npluie", bg = '#A4A4A4').place(x = 850, y = 240) bEnd = Button(self.f3, text ='Quitter', command = self.destroyf3).place(x = 450, y = 475) self.f3.mainloop() def s(self) : self.f.destroy() self.Ecuries() def s1(self) : self.f1.destroy() self.Boost() def s2(self) : self.f2.destroy() self.circuit() def destroyf(self) : self.f.destroy() def destroyf1(self) : self.f1.destroy() def destroyf2(self) : self.f2.destroy() def destroyf3(self) : self.f3.destroy() start = Menu()
J'ai aussi l'insertion d'une image que j'aimerai mettre en fond des pages.
from tkinter import * class Interface(Tk): def __init__(self, path_image): super(Interface, self).__init__() self.image = PhotoImage(file=path_image) self.w, self.h = self.image.width(), self.image.height() self.canvas = Canvas(self, width=self.w, height=self.h) self.canvas.pack() self.canvas.create_image((self.w//2, self.h//2), image=self.image) self.mainloop() Interface(r"C:\Users\lbhad\OneDrive\Documents\BCPST\2\Informatique\logo2.png")
Bonjour Neirdah,
Ces 2 codes ne sont pas dans le même fichier ?
Et c'est un peu bizarre de re créer une fenêtre principale a chaque saisie, mais bon ...
(self.f1 = Tk(), etc ...)
Ceci dit, pour dessiner le circuit, il faut créer un Canvas dans la fenêtre qui est dans la
fonction circuit , voir cours Tkinter sur le Net ...
Et dans un Canvas, on peut dessiner toutes sortes de figures géométriques
Ces 2 codes ne sont pas dans le même fichier ?
Et c'est un peu bizarre de re créer une fenêtre principale a chaque saisie, mais bon ...
(self.f1 = Tk(), etc ...)
Ceci dit, pour dessiner le circuit, il faut créer un Canvas dans la fenêtre qui est dans la
fonction circuit , voir cours Tkinter sur le Net ...
Et dans un Canvas, on peut dessiner toutes sortes de figures géométriques
Bonjour,
je suis d'accord que c'est un peu bizarre de faire de cette façon et d'ouvrir une nouvelle fenêtre à chaque fois mais je ne sais pas comment faire autrement.
Les deux codes ne sont pas dans le même fichier parce que je n'arrive pas à relier les codes (je ne suis pas très bon en tkinter aha)
Après pour ce qui est de la modélisation j'ai fait un dessin du circuit mais je ne sais pas comment faire pour que la voiture circule dessus.
je suis d'accord que c'est un peu bizarre de faire de cette façon et d'ouvrir une nouvelle fenêtre à chaque fois mais je ne sais pas comment faire autrement.
Les deux codes ne sont pas dans le même fichier parce que je n'arrive pas à relier les codes (je ne suis pas très bon en tkinter aha)
Après pour ce qui est de la modélisation j'ai fait un dessin du circuit mais je ne sais pas comment faire pour que la voiture circule dessus.
Salut
d'ouvrir une nouvelle fenêtre à chaque fois mais je ne sais pas comment faire autrement.
Il faut utiliser la méthode Toplevel() au lieu de Tk(). Le problème en faisant plusieurs appels à Tk(), tu as autant de mainloop(), ça peut perturber le processeur.
Si tu as x fenêtres à créer, tu fais 1 appel à Tk() et x-1 appels à Toplevel()
d'ouvrir une nouvelle fenêtre à chaque fois mais je ne sais pas comment faire autrement.
Il faut utiliser la méthode Toplevel() au lieu de Tk(). Le problème en faisant plusieurs appels à Tk(), tu as autant de mainloop(), ça peut perturber le processeur.
Si tu as x fenêtres à créer, tu fais 1 appel à Tk() et x-1 appels à Toplevel()
Bonsoir Neirdah,
Rien n'empêche de mettre le contenu de ton 2eme code dans le premier
Mais ou exactement veux tu mettre ton image de fond de page ?
Car en fait, l'image principale de ta fenêtre, c'est un Canvas dans ta fonction circuit() et dans lequel tu vas dessiner ton circuit
" j'ai fait un dessin du circuit ...", donc tu l'as déjà dessiné graphiquement dans ta fenêtre , c'est
bien ça ou pas ?
Remarque: la fonction circuit plante car WIDTH et HEIGHT y sont inconnues
Rien n'empêche de mettre le contenu de ton 2eme code dans le premier
Mais ou exactement veux tu mettre ton image de fond de page ?
Car en fait, l'image principale de ta fenêtre, c'est un Canvas dans ta fonction circuit() et dans lequel tu vas dessiner ton circuit
" j'ai fait un dessin du circuit ...", donc tu l'as déjà dessiné graphiquement dans ta fenêtre , c'est
bien ça ou pas ?
Remarque: la fonction circuit plante car WIDTH et HEIGHT y sont inconnues
Bonjour,
Désolé de cette absence, nous avons profité de quelques congés.
Pour ce qui est de mon image de fond de page je souhaite la mettre sur les premières pages en fond avec le texte par dessus.
J'ai utilisé Gimp afin de créer une image réaliste du circuit et que j'aimerai donc insérer en fond afin que les voitures tournent dessus.
Je n'ai pas eu de problème particulier venant de WIDTH et HEIGHT
Désolé de cette absence, nous avons profité de quelques congés.
Pour ce qui est de mon image de fond de page je souhaite la mettre sur les premières pages en fond avec le texte par dessus.
J'ai utilisé Gimp afin de créer une image réaliste du circuit et que j'aimerai donc insérer en fond afin que les voitures tournent dessus.
Je n'ai pas eu de problème particulier venant de WIDTH et HEIGHT
Bonjour,
Je n'ai pas eu de problème particulier venant de WIDTH et HEIGHT
C'est sur qu'on ne voit rien en lançant le programme en double-cliquant sur le fichier, par exemple, mais en l'exécutant via IDLE, on voit ça:
File "C:\Phil\Dev\Python\tests\ccm\circuit.pyw", line 80, in circuit
self.f3.geometry(str(WIDTH)+'x'+str(HEIGHT)+'+300+100')
NameError: name 'WIDTH' is not defined
WIDTH n'est pas défini, normal, il est déclaré au début de la classe Menu(), mais dans la fonction circuit(), il est inconnu !
Je n'ai pas eu de problème particulier venant de WIDTH et HEIGHT
C'est sur qu'on ne voit rien en lançant le programme en double-cliquant sur le fichier, par exemple, mais en l'exécutant via IDLE, on voit ça:
File "C:\Phil\Dev\Python\tests\ccm\circuit.pyw", line 80, in circuit
self.f3.geometry(str(WIDTH)+'x'+str(HEIGHT)+'+300+100')
NameError: name 'WIDTH' is not defined
WIDTH n'est pas défini, normal, il est déclaré au début de la classe Menu(), mais dans la fonction circuit(), il est inconnu !