Как собрать 2D доску используя Swift? - PullRequest
0 голосов
/ 02 мая 2018

Я хочу создать двухмерную игровую доску (например, шахматную доску), и каждый квадрат имеет значение внутри (Int = 1). Эта доска изначально имеет 9 квадратов (3х3).

Затем мне нужен игрок, который начинается в центре барда, и когда я перемещаю игрока к краю доски, он расширяется.

Пример: игрок достигает квадрата [3,3], и доска превращается в доску 4x4.

Кроме того, когда игрок перемещается, он меняет значение внутри каждого квадрата с 0 на 1.

Это то, что я имею до сих пор

//Variables to get the player position and expand the board
let initialSize = 3
var newValueX = 0
var newValueY = 0
var newPlayerX = 0
var newPlayerY = 0
//Board
var board= [[Int]]()

struct Player {
    var X = 0
    var Y = 0
}

func expandBoard (){
    for k in 0..<9{
        for i in 0..<initialSize {
            for j in 0..<initialSize {
                array[k].append([i,j])
            }
        }
    }
}

func movePlayer(){
    var player = Player() //this goes to viewDidLoad
    player.X = newPlayerX
    player.Y = newPlayerY
}

Пример предполагаемого вывода: Игрок перешел на [0,3] и изменил значение квадрата с 1 на 0.

Как я могу сделать это правильно?

EDIT:

У меня есть

class Array2D<T> {
    var columns = 1//: Int
    var rows = 1//: Int

    var array: Array<T?>

     init(columns: Int, rows: Int) {
        self.columns = columns
        self.rows = rows

        array = Array<T?>(repeating: nil, count:rows * columns)
    }

    subscript(column: Int, row: Int) -> T? {
        get {
            return array[(row * columns) + column]
         }
        set(newValue) {
            array[(row * columns) + column] = newValue
        }
     }
}

func move(PX: Int, PY: Int){
    if (board[PX, PY] == true){
        moveCount += 1
        board[PX, PY] = false
    }
    if (PX == board.rows.magnitude){
        board.rows += 1
    }
    if (PY == board.columns.magnitude){
        board.columns += 1
    }
}

И когда я запускаю, я получаю «Поток 1: фатальная ошибка: индекс выходит за пределы диапазона» в строке (возвращаемый массив [(строка * столбцы) + столбец]) из индекса. Любая идея, как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

UICollectionView будет другим простым выбором, если вы не хотите использовать SpriteKit.

0 голосов
/ 02 мая 2018

Я бы порекомендовал использовать SpriteKit, в котором есть элемент Tile Map, отвечающий вашим требованиям, вот учебник, который может вам помочь

здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...