You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言如何实现自定义尺寸的全局二维切片适配扫雷动态难度

核心问题说明

你之前的报错本质是混淆了Go中定长数组和切片的类型差异。Go里数组的长度是类型的组成部分,你最开始声明的var number [dimX][dimY]int8是绑定了固定16*16长度的数组类型,和[][]int8切片类型完全不兼容,所以赋值时会报类型不匹配错误。


最合理的实现方案

直接修改全局变量的声明类型为切片,再用make初始化即可,不需要用append,性能更高写法也更简洁:

第一步:修改全局变量声明

// 删掉原有的const dimX、dimY声明,全局变量全部改为切片类型,不绑定固定长度
var dimX, dimY, bombs int
var number [][]int8    // 存储单元格数值,-1为雷,0为空
var isOpen [][]bool    // 存储单元格是否已翻开
var isFlagged [][]bool // 存储单元格是否被标记为雷

第二步:获取用户输入后用make初始化切片

func main() {
    // 先读取用户选择的难度对应的尺寸、雷数
    Scan(&dimX, &dimY, &bombs)
    
    // 初始化第一层切片(X轴维度)
    number = make([][]int8, dimX)
    isOpen = make([][]bool, dimX)
    isFlagged = make([][]bool, dimX)
    
    // 循环初始化每一行的第二层切片(Y轴维度)
    for i := 0; i < dimX; i++ {
        number[i] = make([]int8, dimY)
        isOpen[i] = make([]bool, dimY)
        isFlagged[i] = make([]bool, dimY)
    }
    
    // 后续游戏逻辑正常读写上述切片即可,用法和你之前的定长数组完全一致
}

内容的提问来源于stack exchange,提问作者Favo02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:54:04