游戏中玩家围合形状识别与内部方块填充实现方法
方块竞技游戏闭合围地染色实现方案
直接按你拆分的两个核心环节落地即可,所有逻辑都适配栅格方块地图,不需要复杂的计算几何知识:
一、闭合形状识别逻辑
- 为每个玩家独立维护一个路径缓存队列,仅存储玩家离开自身已染色区域后走过的所有方块坐标,玩家每移动到新的未染色/其他玩家染色方块时,就把对应坐标压入队列。
- 闭合判定规则非常明确:当玩家移动后踩到的方块属于自身已有的染色区域,且当前路径缓存队列长度≥3(满足最小闭合图形的边数要求),即判定形成有效闭合形状。此时队列内存储的全部坐标+当前踩到的自身色块,共同构成闭合形状的完整边界。
- 加一层过滤逻辑:如果路径队列长度小于4、或者玩家踩中自身色块时和队列最后一个坐标的曼哈顿距离小于2,直接跳过判定,避免玩家在自身领地边缘来回蹭触发无效填充。
二、闭合区域内部填充逻辑
栅格地图下不要硬套计算几何的点在多边形内判定,直接用Flood Fill(泛洪填充)反向标记法,实现简单、运行效率极高,完全匹配你要的周长边界围合后内部全染色的效果:
- 先把本次识别到的所有闭合边界方块临时打上「边界阻挡」标记,填充过程中这些方块不可穿越。
- 取闭合边界的最小外接矩形范围(即边界坐标里最小/最大的X、Y值圈出来的矩形),不需要遍历全图,从矩形的四条边上所有不属于边界、也不属于玩家颜色的方块开始做泛洪遍历,所有能走到的方块全部标记为「外部区域」。
- 遍历这个最小外接矩形范围内的所有方块:凡是没被标记为外部区域、也不是边界阻挡、还没染成当前玩家颜色的方块,全部属于闭合形状内部,直接统一染成该玩家的专属颜色即可。
- 填充完成后清除所有临时标记,清空对应玩家的路径缓存队列,等待下一次路径闭合即可。
性能提示
单局8人的场景下,哪怕单块地图尺寸到200*200,这套逻辑的单帧运算量也不到1ms,完全不会出现卡顿;如果遇到玩家围出的形状特别大的情况,可以把填充逻辑放到分帧协程里跑,避免阻塞主线程。
内容的提问来源于stack exchange,提问作者Ofek150
相关产品推荐
相关产品推荐

