Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Auteur : Cpl.Bator
Version : 19/07/2008
Poursuite d'un point

; PureBasic 4.20
 
#SW=800
#SH=600
#Deg2Rad = #PI/180 
 
InitSprite() : InitKeyboard() : InitMouse()
OpenScreen(#SW,#SH,32,"")
 
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
  Structure point ; Déjà déclarée dans les résidents sous windows
    x.f
    y.f
  EndStructure
CompilerEndIf
  
;-Structures
Structure VECTOR2
  x.f
  y.f
EndStructure
 
Structure ENTITY
  Position.VECTOR2
  Angle.f
EndStructure
  
;-Declarations des fonctions
Declare DrawArrow(Lenght.l , x.f , y.f , Angle.f)
Declare.f curveangle(newangle.f,oldangle.f,increments.f)
Declare.f ReturnDegAngle(x1.f,y1.f,x2.f,y2.f)
Declare track_SmoothPoint(*A.ENTITY,*B.ENTITY, turnspeed.f=1.0)
  
 
; ************************************************************************************
#NB_ARROW = 3
Dim Arrow.ENTITY(#NB_ARROW)
 
For i = 1 To #NB_ARROW
  Arrow(i)\Position\x = Random(#SW)
  Arrow(i)\Position\y = Random(#SH)
  Arrow(i)\Angle      = 0
Next

; Cible des "arrow" , coordonnées de la souris pour la position
Target.ENTITY
 
Repeat
  ClearScreen(0)
  ExamineKeyboard()
  ExamineMouse()
  
  Target\Position\x = MouseX()
  Target\Position\y = MouseY()
 
  StartDrawing(ScreenOutput())
    Circle(Target\Position\x,Target\Position\y,2,255)
  StopDrawing()

  For i = 1 To #NB_ARROW
    DrawArrow(50 , Arrow(i)\Position\x , Arrow(i)\Position\y , Arrow(i)\Angle)
    track_SmoothPoint(Arrow(i),Target,20)
   
    Arrow(i)\Position\x + 1 *Cos(Arrow(i)\Angle*#PI/180)
    Arrow(i)\Position\y + 1 *Sin(Arrow(i)\Angle*#PI/180)
  Next
 
  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) ; DEGREE
  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.ENTITY,*B.ENTITY, turnspeed.f=1.0)
  AngDif = ReturnDegAngle(*A\position\x,*A\position\y,*B\position\x,*B\position\y)
  temp_yaw.f = curveangle(AngDif,*A\Angle,turnspeed)
  *A\Angle = temp_yaw
EndProcedure
 
Procedure DrawArrow(Lenght.l , x.f , y.f , Angle.f)
 
  Protected ArrowA.Point,ArrowB.Point
  Protected ArrowBranchA.Point,ArrowBranchB.Point
   
  ArrowA\x = x + (Lenght/2) * Cos(Angle*#PI/180)
  ArrowA\y = y + (Lenght/2) * Sin(Angle*#PI/180)
  
  ArrowB\x = x - (Lenght/2) * Cos(Angle*#PI/180)
  ArrowB\y = y - (Lenght/2) * Sin(Angle*#PI/180)
   
  ArrowBranchA\x = ArrowA\x - (Lenght/3) * Cos((Angle+45)*#PI/180)
  ArrowBranchA\y = ArrowA\y - (Lenght/3) * Sin((Angle+45)*#PI/180)
  
  ArrowBranchB\x = ArrowA\x - (Lenght/3) * Cos((Angle-45)*#PI/180)
  ArrowBranchB\y = ArrowA\y - (Lenght/3) * Sin((Angle-45)*#PI/180)
   
  StartDrawing(ScreenOutput())
    LineXY(ArrowA\x,ArrowA\y,ArrowB\x,ArrowB\y,255)
    LineXY(ArrowA\x,ArrowA\y,ArrowBranchA\x,ArrowBranchA\y,255)
    LineXY(ArrowA\x,ArrowA\y,ArrowBranchB\x,ArrowBranchB\y,255)
    Circle(x+1,y+1,2,255)
  StopDrawing()
EndProcedure

Auteur : Octavius
Version : 28/10/2008
Téléchargez le zip
Création d'un éditeur de cartes pour le jeu "Medieval II : Total War"
Il s'agit d'un logiciel dont le but est d'éditer les cartes de campagne d'un jeu vidéo de stratégie qui s'appelle "Medieval II : Total War". En gros ça se passe en Europe pendant le moyen-âge, vous contrôlez une faction (la France par exemple) et le but c'est de gérer son royaume et de gagner de nouvelles provinces.
Mon logiciel permet de modifier ces provinces, d'en rajouter, d'en enlever, d'en modifier certaines caractéristiques, et tout plein d'autres trucs. D'habitude ça prend un temps fou en bidouillant les fichiers manuellement.

La source est dans l'archive, elle est explosée en une dizaine de fichiers pbi et fait environ 6000 lignes de code très denses.

Et pour finir, une copie d'écran :

Editeur de geomod

precedent    sommaire    suivant   

Consultez les autres pages sources


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2008  Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com