A set of classes for parsing, evaluating, and formatting die roll strings.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

SA_DiceBag.m 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. //
  2. // SA_DiceBag.m
  3. //
  4. // Copyright (c) 2016 Said Achmiz.
  5. //
  6. // This software is licensed under the MIT license.
  7. // See the file "LICENSE" for more information.
  8. #import "SA_DiceBag.h"
  9. #import <GameplayKit/GameplayKit.h>
  10. /*******************************************/
  11. #pragma mark SA_DiceBag class implementation
  12. /*******************************************/
  13. @implementation SA_DiceBag {
  14. GKRandomSource *_randomSource;
  15. // NSMutableDictionary <NSNumber *, GKRandomDistribution *> *_dice;
  16. }
  17. -(instancetype) init {
  18. self = [super init];
  19. if (!self) return nil;
  20. _randomSource = [GKMersenneTwisterRandomSource new];
  21. // _dice = [NSMutableDictionary dictionary];
  22. return self;
  23. }
  24. /****************************/
  25. #pragma mark - Public methods
  26. /****************************/
  27. -(NSUInteger) biggestPossibleDieSize {
  28. return NSUIntegerMax;
  29. }
  30. -(NSUInteger) rollDie:(NSUInteger)dieSize {
  31. return [_randomSource nextIntWithUpperBound:dieSize] + 1;
  32. // return [[self dieOfSize:dieSize] nextInt];
  33. }
  34. -(NSArray <NSNumber *> *) rollNumber:(NSUInteger)number
  35. ofDice:(NSUInteger)dieSize {
  36. return [self rollNumber:number
  37. ofDice:dieSize
  38. withOptions:0];
  39. }
  40. -(NSArray <NSNumber *> *) rollNumber:(NSUInteger)number
  41. ofDice:(NSUInteger)dieSize
  42. withOptions:(SA_DiceRollingOptions)options {
  43. NSMutableArray *rollsArray = [NSMutableArray arrayWithCapacity:number];
  44. for (NSUInteger i = 0; i < number; i++) {
  45. NSUInteger dieRoll;
  46. do {
  47. dieRoll = [self rollDie:dieSize];
  48. [rollsArray addObject:@(dieRoll)];
  49. } while ((options & SA_DiceRollingExplodingDice)
  50. && dieSize > 1
  51. && dieRoll == dieSize);
  52. }
  53. return rollsArray;
  54. }
  55. -(char) rollFudgeDie {
  56. NSInteger d3roll = [self rollDie:3];
  57. return (char) (d3roll - 2);
  58. }
  59. -(NSArray <NSNumber *> *) rollFudgeDice:(NSUInteger)number {
  60. NSMutableArray *rollsArray = [NSMutableArray arrayWithCapacity:number];
  61. for (NSUInteger i = 0; i < number; i++) {
  62. [rollsArray addObject:@([self rollFudgeDie])];
  63. }
  64. return rollsArray;
  65. }
  66. /****************************/
  67. #pragma mark - Helper methods
  68. /****************************/
  69. //-(GKRandomDistribution *) dieOfSize:(NSUInteger) dieSize {
  70. // if (_dice[@(dieSize)] == nil)
  71. // _dice[@(dieSize)] = [GKRandomDistribution distributionForDieWithSideCount:dieSize];
  72. //
  73. // return _dice[@(dieSize)];
  74. //}
  75. @end