Ooops
January 26, 2021, 06:24:25 AM

Author Topic: [bb] Queueing behaviour by DarkNature [ 1+ years ago ]  (Read 400 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] Queueing behaviour by DarkNature [ 1+ years ago ]
« on: June 29, 2017, 12:28:40 AM »
Title : Queueing behaviour
Author : DarkNature
Posted : 1+ years ago

Description : Simulates queueing of entities (people, cars etc) at intersection points. Pretty simple to understand and re-use.
Feel free to use this as you wish but, please, say 'Hello' in the credits.


Code :
Code: BlitzBasic
  1. ; Queueing behaviour from DarkNature.
  2.  
  3. Graphics 640,480
  4.  
  5. Type person
  6.  
  7.         Field x,y
  8.         Field tx,ty
  9.         Field xd,yd
  10.         Field img
  11.  
  12. End Type
  13.  
  14. Type target
  15.  
  16.         Field x,y
  17.  
  18. End Type
  19.  
  20. Global maxx=GraphicsWidth()
  21. Global maxy=GraphicsHeight()
  22. Global peepSize=10
  23. Global maxpeeps=30
  24. Global numpeeps=0
  25. Global targets=3
  26.  
  27. SeedRnd(MilliSecs())
  28.  
  29. Function makePeople()
  30.        
  31.         imgPeep=CreateImage(peepSize,peepSize)
  32.         SetBuffer(ImageBuffer(imgPeep))
  33.         Color 255,255,255
  34.         Oval 0,0,peepSize,peepSize
  35.         Color 255,0,0
  36.         Oval 0,0,peepSize,peepSize,0
  37.         For i=0 To maxpeeps-1
  38.                 p.person=New person
  39.                 px=Rnd(maxx)
  40.                 py=Rnd(maxy)
  41.                 pimg=CopyImage(imgPeep)
  42.                 numpeeps=numpeeps+1
  43.                 MidHandle pimg
  44.         Next
  45.  
  46.         FreeImage imgPeep
  47.         SetBuffer BackBuffer() 
  48.        
  49. End Function
  50.  
  51. Function makeTargets()
  52.  
  53.         For i=0 To targets-1
  54.                 t.target=New target
  55.                 tx=Rnd(maxx)
  56.                 ty=Rnd(maxy)
  57.         Next
  58.  
  59. End Function
  60.  
  61. Function chooseTarget(p.person)
  62.        
  63.         tmpD=999999
  64.         For a.target=Each target
  65.                 tdist=Sqr((px-ax)^2+(py-ay)^2)
  66.                 If tdist<tmpD
  67.                         tmpD=tdist
  68.                         p       x=ax
  69.                         p       y=ay
  70.                 End If
  71.         Next
  72.  
  73. End Function
  74.  
  75. Function doPeople()
  76.  
  77.         For a.person=Each person
  78.        
  79.                 axd=0
  80.                 ayd=0
  81.                
  82.                 chooseTarget(a)
  83.                
  84.                 If ax>a x axd=-1
  85.                 If ay>a y ayd=-1
  86.                 If ax<a x axd=1
  87.                 If ay<a y ayd=1
  88.  
  89.                 For b.person=Each person
  90.                         If a<>b
  91.                        
  92.                                 tdistA=Sqr((ax-a        x)^2+(ay-a      y)^2)
  93.                                 tdistB=Sqr((bx-b        x)^2+(by-b      y)^2)
  94.                                 dist=Sqr((ax-bx)^2+(ay-by)^2)
  95.                                 cdist=peepSize*1.5
  96.                                
  97.                                 If dist<cdist
  98.                                         If tdistA>tdistB
  99.                                                 axd=0
  100.                                                 ayd=0
  101.                                         End If
  102.                                 End If
  103.                                
  104.                         End If
  105.                 Next
  106.                
  107.                 ax=ax+axd
  108.                 ay=ay+ayd
  109.                
  110.                 If ax=a x And ay=a      y Delete a: numpeeps=numpeeps-1
  111.                
  112.         Next
  113.        
  114. End Function
  115.  
  116. Function drawTargets()
  117.  
  118.         For t.target=Each target
  119.                
  120.                 Color 0,0,0
  121.                 Oval tx-10,ty-10,20,20
  122.                 Color 255,255,0
  123.                 Oval tx-10,ty-10,20,20,0
  124.        
  125.         Next
  126.  
  127. End Function
  128.  
  129. Function drawPeople()
  130.        
  131.         Color 255,255,255
  132.         For a.person=Each person
  133.                 DrawImage aimg,ax,ay
  134.         Next
  135.  
  136. End Function
  137.  
  138. ClsColor 0,0,100
  139. tim=CreateTimer(30)
  140. go=False
  141. makeTargets()
  142. makePeople()
  143. While Not KeyHit(1)
  144.        
  145.         WaitTimer(tim)
  146.         Cls
  147.         Color 255,255,0
  148.         Text 20,20,"Left: "+numpeeps
  149.         If go=False    
  150.                 Text 300,450,"press space"
  151.                 If KeyHit(57) go=True
  152.         End If
  153.         If go doPeople()
  154.         drawTargets()
  155.         drawPeople()
  156.         Flip
  157.         If numpeeps=0
  158.                 For t.target=Each target
  159.                         Delete t
  160.                 Next
  161.                 makeTargets()
  162.                 makePeople()
  163.         End If
  164.        
  165. Wend
  166. End


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal