如何从现有变量创建随机多维数组

时间:2016-05-09 02:18:00

标签: python arrays python-2.7 multidimensional-array

我试图使用随机构建的二维数组作为基于文本的游戏I地图的地图。如果我这样定义世界空间:

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];     
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

[manager setTaskDidReceiveAuthenticationChallengeBlock:^NSURLSessionAuthChallengeDisposition(NSURLSession * _Nonnull session, NSURLSessionTask * _Nonnull task, NSURLAuthenticationChallenge * _Nonnull challenge, NSURLCredential *__autoreleasing  _Nullable * _Nullable credential) {
    NSString *authenicationMethod = challenge.protectionSpace.authenticationMethod;
    NSLog(@"Receive challenge: %@", authenicationMethod);
    if ([authenicationMethod isEqualToString:NSURLAuthenticationMethodHTTPDigest]) {
        *credential = [NSURLCredential credentialWithUser:@"username" password:@"password" persistence:NSURLCredentialPersistenceForSession];
        return NSURLSessionAuthChallengeUseCredential;
    }
    return NSURLSessionAuthChallengeCancelAuthenticationChallenge;
}];

我假设我会使用for循环来访问self.outer的数组数据 - 使用随机模块来确定将替换哪些tile - 但是我如何使用特定的修饰符变量随机替换该数据,并限制被替换的数据量?例如,如果我想要替换大约25个原始草,或者' g,用敌人或者瓷砖,我怎么能这样做呢?可能有5个随机放置的城镇?

感谢您的回复。

1 个答案:

答案 0 :(得分:1)

您可以使用randrange生成行索引和列索引,并在那里添加敌人。如果在给定单元格中已经存在敌人或其他对象,则跳过它并随机化新坐标:

import random

def add(grid, char, count):
    while count:
        row = random.randrange(len(grid))
        column = random.randrange(len(grid[0]))
        if world[row][column] == 'g':
            world[row][column] = char
            count -= 1

用法:

world = [['g'] * 60 for _ in xrange(60)]
add(world, 'e', 25)
add(world, 't', 5)

这种方法只有在您的世界稀疏时才有意义,即世界上大部分地区都是草地。如果世界将被不同的物体填充,那么跟踪自由空间并从那里随机选择一个瓦片将是更好的方法。