- Better random number generation for front-end: random() replaced with arc4random_uniform() ios-revival
authorantonc27 <antonc27@mail.ru>
Wed, 14 Oct 2015 21:25:49 +0200
branchios-revival
changeset 11206 2e80c9861818
parent 11205 9fd7b8d3cf4d
child 11207 279ed2931be8
- Better random number generation for front-end: random() replaced with arc4random_uniform()
project_files/HedgewarsMobile/Classes/GameConfigViewController.m
project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m
project_files/HedgewarsMobile/Classes/HWUtils.m
project_files/HedgewarsMobile/Classes/LevelViewController.m
project_files/HedgewarsMobile/Classes/MapConfigViewController.m
project_files/HedgewarsMobile/Classes/MissionTrainingViewController.m
project_files/HedgewarsMobile/Classes/VoicesViewController.m
--- a/project_files/HedgewarsMobile/Classes/GameConfigViewController.m	Wed Oct 14 02:28:32 2015 +0200
+++ b/project_files/HedgewarsMobile/Classes/GameConfigViewController.m	Wed Oct 14 21:25:49 2015 +0200
@@ -232,7 +232,6 @@
 -(void) loadNiceHogs {
     @autoreleasepool {
     
-    srand(time(NULL));
     NSString *filePath = [[NSString alloc] initWithFormat:@"%@/Hedgehog/Idle.png",GRAPHICS_DIRECTORY()];
     UIImage *hogSprite = [[UIImage alloc] initWithContentsOfFile:filePath];
     [filePath release];
@@ -245,10 +244,10 @@
         [self.imgContainer removeFromSuperview];
 
     self.imgContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 40)];
-    NSInteger numberOfHogs = 1 + random() % 20;
+    NSInteger numberOfHogs = 1 + arc4random_uniform(20);
     DLog(@"Drawing %ld nice hedgehogs", (long)numberOfHogs);
     for (int i = 0; i < numberOfHogs; i++) {
-        NSString *hat = [hatArray objectAtIndex:random()%numberOfHats];
+        NSString *hat = [hatArray objectAtIndex:arc4random_uniform((int)numberOfHats)];
 
         NSString *hatFile = [[NSString alloc] initWithFormat:@"%@/%@", HATS_DIRECTORY(), hat];
         UIImage *hatSprite = [[UIImage alloc] initWithContentsOfFile:hatFile];
@@ -269,9 +268,9 @@
         hog.animationDuration = 3;
         [animation release];
 
-        int x = 20*i+random()%128;
+        int x = 20*i+arc4random_uniform(128);
         if (x > 320 - 32)
-            x = i*random()%32;
+            x = i*arc4random_uniform(32);
         hog.frame = CGRectMake(x, 25, hog.frame.size.width, hog.frame.size.height);
         [self.imgContainer addSubview:hog];
         [hog startAnimating];
--- a/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m	Wed Oct 14 02:28:32 2015 +0200
+++ b/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m	Wed Oct 14 21:25:49 2015 +0200
@@ -252,8 +252,6 @@
 }
 
 +(void) startSimpleGame {
-    srand(time(0));
-
     // generate a seed
     CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
     NSString *seed = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid);
@@ -263,7 +261,7 @@
 
     // pick a random static map
     NSArray *listOfMaps = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:MAPS_DIRECTORY() error:NULL];
-    NSString *mapName = [listOfMaps objectAtIndex:random()%[listOfMaps count]];
+    NSString *mapName = [listOfMaps objectAtIndex:arc4random_uniform((int)[listOfMaps count])];
     NSString *fileCfg = [[NSString alloc] initWithFormat:@"%@/%@/map.cfg",MAPS_DIRECTORY(),mapName];
     NSString *contents = [[NSString alloc] initWithContentsOfFile:fileCfg encoding:NSUTF8StringEncoding error:NULL];
     [fileCfg release];
@@ -276,8 +274,8 @@
     NSArray *colorArray = [HWUtils teamColors];
     NSInteger firstColorIndex, secondColorIndex;
     do {
-        firstColorIndex = random()%[colorArray count];
-        secondColorIndex = random()%[colorArray count];
+        firstColorIndex = arc4random_uniform((int)[colorArray count]);
+        secondColorIndex = arc4random_uniform((int)[colorArray count]);
     } while (firstColorIndex == secondColorIndex);
     unsigned int firstColor = [[colorArray objectAtIndex:firstColorIndex] intValue];
     unsigned int secondColor = [[colorArray objectAtIndex:secondColorIndex] intValue];
--- a/project_files/HedgewarsMobile/Classes/HWUtils.m	Wed Oct 14 02:28:32 2015 +0200
+++ b/project_files/HedgewarsMobile/Classes/HWUtils.m	Wed Oct 14 21:25:49 2015 +0200
@@ -103,14 +103,13 @@
 +(NSInteger) randomPort {
     // set a new feed only at initialization time and forbid connecting to the server port
     if (activePorts == nil) {
-        srandom(time(NULL));
         activePorts = [[NSMutableArray arrayWithObject:[NSNumber numberWithInt:NETGAME_DEFAULT_PORT]] retain];
     }
 
     // pick a random number from the free ports list
     NSInteger res = 0;
     do {
-        res = (random() % 64511) + 1024;
+        res = (arc4random_uniform(64511)) + 1024;
     } while ([activePorts containsObject:[NSNumber numberWithInteger:res]]);
 
     // add this number to the forbdding list
--- a/project_files/HedgewarsMobile/Classes/LevelViewController.m	Wed Oct 14 02:28:32 2015 +0200
+++ b/project_files/HedgewarsMobile/Classes/LevelViewController.m	Wed Oct 14 21:25:49 2015 +0200
@@ -31,7 +31,6 @@
 #pragma mark View lifecycle
 -(void) viewDidLoad {
     [super viewDidLoad];
-    srandom(time(NULL));
 
     NSArray *array = [[NSArray alloc] initWithObjects:
                       NSLocalizedString(@"Brutal",@""),
@@ -133,7 +132,7 @@
     if (theSwitch.on) {
         numberOfSections = 2;
         [self.tableView insertSections:sections withRowAnimation:UITableViewRowAnimationFade];
-        level = 1 + (random() % ([levelArray count] - 1));
+        level = 1 + arc4random_uniform((int)[levelArray count] - 1);
     } else {
         numberOfSections = 1;
         [self.tableView deleteSections:sections withRowAnimation:UITableViewRowAnimationFade];
--- a/project_files/HedgewarsMobile/Classes/MapConfigViewController.m	Wed Oct 14 02:28:32 2015 +0200
+++ b/project_files/HedgewarsMobile/Classes/MapConfigViewController.m	Wed Oct 14 21:25:49 2015 +0200
@@ -62,7 +62,7 @@
     [seed release];
 
     // perform as if user clicked on an entry
-    NSIndexPath *theIndex = [NSIndexPath indexPathForRow:(random()%[source count]) inSection:0];
+    NSIndexPath *theIndex = [NSIndexPath indexPathForRow:arc4random_uniform((int)[source count]) inSection:0];
     [self tableView:self.tableView didSelectRowAtIndexPath:theIndex];
     if (IS_NOT_POWERFUL([HWUtils modelType]) == NO)
         [self.tableView scrollToRowAtIndexPath:theIndex atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
@@ -403,7 +403,6 @@
 
 -(void) viewDidLoad {
     [super viewDidLoad];
-    srandom(time(NULL));
 
     // initialize some "default" values
     self.slider.value = 0.05f;
--- a/project_files/HedgewarsMobile/Classes/MissionTrainingViewController.m	Wed Oct 14 02:28:32 2015 +0200
+++ b/project_files/HedgewarsMobile/Classes/MissionTrainingViewController.m	Wed Oct 14 21:25:49 2015 +0200
@@ -54,7 +54,7 @@
 }
 
 -(void) viewWillAppear:(BOOL)animated {
-    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:random()%[self.listOfMissions count] inSection:0];
+    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:arc4random_uniform((int)[self.listOfMissions count]) inSection:0];
     [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
     [self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
     [super viewWillAppear:animated];
--- a/project_files/HedgewarsMobile/Classes/VoicesViewController.m	Wed Oct 14 02:28:32 2015 +0200
+++ b/project_files/HedgewarsMobile/Classes/VoicesViewController.m	Wed Oct 14 21:25:49 2015 +0200
@@ -32,7 +32,6 @@
 #pragma mark View lifecycle
 -(void) viewDidLoad {
     [super viewDidLoad];
-    srandom(time(NULL));
 
     voiceBeingPlayed = NULL;
 
@@ -129,7 +128,7 @@
     NSString *voiceDir = [[NSString alloc] initWithFormat:@"%@/%@/",VOICES_DIRECTORY(),[voiceArray objectAtIndex:newRow]];
     NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:voiceDir error:NULL];
 
-    int index = random() % [array count];
+    int index = arc4random_uniform((int)[array count]);
 
     voiceBeingPlayed = Mix_LoadWAV([[voiceDir stringByAppendingString:[array objectAtIndex:index]] UTF8String]);
     [voiceDir release];