November 28, 2020, 02:11:55 PM

Author Topic: [bb] CalculateDice by * [ 1+ years ago ]  (Read 1146 times)

Offline BlitzBot

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

Description : This function will generate a value for you from a dice string you give it for example "2D6+10" would return between 12 and 22.

Code :
Code: BlitzBasic
  1. ;Attack dice system
  2. SeedRnd MilliSecs()
  3. Global AttackDice$ = "4D10*2D3";"50+D6+D20+D100-D20+1000"       ;minimum is -17 (1+1+1-1), Maximum is 125 (6+20+100-20)
  4.  
  5. Global cy=0
  6. Global Min=1000
  7. Global Max=0
  8.  
  9. For a=0 To 65535
  10.         C= CalculateDice( AttackDice$ )
  11.         If C<Min Then Min=C
  12.         If C>Max Then Max=C
  13. Next
  14.  
  15. Repeat
  16.         cy=0
  17.         Cls
  18.         Text 10, cy, CalculateDice( AttackDice$ )
  19.         Text 50, cy, "Min:"+Min
  20.         Text 150, cy, "Max:"+Max
  21.         WaitKey
  22. Until KeyDown( 1 )=1
  23. End
  24.  
  25. Function CalculateDice( DiceString$ )
  26.         Local Modifier$ = "+"
  27.         Local Dice$ = ""
  28.         Local DiceModValue=1                                            ;example 2D6 this var would be 2
  29.         Local DiceValue=0                                                       ;example 2D6 this var would be rand( 1, 6 )
  30.         Local IsDice=False                                                      ;true if this is a dice calculation
  31.         Local Char$=""
  32.         Local Value=0
  33.         Local TempValue=0
  34.        
  35.         If Len( DiceString$ )<1 Then Return                     ;empty strings just exit the function
  36.        
  37.         For DicePos=1 To Len( DiceString$ )
  38.                 Char$ = Upper$( Mid$( DiceString$, DicePos, 1 ) )
  39.                 Dice$ = Dice$ + Char$
  40.                 If Char$="+" Or Char$ = "-" Or Char$="*" Or Char$="/" Or DicePos=Len( DiceString$ )
  41.                         DiceModValue=1
  42.                         ;we hit a calculation
  43.                         DPos = Instr( Dice$, "D" )
  44.                         If DPos=0
  45.                                 ;its just a standard value
  46.                                 TempValue = Dice$
  47.                                
  48.                                 Select Modifier$
  49.                                 Case "+":       Value = Value +TempValue
  50.                                 Case "-":       Value = Value -TempValue
  51.                                 Case "*":       Value = Value *TempValue
  52.                                 Case "/":       Value = Value /TempValue
  53.                                 End Select             
  54.                         Else
  55.                                 ;its a dice calculation
  56.                                 IsDice=True
  57.                                 If DPos>1 Then DiceModValue = Left$( Dice$, DPos-1 )
  58.                                 DiceValue = Right$( Dice$, Len( Dice$ )-DPos )
  59.                                
  60.                                 ;add the dice so 50D80 would run for 50 cycles
  61.                                 For DK=1 To DiceModValue
  62.                                         ;use a temporary value as multiplication would multiply the whole value
  63.                                         ;rather than just was it needed to be multiplied by
  64.                                         TempValue = TempValue + Rand( 1, DiceValue )
  65.                                 Next
  66.                                
  67.                                 Select Modifier$
  68.                                 Case "+":       Value = Value +TempValue
  69.                                 Case "-":       Value = Value -TempValue
  70.                                 Case "*":       Value = Value *TempValue
  71.                                 Case "/":       Value = Value /TempValue
  72.                                 End Select
  73.                         EndIf
  74.        
  75.                         Dice$=""
  76.                         TempValue=0
  77.                         ;adjust modifier here as it has to affect the next calculation
  78.                         If DicePos<Len( DiceString$ ) Then Modifier$ = Char$
  79.                 EndIf
  80.         Next
  81.        
  82.         Return Value
  83. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal