Idée -> Créer un F1 Manager

Sujets variés concernant le développement en PureBasic
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Idée -> Créer un F1 Manager

Message par Marc56 »

Shadow a écrit :Bon, on va essayer de commencer :)
Bien : « Les plus grandes aventures ont toujours commencées par un pas. »
Shadow a écrit :Pour commencer, comment ont fait en PB pour dire à un objet de suivre un chemin.
Le chemin à suivre est constitué d'une suite de couple de coordonnées x, y qu'il suffit de stocker dans une structure, puis on met tous les couples dans un tableau.
Après c'est comme pour tracer une courbe en math (x, y) sauf qu'on efface le point précédent avant d'afficher le suivant.
Simple logique.
Shadow a écrit :Seulement il y a un Hic là dedans car suivant où il se situe, il faudra que je lui dise de ralentir ou d’accélérer.
Changer l'intervalle de temps entre l'affichage de chaque point.
Shadow a écrit :Rien que ça déjà c'est hors de ma portée.
Il suffit de commencer point par point.
1. Placer un point dans un canvas
2. Déplacer un sprite sur une image
3. Déplacer des points
Shadow a écrit :De plus faudra que je puisse faire circuler plusieurs objets (Ici voiture) donc chacun devra avoir son chemin ou le même ?
Une structure pour les voitures
Une structure pour le chemin

La science infuse ça n'existe pas, le talent c'est 99% de transpiration et 1% d'inspiration :roll:
Programmer c'est uniquement de la logique (et regarder comment ont fait les autres sur des projets similaires)
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Idée -> Créer un F1 Manager

Message par Shadow »

Ok, je vais voir ça merci.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

Re: Idée -> Créer un F1 Manager

Message par Micheao »

Shadow
regarde ce code c'est un jeu où un serpent se deplace ( crée pas Falsam)

http://www.purebasic.fr/french/viewtopi ... it=serpent
Avatar de l’utilisateur
case
Messages : 1528
Inscription : lun. 10/sept./2007 11:13

Re: Idée -> Créer un F1 Manager

Message par case »

pour un F1 manager pas besoin de faire suivre une route réelle a moins de vouloir ajouter un élément visuel pour le joueur

pour moi il te suffirais d'avoir une table pour le circuit avec l longueur des différent tronçons ainsi que leur angle

par exemple une ligne droite pourait d'une longeur de 100m 100,0
un virage a 90° d'une longeur de 20 metres 20,90 ou 20,-90 pour le sens du virage

ensuite les voitures peuvent avoir plusieur caracteristiques comme acceleration vitesse max, adherence (suivant le train de pneus et les suspentions installées etc)

enfin les pilotes des caracteristiques comme pilotage, sens du danger
et des competences comme nerfs d'acier, vue, reflexes

du coup pour gerer ta course il te suffis pour chaque pilote de faire des tests de competences et de caracteristiques avec des bous par rapport a leurs competences ou des malus...en utilisant comme dificulté les troncons successifs et les caracteristiques de la voiture l'etat du revetement, la meteo etc...

ainsi apres avoir fait tout les tests de chaque circuit tu peux definir l'ordre d'arrivée...

et afficher ensuite les stats de chaque ecurie...

je le verrais comme ca.
ImageImage
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Idée -> Créer un F1 Manager

Message par Shadow »

Oui, c'est en partie comme ça aussi que je vois les choses.
Mais avec un visuel de base c'est bien aussi.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Idée -> Créer un F1 Manager

Message par Ar-S »

@spock, c'est carrément par là qu'il faut qu'il commence.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Idée -> Créer un F1 Manager

Message par falsam »

Un bout de code qui permet de placer des points de passages et faire circuler un sprite automatiquement.

Une procédure ( ViewCrossingPoints() ) permet d'afficher les points de passage afin de faciliter la mise en place de ces points de passages. Il suffit par la suite de commenter cette procédure.

Code : Tout sélectionner

EnableExplicit

;Structure d'un sprite pour le joueur 
Structure NewSprite
  id.i        
  x.d
  y.d
  Speed.d
  NexPoint.i  
EndStructure

;Structure d'un point de passage (On peut ajouter par exemple une nouvelle vitesse )
Structure NewPoint
  id.i
  x.i
  y.i
EndStructure
Global NewList CrossingPoints.NewPoint()

Global Event, Angle.d, LastAngle.f
Global Background
Global LadyBug.NewSprite

Declare AddCrossingPoint(x.i, y.i) 
Declare ViewCrossingPoints()       
Declare.f angleDiff(currentDir.f, wantDir.f, maxTurn.f)

;Initialisation diverses
InitNetwork() ;Pour le téléchargement des images

InitSprite()
InitKeyboard()

UseJPEGImageDecoder()
UsePNGImageDecoder()

;Téléchargement des images 
If ReceiveHTTPFile("http://www.falsam.com/download/images/sprites/i2.png", "i2.png") : EndIf
If ReceiveHTTPFile("http://www.falsam.com/download/images/sprites/blur1.jpg", "blur1.jpg") : EndIf
If ReceiveHTTPFile("http://www.falsam.com/download/images/sprites/pin.png", "pin.png") : EndIf

;Creation du screen
OpenWindow(0, 0, 0, 800, 600, "Point de passage")
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)

;Création des sprite
Background = LoadSprite(#PB_Any, "blur1.jpg")
ZoomSprite(Background, 800, 600)

;Création de la cocinelle : Initialisation de sa position initiale et de sa vitesse
LadyBug\id = LoadSprite(#PB_Any, "i2.png", #PB_Sprite_AlphaBlending)
LadyBug\x = 50
LadyBug\y = 60
LadyBug\Speed = 7

;On place quelques points de passage
AddCrossingPoint(50, 50)
AddCrossingPoint(250, 60)
AddCrossingPoint(400, 150)
AddCrossingPoint(700, 60)
AddCrossingPoint(750, 300)
AddCrossingPoint(650, 400)
AddCrossingPoint(650, 500)
AddCrossingPoint(500, 550)
AddCrossingPoint(300, 450)
AddCrossingPoint(200, 350)
AddCrossingPoint(150, 250)

;Boucle evenementielle
Repeat
  Repeat
    Event = WindowEvent() 
    Select event    
      Case #PB_Event_CloseWindow
        End
    EndSelect  
  Until event=0
  
  FlipBuffers()
  ExamineKeyboard()
  
  ;Affichage du background 
  DisplaySprite(Background, 0, 0)
   
  ;Affichage des points de passages
  ;Cette fonctionnalité n'est pas obligatoire
  ViewCrossingPoints()
  
  ;Selection du point de passage suivant
  SelectElement(CrossingPoints(), LadyBug\NexPoint)
  
  ;Ce point est t'il atteint ?
  If Abs(CrossingPoints()\x - LadyBug\x) < 10 And Abs(CrossingPoints()\y - LadyBug\y) < 10 
    If LadyBug\NexPoint < ListSize(CrossingPoints()) - 1
      LadyBug\NexPoint + 1
    Else 
      LadyBug\NexPoint = 0
    EndIf
  EndIf
    
  ;Calcul de l'angle en degre (0 à 360)
  Angle = ATan2(CrossingPoints()\x - LadyBug\x, CrossingPoints()\y - LadyBug\y) * 180 / #PI + 180
  
  Angle = angleDiff(LastAngle, Angle, 10)
  LastAngle = Angle
  
  ;Rotation de la cocinelle avec l'angle calculé
  ;La cocinelle initiale étant affiché à 90°, on retire 90 au résultat obtenu
  RotateSprite(LadyBug\id, Angle - 90, #PB_Absolute)
  
  ;Calcul de la nouvelle position de la cocinelle
  If Abs(CrossingPoints()\x - LadyBug\x) >= 1
    LadyBug\x - (LadyBug\Speed * Cos(Radian(Angle)))
  EndIf
  If Abs(CrossingPoints()\y - LadyBug\y) >= 1
    LadyBug\y - (LadyBug\Speed * Sin(Radian(Angle)))
  EndIf
  
  ;Affichage de la cocinelle
  DisplayTransparentSprite(LadyBug\id, LadyBug\x, LadyBug\y)
  
Until KeyboardPushed(#PB_Key_Escape)
  

Procedure AddCrossingPoint(x.i, y.i)
  AddElement(CrossingPoints())
  With CrossingPoints()
    \id = LoadSprite(#PB_Any, "pin.png", #PB_Sprite_AlphaBlending)
    \x = x
    \y = y
  EndWith
EndProcedure

Procedure ViewCrossingPoints()
  ForEach CrossingPoints()
    With CrossingPoints()
      DisplayTransparentSprite(\id, \x, \y)
    EndWith
  Next
EndProcedure

Procedure.f angleDiff(currentDir.f, wantDir.f, maxTurn.f)
  ;from http://stackoverflow.com/questions/20109394/rotate-angle-to-target-angle-via-shortest-side
  Protected directionDiff.f
  
  ;wantDir - votre direction de la cible
  ;maxTurn - le nombre maximum de degrés pour allumer
  ;currentDir - votre direction actuelle
  
  If wantDir >= (currentDir + 180)
    currentDir + 360
  ElseIf wantDir < (currentDir - 180)
    wantDir + 360
  EndIf
  
  directionDiff = wantDir - currentDir
  
  If directionDiff < -maxTurn
    directionDiff = -maxTurn
  ElseIf directionDiff > maxTurn
    directiondiff = maxTurn
  EndIf
  
  ProcedureReturn Mod(directionDiff + currentDir, 360)  ;retourner la direction résultante
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

Re: Idée -> Créer un F1 Manager

Message par Micheao »

Falsam il manque :cursordrag.png
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Idée -> Créer un F1 Manager

Message par falsam »

Micheao a écrit :Falsam il manque :cursordrag.png
Merci Micheao. Le code est corrigé.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Idée -> Créer un F1 Manager

Message par falsam »

La meme chose sur un model de circuit mais sans l'affichage des points de passages que j'ai commenté

Code : Tout sélectionner

EnableExplicit

;Structure d'un sprite pour le joueur 
Structure NewSprite
  id.i        
  x.d
  y.d
  Speed.d
  NexPoint.i  
EndStructure

;Structure d'un point de passage (On peut ajouter par exemple une nouvelle vitesse )
Structure NewPoint
  id.i
  x.i
  y.i
EndStructure
Global NewList CrossingPoints.NewPoint()

Global Event, Angle.d, LastAngle.f
Global Background
Global LadyBug.NewSprite

Declare AddCrossingPoint(x.i, y.i) 
Declare ViewCrossingPoints()       
Declare.f angleDiff(currentDir.f, wantDir.f, maxTurn.f)

;Initialisation diverses
InitNetwork() ;Pour le téléchargement des images

InitSprite()
InitKeyboard()

UseJPEGImageDecoder()
UsePNGImageDecoder()

;Téléchargement des images 
If ReceiveHTTPFile("http://www.falsam.com/download/images/sprites/i2.png", "i2.png") : EndIf
If ReceiveHTTPFile("http://www.falsam.com/download/images/sprites/formula.png", "formula.png") : EndIf
If ReceiveHTTPFile("http://www.falsam.com/download/images/sprites/pin.png", "pin.png") : EndIf

;Creation du screen
OpenWindow(0, 0, 0, 1024, 768, "Point de passage")
OpenWindowedScreen(WindowID(0), 0, 0, 1024, 768)

;Création des sprite
Background = LoadSprite(#PB_Any, "formula.png")

;Création de la cocinelle : Initialisation de sa position initiale et de sa vitesse
LadyBug\id = LoadSprite(#PB_Any, "i2.png", #PB_Sprite_AlphaBlending)
LadyBug\x = 340
LadyBug\y = 300
LadyBug\Speed = 7

;On place quelques points de passage
AddCrossingPoint(340, 340)
AddCrossingPoint(849, 613)
AddCrossingPoint(970, 404)
AddCrossingPoint(946, 152)
AddCrossingPoint(796, 120)
AddCrossingPoint(698, 197)
AddCrossingPoint(763, 359)
AddCrossingPoint(670, 642)
AddCrossingPoint(330, 620)
AddCrossingPoint(185, 411)
AddCrossingPoint(90, 312)
AddCrossingPoint(116, 208)

;Boucle evenementielle
Repeat
  Repeat
    Event = WindowEvent() 
    Select event    
      Case #PB_Event_CloseWindow
        End
    EndSelect  
  Until event=0
  
  FlipBuffers()
  ExamineKeyboard()
  
  ;Affichage du background 
  DisplaySprite(Background, 0, 0)
   
  ;Affichage des points de passages
  ;Cette fonctionnalité n'est pas obligatoire
  ;ViewCrossingPoints()
  
  ;Selection du point de passage suivant
  SelectElement(CrossingPoints(), LadyBug\NexPoint)
  
  ;Ce point est t'il atteint ?
  If Abs(CrossingPoints()\x - LadyBug\x) < 10 And Abs(CrossingPoints()\y - LadyBug\y) < 10 
    If LadyBug\NexPoint < ListSize(CrossingPoints()) - 1
      LadyBug\NexPoint + 1
    Else 
      LadyBug\NexPoint = 0
    EndIf
  EndIf
    
  ;Calcul de l'angle en degre (0 à 360)
  Angle = ATan2(CrossingPoints()\x - LadyBug\x, CrossingPoints()\y - LadyBug\y) * 180 / #PI + 180
  
  Angle = angleDiff(LastAngle, Angle, 10)
  LastAngle = Angle
  
  ;Rotation de la cocinelle avec l'angle calculé
  ;La cocinelle initiale étant affiché à 90°, on retire 90 au résultat obtenu
  RotateSprite(LadyBug\id, Angle - 90, #PB_Absolute)
  
  ;Calcul de la nouvelle position de la cocinelle
  If Abs(CrossingPoints()\x - LadyBug\x) >= 1
    LadyBug\x - (LadyBug\Speed * Cos(Radian(Angle)))
  EndIf
  If Abs(CrossingPoints()\y - LadyBug\y) >= 1
    LadyBug\y - (LadyBug\Speed * Sin(Radian(Angle)))
  EndIf
  
  ;Affichage de la cocinelle
  DisplayTransparentSprite(LadyBug\id, LadyBug\x, LadyBug\y)
  
Until KeyboardPushed(#PB_Key_Escape)
  

Procedure AddCrossingPoint(x.i, y.i)
  AddElement(CrossingPoints())
  With CrossingPoints()
    \id = LoadSprite(#PB_Any, "pin.png", #PB_Sprite_AlphaBlending)
    \x = x
    \y = y
  EndWith
EndProcedure

Procedure ViewCrossingPoints()
  ForEach CrossingPoints()
    With CrossingPoints()
      DisplayTransparentSprite(\id, \x, \y)
    EndWith
  Next
EndProcedure

Procedure.f angleDiff(currentDir.f, wantDir.f, maxTurn.f)
  ;from http://stackoverflow.com/questions/20109394/rotate-angle-to-target-angle-via-shortest-side
  Protected directionDiff.f
  
  ;wantDir - votre direction de la cible
  ;maxTurn - le nombre maximum de degrés pour allumer
  ;currentDir - votre direction actuelle
  
  If wantDir >= (currentDir + 180)
    currentDir + 360
  ElseIf wantDir < (currentDir - 180)
    wantDir + 360
  EndIf
  
  directionDiff = wantDir - currentDir
  
  If directionDiff < -maxTurn
    directionDiff = -maxTurn
  ElseIf directionDiff > maxTurn
    directiondiff = maxTurn
  EndIf
  
  ProcedureReturn Mod(directionDiff + currentDir, 360)  ;retourner la direction résultante
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Idée -> Créer un F1 Manager

Message par Micoute »

Superbe travail falsam, comme à ton habitude,

Le mien fait pâle figure à côté du tien

Code : Tout sélectionner

;F1 Grand Prix V.3 (5.41 LTS x86 Micoute)
EnableExplicit
Enumeration
  #Voiture
  #Voiture3D_IA
EndEnumeration

Enumeration Images
  #Circuit
EndEnumeration  

#LargeurEcr = 800
#HauteurEcr = 600
UsePNGImageDecoder()

InitSprite() : InitKeyboard() : InitMouse()
OpenScreen(#LargeurEcr, #HauteurEcr, 32, "")

;-Structures
Structure Vecteur2
  x.f
  y.f
EndStructure

Structure Entite
  Position.Vecteur2
  x.f
  y.f
  Angle.f
EndStructure


;-Declarations des fonctions
Declare.f curveangle(newangle.f,oldangle.f,increments.f)
Declare.f ReturnDegAngle(x1.f,y1.f,x2.f,y2.f)
Declare track_SmoothPoint(*A.Entite,*B.Entite, turnspeed.f=1.0)
Declare .f DistanceEntre2Points(ax.f, ay.f, bx.f, by.f)
#turnspeed = 4

; ************************************************************************************

Global checkpoint = 1
Global Quit
Global NbCheck
Global Fichier$
Global NumFichier = 1

If NumFichier = 1
  Restore Melbourne
ElseIf NumFichier = 2  
  Restore Catalogne
ElseIf NumFichier = 3
  Restore Adelaide
EndIf

Read.i NbCheck
; Tableau pour stocker les différents checkpoint à atteindre
Global Dim Target.Entite(NbCheck), i
For i = 1 To NbCheck
  Read.i Target(i)\x
  Read.i Target(i)\y
Next i

; Voiture.
; Ses coordonnées pour la position de départ
Global Voiture.Entite
Voiture\x = Target(1)\x
Voiture\y = Target(1)\y
Voiture\Angle = 0

; Super voiture de sport rouge dont on ne citera pas la marque.
CreateSprite(#Voiture3D_IA, 16, 16)
StartDrawing(SpriteOutput(#Voiture3D_IA))
Box(3, 0, 16, 10, RGB(255, 0, 0))
Box(12, 4, 4, 2, RGB(255, 255, 255))
StopDrawing()

If NumFichier = 1
  Fichier$ = "D:\Programmation\Prg Perso\P\PROJETS\F1 Grand Prix\Circuit Albert Park Melbourne Australie.png"
ElseIf NumFichier = 2  
  Fichier$ =  "D:\Programmation\Prg Perso\P\PROJETS\F1 Grand Prix\Circuit Catalogne Espagne.png"
ElseIf NumFichier = 3  
  Fichier$ = "D:\Programmation\Prg Perso\P\PROJETS\F1 Grand Prix\Circuit Adelaide Australie.png"
EndIf  

LoadImage(#Circuit, Fichier$,0)
; Ci-dessous on utilise le programme dans le mode fenêtré.

checkpoint = 1
Repeat
  ExamineKeyboard()
  ExamineMouse()
  Define Mx = MouseX()
  Define My = MouseY()
  
  
  StartDrawing(ScreenOutput())
  DrawImage(ImageID(#Circuit), 0, 0, #LargeurEcr, #HauteurEcr)
  
  DrawText((#LargeurEcr-TextWidth(GetFilePart(Fichier$, #PB_FileSystem_NoExtension)))/2, 10, GetFilePart(Fichier$, #PB_FileSystem_NoExtension), 0, Point(0,0))
  
  ; Affichage de tous les points du circuit à atteindre.
  ;For i = 1 To NbCheck
  ;  Circle(Target(i)\x, Target(i)\y, 2, RGB(0, 255, 255))
  ;Next i
  
  ;En route les petits bolides !!!
  Select checkpoint
    Case 1 To NbCheck
      If DistanceEntre2Points(Voiture\x, Voiture\y, Target(checkpoint)\x, Target(checkpoint)\y) > 5
        track_SmoothPoint(@Voiture, @Target(checkpoint), #turnspeed)
        ;Afficher le prochain checkpoint
        ;Circle(Target(checkpoint)\x, Target(checkpoint)\y, 2, RGB(255, 255, 255))
      Else
        checkpoint + 1
      EndIf
    Default
      checkpoint = 1
  EndSelect  
  
  ;DrawText(Voiture\x - 70, Voiture\y + 10, "{"+ Str(Target(checkpoint)\x) +" | "+ Str(Int(Voiture\x)) +", "+ Str(Target(checkpoint)\y) +" | "+ Str(Int(Voiture\y)) +"}" )
  
  StopDrawing()
  
  ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  ;+ La voiture se dirige vers le chemin du checkpoint à la vitesse 1.5
  ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  Voiture\x + 1.5 *Cos(Voiture\Angle*#PI/180)
  Voiture\y + 1.5 *Sin(Voiture\Angle*#PI/180)
  
  DisplayTransparentSprite(#Voiture3D_IA, Voiture\x - 8, Voiture\y - 8)
  RotateSprite(#Voiture3D_IA, Voiture\Angle, 0)
  If KeyboardPushed(#PB_Key_Escape)<>#Null : Quit=1 : EndIf
  FlipBuffers()
Until Quit=1
End



Procedure.f curveangle(newangle.f,oldangle.f,increments.f)
  If increments > 1
    If (oldangle + 360) - newangle < newangle - oldangle
      oldangle = 360 + oldangle 
    EndIf
    If (newangle + 360) - oldangle < oldangle - newangle
      newangle = 360 + newangle
    EndIf
    oldangle = oldangle - (oldangle - newangle) / increments
  EndIf
  
  If increments <= 1
    ProcedureReturn newangle
  EndIf
  
  ProcedureReturn oldangle
EndProcedure


Procedure.f ReturnDegAngle(x1.f,y1.f,x2.f,y2.f) ; DEGRES
  Protected A.f, b.f, c.f, Angle.f
  A.f = x1-x2
  b.f = y1-y2
  c.f = -Sqr(A*A+b*b)
  Angle.f = ACos(A / c) * 180 / #PI
  If y1 < y2 : Angle = 360 - Angle : EndIf
  ProcedureReturn Abs(Angle - 360)
EndProcedure


Procedure track_SmoothPoint(*A.Entite,*B.Entite, turnspeed.f=1.0)
  Protected AngDif.f, temp_yaw.f
  
  AngDif = ReturnDegAngle(*A\x,*A\y,*B\x,*B\y)
  temp_yaw.f = curveangle(AngDif, *A\Angle, turnspeed)
  *A\Angle = temp_yaw
EndProcedure

Procedure.f DistanceEntre2Points(ax.f, ay.f, bx.f, by.f)
  ProcedureReturn Sqr(Pow((bx - ax), 2) + Pow((by - ay), 2))
EndProcedure

DataSection
  Melbourne:
  Data.i 35
  Data.i 480, 461, 339, 458, 318, 424, 296, 420, 225, 420, 185, 417, 113, 398, 100, 389, 124, 349, 072, 296, 
         083, 223, 098, 189, 107, 167, 110, 145, 142, 144, 200, 105, 236, 117, 320, 177, 313, 205, 348, 262, 
         393, 302, 427, 312, 506, 310, 547, 276, 657, 268, 764, 323, 767, 343, 741, 407, 729, 418, 716, 418, 
         716, 419, 652, 403, 641, 411, 644, 439, 634, 458
  Catalogne:
  Data.i 29
  Data.i 385, 475, 125, 476, 109, 451, 102, 376,  88, 349,  62, 338,  26, 301,  29, 210,  51, 157, 250, 146, 
         277, 175, 269, 243, 137, 253, 133, 273, 218, 370, 294, 374, 311, 356, 317, 295, 396, 140, 649, 374, 
         680, 354, 681, 283, 601, 207, 594, 165, 628, 147, 740, 187, 749, 424, 732, 461, 688, 474
  Adelaide:
  Data.i 26
  Data.i 671, 217, 135, 578, 101, 585,  68, 574,  12, 480,  15, 450,  37, 422,  58, 417, 147, 415, 214, 418,
         266, 405, 393, 321, 424, 317, 464, 317, 542, 267, 549, 251, 547, 237, 527, 198, 525, 166, 533, 139,
         553, 111, 697,  15, 729,  13, 767,  35, 787,  80, 777, 141
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Idée -> Créer un F1 Manager

Message par falsam »

@Micoute: Je ne peux pas tester ton code car il manque les images.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Idée -> Créer un F1 Manager

Message par Micoute »

Eh oui, je regrette, mais je ne sais toujours pas comment on fait pour les joindre, bien qu'on m'explique à chaque fois !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Idée -> Créer un F1 Manager

Message par falsam »

Micoute a écrit :Eh oui, je regrette, mais je ne sais toujours pas comment on fait pour les joindre, bien qu'on m'explique à chaque fois !
Pas de compte dropbox ou autres ?
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Idée -> Créer un F1 Manager

Message par Micoute »

Hélas, non je ne sais pas comment ça fonctionne !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre