使用一个json文件来描述我们的战场
📅 2026/7/1 19:12:31
👁️ 次浏览
{ mapId: standard_24_lanes, name: 标准24格战场, positions: [ { id: 0, zone: friendly, lane: back }, { id: 1, zone: friendly, lane: back }, // ... { id: 6, zone: friendly, lane: front }, // ... { id: 12, zone: enemy, lane: front }, // ... { id: 18, zone: enemy, lane: back } // ... ] }2.建立战场数据模型package models // PositionLayout 定义了单个位置的静态属性 type PositionLayout struct { ID int json:id Zone string json:zone Lane string json:lane } // MapLayout 代表整个地图的静态布局 type MapLayout struct { MapID string json:mapId Name string json:name Positions []PositionLayout json:positions }3.初始化战场代码// BattlePosition 代表战斗中一个位置的动态状态。 type BattlePosition struct { Layout *models.PositionLayout // 引用静态布局信息 Fighters []*Fighter // 存储当前站在此位置的战斗者 } // Fight 管理两个战斗者之间的战斗状态。 type Fight struct { Team1 []*Fighter Team2 []*Fighter Log strings.Builder DataLog models.DataLog round int Battlefield []*BattlePosition // Battlefield 是一个切片索引直接对应位置ID FightersByID map[string]*Fighter // 新增一个用于快速查找的 map } // NewFight 创建并初始化一个新的战斗实例。 func NewFight(team1Chars, team2Chars map[int]models.Character, layout *models.MapLayout) *Fight { f : Fight{ Team1: []*Fighter{}, Team2: []*Fighter{}, DataLog: models.DataLog{Rounds: []models.Round{}}, Battlefield: make([]*BattlePosition, len(layout.Positions)), FightersByID: make(map[string]*Fighter), // 初始化map } // 1. 根据布局初始化战场 for i, posLayout : range layout.Positions { // 复制一份避免指针问题 layoutCopy : posLayout f.Battlefield[i] BattlePosition{ Layout: layoutCopy, Fighters: []*Fighter{}, // 初始化为空 } } // 2. 创建战斗者并放置到地图上 placeFighter : func(char models.Character, pos int) *Fighter { charCopy : char // 创建副本以确保每个fighter有自己的character实例 fighter : Fighter{ Character: charCopy, CurrentHP: charCopy.Attributes.HP, Position: pos, IsAlive: true, } // 将战斗者添加到对应位置的Fighters列表中 if pos 0 pos len(f.Battlefield) { f.Battlefield[pos].Fighters append(f.Battlefield[pos].Fighters, fighter) } f.FightersByID[charCopy.HeroID] fighter // 使用HeroID作为key return fighter } for pos, char : range team1Chars { fighter : placeFighter(char, pos) f.Team1 append(f.Team1, fighter) } for pos, char : range team2Chars { fighter : placeFighter(char, pos) f.Team2 append(f.Team2, fighter) } return f }4.分析这么做会有两个显而易见的好处:高效与清晰的查询针对两个需求,根据位置找人,或根据玩家id找人对比我们的旧方法 : 遍历所有角色检查每个角色的 Position 字段是不是xx,遍历所有角色检查每个角色的 HeroID 字段而现在我们只需要// 直接通过索引访问就像查字典一样精准 fightersAtPos : f.Battlefield[11].Fighters // 直接通过Key查找一步到位 fighter, found : f.FightersByID[hero-111-111]噢,这太棒了5.补充: make()方法说明make() 是Go语言的一个内置函数它的作用是预先分配内存并初始化一个特定类型的对象主要用于三种类型切片slices、映射maps和通道channels
我年轻时在大厂时,特别羡慕公司的业务架构师。 当时公司的架构师,是分三种的:
业务架构师:搭建业务流程体系,提升公司外部竞争力;基础架构师:技术基础设施搭建;数据架构师ÿ…
📅 2026/7/1 19:12:31
macOS百度网盘性能优化架构解析:动态库注入与限速破解技术实现 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS
在macOS平台的文件传输生态中…
📅 2026/7/1 19:12:31
在工业生产、建筑施工等领域,升降龙门架发挥着关键作用。选择一家合适的升降龙门架制造厂家,对于保障设备质量和工作效率至关重要。以下是一些挑选要点。技术实力与创新能力技术是衡量一个厂家的重要标准。像山东起诚起重机械,拥有各类先进的…
📅 2026/7/1 19:12:31
微信数据解密终极指南:3步永久保存珍贵聊天记录 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt
WechatDecrypt是一款专业的微信消息解密工具,采用先进的AES-256-CBC加密算法逆向工…
📅 2026/7/1 20:20:49
华硕笔记本终极轻量级控制工具:3步告别Armoury Crate的完整指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Ze…
📅 2026/7/1 20:20:49
3个技巧轻松搞定文件压缩:7-Zip免费工具实用指南 【免费下载链接】7z 7-Zip Official Chinese Simplified Repository (Homepage and 7z Extra package) 项目地址: https://gitcode.com/gh_mirrors/7z1/7z
你是否经常遇到电脑硬盘空间不足的烦恼?…
📅 2026/7/1 20:20:49
小Q 小Q
当你插上一根800G光模块,把AI集群里的GPU连成一张网,你猜这里面最贵的芯片是什么?不是那个跑光的激光器,也不是那个调信号的TIA——而是藏在光模块最深处、负责把模拟信号转成数字信号的那个DSP芯片。 这颗芯片叫 oDSP&a…
📅 2026/7/1 20:20:49
终极指南:3步掌握novel-downloader,打造你的私人数字图书馆 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader
在数字阅读时代,网络小说随时可能消失…
📅 2026/7/1 20:20:49
告别臃肿控制中心:G-Helper轻量化华硕笔记本性能管理完全指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenb…
📅 2026/7/1 20:18:48
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/1 0:00:39
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/1 0:00:39
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/1 0:00:39
6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…
📅 2026/6/30 10:04:37
引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…
📅 2026/7/1 15:35:39
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/1 0:00:39
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/1 0:00:39
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/1 0:00:39