如何使用 Swift 构建 2D 板?



我想创建一个2D游戏板(如棋盘(,每个方块内部都有一个值(Int = 1(。该板最初有 9 个正方形 (3x3(。

然后我需要一个从吟游诗人的中心开始的玩家,当我将玩家移动到棋盘的边缘时,它会扩展。

示例:玩家到达 [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。

我怎样才能正确地做到这一点?

编辑:

我有

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:致命错误:索引超出范围"(返回数组[(行 * 列(+ 列](。 知道我该如何解决这个问题吗?

如果你不想使用SpriteKit,UICollectionView将是另一个简单的选择。

我建议使用SpriteKit,它有一个名为"Tile Map"的元素,可以满足您的要求,这里有一个可以提供帮助的教程。

最新更新