Как заполнить 2-мерный массив пользовательскими объектами? быстрый - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь создать проект, в котором у меня есть сетка и такие персонажи, как Рыба и Орка.Я создал родительский класс Animal и два дочерних класса, которые наследуют животных.И я хочу заполнить доску (n * m) 5% косаткой и 35% рыбой.Как я могу заполнить сетку косатками и рыбой?здесь я попытался заполнить доску цифрами.

class Animal {


}
class Fish: Animal{
}
class Orca:Animal{
}
class Board{
private var content: [[Int?]]
private static func setupForNewGame(width: Int,height: Int)->[[Int]]{

    var matrix:[[Int]] = Array(repeating: Array(repeating: 0, count: width), count: height)
    let cellCount = width * height

    var penguinCount = Double(round(Double(cellCount) * 50.0 / 100.0))
    var grampusCount = Double(round(Double(cellCount) * 5.0 / 100.0))

    var arr:[Int] = Array(repeating: 0, count: cellCount)
    for i in 0...cellCount - 1{
        if (penguinCount > 0){
            arr[i] = 1
            penguinCount = penguinCount - 1
        }else if (grampusCount > 0){
            arr[i] = 2
            grampusCount = grampusCount - 1
        }else{
            arr[i] = 0
        }
    }
    let shuffledArr = arr.shuffled()
    var counter = 0
    for i in 0...width - 1{
        for j in 0...height - 1{
           matrix[i][j] = shuffledArr[counter]
            counter = counter + 1
        }

    }

    return matrix

}
}

1 Ответ

2 голосов
/ 26 июня 2019

Объявите массив matrix типа [[Animal?]] и используйте nil вместо 0

class Board {
    private var content: [[Animal?]] = []
    private static func setupForNewGame(width: Int,height: Int)->[[Animal?]] {

        var matrix:[[Animal?]] = Array(repeating: Array(repeating: nil, count: width), count: height)
        let cellCount = Double(width * height)

        let fishCount = Int(cellCount * 35.0 / 100.0)
        let orcaCount = Int(cellCount * 5.0 / 100.0)

        var arr:[Animal?] = Array(1...fishCount).map { _ in Fish() } + Array(1...orcaCount).map { _ in Orca() } + Array(repeating: nil, count: Int(cellCount)-fishCount-orcaCount)
        arr = arr.shuffled()

        var counter = 0
        for i in 0...width - 1{
            for j in 0...height - 1{
                matrix[i][j] = arr[counter]
                counter = counter + 1
            }
        }
        return matrix
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...