Swift中如何关联Game类与Board类,创建Game实例时以指定宽高初始化Board
报错原因&关联逻辑说明
你当前代码有两处核心问题:
- Game类的
board属性语法错误:var board = [[String]]属于类型声明和赋值混淆,要么写var board: [[String]](只声明类型),要么写var board = [[String]]()(赋值空数组) - 现有Board类没有和Game做参数绑定,每次临时创建实例调用方法的写法不够合理,不符合你要的「Game初始化时自动用传入的高宽生成Board」的需求
修复后代码
class Game { var height: Int var width: Int var player = Player() // 直接持有Board实例,完成两个类的关联 var board: Board init(height: Int, width: Int) { self.height = height self.width = width // 初始化Game时直接把高宽参数传给Board,自动完成Board的初始化 self.board = Board(height: height, width: width) } } class Board { // 存储生成好的棋盘数组 var gameBoard: [[String]] // 给Board添加自定义初始化方法,接收高宽参数直接生成棋盘 init(height: Int, width: Int) { self.gameBoard = [] for i in 0...height - 1 { if i == 0 || i == height - 1 { gameBoard.append(Array(repeating: "🟫", count: width)) } else { var basicLine = Array(repeating: "⬜", count: width) basicLine[0] = "🟫" basicLine[basicLine.count - 1] = "🟫" gameBoard.append(basicLine) } } } } class Player { var playerPosition = (vertical: 1, horizontal: 1) enum Move { case up case down case right case left } func moveAlien(direction: Move) { switch direction { case .up: playerPosition.vertical += 1 case .down: playerPosition.vertical -= 1 case .right: playerPosition.horizontal += 1 case .left: playerPosition.horizontal -= 1 } } }
使用示例
你创建Game实例的时候会自动生成对应尺寸的Board,后续要操作棋盘直接调用Game实例的board属性即可:
// 创建高10、宽8的游戏实例,内部自动生成对应尺寸的棋盘 let myGame = Game(height: 10, width: 8) // 打印生成好的棋盘 print(myGame.board.gameBoard)
内容的提问来源于stack exchange,提问作者Johny1995QQ
相关产品推荐
相关产品推荐

