2017-10-18 60 views
0

可以說你犯了個遊戲,這個遊戲已經在程序上由用戶在他的世界裏創造菜單基於種子斯威夫特3

輸入的種子產生的地形和這個種子生成一組的隨機值只有在種子發生變化時纔會改變的值

例如,假設您想要獲得隨機的一組整數以在for循環中生成,並從數組中隨機抽取,整數集每次都保持相同,每次運行for-loop時,以相同的順序從陣列中選擇相同的項目,直到您更改種子爲止

一個怎麼會在我的代碼迅速

實現這一這裏我可以得到地形產卵的,但它不會產生相同的每一次這正是我試圖得到它做

override func didMove(to view: SKView) { 

    let tile1 = SKTileDefinition(texture: SKTexture(imageNamed: "stone") ,size: CGSize(width: 64, height: 64)) 
    let tile2 = SKTileDefinition(texture: SKTexture(imageNamed: "water") ,size: CGSize(width: 64, height: 64)) 
    let tile3 = SKTileDefinition(texture: SKTexture(imageNamed: "sand") ,size: CGSize(width: 64, height: 64)) 
    let tile4 = SKTileDefinition(texture: SKTexture(imageNamed: "grass") ,size: CGSize(width: 64, height: 64)) 

    let tileGroup1 = SKTileGroup(tileDefinition: tile1) 
    let tileGroup2 = SKTileGroup(tileDefinition: tile2) 
    let tileGroup3 = SKTileGroup(tileDefinition: tile3) 
    let tileGroup4 = SKTileGroup(tileDefinition: tile4) 
    let tileGroup5 = SKTileGroup(tileDefinition: tile4) 
    let tileGroup6 = SKTileGroup(tileDefinition: tile4) 

    let tileSet = SKTileSet(tileGroups: [tileGroup1,tileGroup2,tileGroup3,tileGroup4,tileGroup5,tileGroup6]) 

    let columns = 5 
    let rows = 5 

    let tileSize = CGSize(width: 64, height: 64) 

    //this is another GKNoise class called Noise 
    let noise = Noise() 
    let noiseMap = GKNoiseMap(noise, size: vector_double2(10.0,10.0), origin: vector_double2(0.0,0.0), sampleCount: vector_int2(100), seamless: true) 
    //this is another SKTileMapNode Class called TileMap and a class func called tileMapNodes 
    let tileMap = TileMap.tileMapNodes(tileSet: tileSet, columns: columns, rows: rows, tileSize: tileSize, from: noiseMap, tileTypeNoiseMapThresholds: [(-1.0 as NSNumber),(+1.0 as NSNumber)]) 

    tileMapNode = tileMap.first! 

    let seed = Int 

    for column in 0 ..< tileMapNode.numberOfColumns { 
     for row in 0 ..< tileMapNode.numberOfRows { 
      let rand = Int(arc4random_uniform(UInt32(tileSet.tileGroups.count))) 
      print(rand) 
      let tile = tileMapNode.tileSet.tileGroups[rand] 
      tileMapNode.setTileGroup(tile, forColumn: column, row: row) 
     } 
    } 
+0

你寫了一些代碼嗎?請張貼它 - 然後我們可以給你一些提示 – AlexWoe89

+0

看看這個答案。它提供您需要的種子行爲。 https://stackoverflow.com/a/38679898/1630618 – vacawama

回答

1

如果您想根據特定的種子使用,以產生一個隨機值:srand48drand48

函數srand允許您指定的種子:

srand48(230) 

然後drand48會給你一個雙0和1之間:

let doubleValue = drand48() 
你的情況

所以,如果你想在0和9之間的詮釋,你可以這樣做:

srand48(230) 
    print("Random number: \(1 + Int((drand48() * 8) + 0.5))") 
    print("Random number: \(1 + Int((drand48() * 8) + 0.5))") 
    print("Random number: \(1 + Int((drand48() * 8) + 0.5))") 

它將給你3張僞隨機數,直到你改變了種子

這裏是應用於新問題drand48

let seed = srand48(230) 

for column in 0 ..< tileMapNode.numberOfColumns { 
    for row in 0 ..< tileMapNode.numberOfRows { 
     let rand = Int(Double(tileSet.tileGroups.count) * drand48() - 0.5) 
     print(rand) 
     let tile = tileMapNode.tileSet.tileGroups[rand] 
     tileMapNode.setTileGroup(tile, forColumn: column, row: row) 
    } 
} 
+0

不錯!非常感謝!是否有無論如何讓它在for循環中生成一個隨機數,我可以用它從數組中隨機抽取數據? –

+0

我需要它一次又一次地生成相同的數字,直到我更改種子,因爲代碼正在計算列/行並隨機設置從數組中隨機抽取的紋理 –

+0

也給出了一個錯誤'推斷'種子'的常量'種子'有類型'虛空',這可能是意想不到的'如何解決? –