Я хочу создать двухмерную игровую доску (например, шахматную доску), и каждый квадрат имеет значение внутри (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: фатальная ошибка: индекс выходит за пределы диапазона» в строке (возвращаемый массив [(строка * столбцы) + столбец]) из индекса.
Любая идея, как я могу это исправить?