HarmonyOS 小游戏《对战五子棋》开发第5篇-五子棋GameConstants常量与类型定义最佳实践
📅 2026/7/6 4:05:59
👁️ 次浏览
好的常量设计让代码自文档化——从GameConstants看类型定义的艺术代码如下/** * GameConstants.ets - 五子棋游戏常量与类型定义 *//** 棋盘尺寸 15x15 */exportconstBOARD_SIZE:number15;/** 空位 */exportconstEMPTY:number0;/** 黑棋 */exportconstBLACK:number1;/** 白棋 */exportconstWHITE:number2;/** AI难度等级 */exportenumDifficulty{EASY1,NORMAL2,HARD3}/** 游戏结果 */exportenumGameResult{PLAYING0,BLACK_WIN1,WHITE_WIN2,DRAW3}/** 落子位置 */exportclassMove{row:number;col:number;constructor(row:number,col:number){this.rowrow;this.colcol;}}/** 获取对手棋色 */exportfunctiongetOpponent(player:number):number{returnplayerBLACK?WHITE:BLACK;}/** 颜色名称 */exportfunctionplayerName(player:number):string{returnplayerBLACK?黑方:白方;}为什么需要独立的常量文件在游戏开发中魔法数字是代码质量的头号杀手。对比两种写法// 差到处是魔法数字if(board[7][7]0){...}if(count5)returntrue;this.currentPlayerplayer1?2:1;// 好语义清晰if(board[7][7]EMPTY){...}if(count5)returntrue;// 5是五子棋的固有规则可以接受this.currentPlayerplayerBLACK?WHITE:BLACK;GameConstants完整解析exportconstBOARD_SIZE:number15;// 15x15标准棋盘exportconstEMPTY:number0;// 空位exportconstBLACK:number1;// 黑棋exportconstWHITE:number2;// 白棋为什么棋子用数字而不是字符串性能数字比较比字符串快内存number占用的内存远小于string数组存储棋盘是number[][]用数字最自然序列化数字序列化/反序列化更简单枚举设计exportenumDifficulty{EASY1,NORMAL2,HARD3}exportenumGameResult{PLAYING0,BLACK_WIN1,WHITE_WIN2,DRAW3}设计要点枚举值从1开始0留给无或默认状态GameResult.PLAYING 0作为默认值枚举名用大写驼峰语义明确Move类exportclassMove{row:number;col:number;constructor(row:number,col:number){this.rowrow;this.colcol;}}Move是五子棋中最基础的数据结构——表示棋盘上的一个位置。用class而非interface是因为Move经常需要new Move(row, col)创建实例。辅助函数exportfunctiongetOpponent(player:number):number{returnplayerBLACK?WHITE:BLACK;}exportfunctionplayerName(player:number):string{returnplayerBLACK?黑方:白方;}这两个工具函数被多处复用getOpponent引擎中切换玩家、AI中获取人类棋色playerNameUI中显示当前玩家常量设计的通用原则1. 集中管理所有游戏常量放在一个文件中方便查找和修改// 改棋盘大小只需改一处exportconstBOARD_SIZE:number15;// 改成19就是围棋棋盘2. 命名清晰BOARD_SIZE而非SIZE或BSEMPTY而非EMPTY_CELL或NONEBLACK/WHITE而非COLOR_BLACK/COLOR_WHITE3. 语义分组// 棋盘相关exportconstBOARD_SIZE15;exportconstEMPTY0;// 棋子相关exportconstBLACK1;exportconstWHITE2;// 游戏状态exportenumGameResult{...}// AI相关exportenumDifficulty{...}AI评分常量AIPlayer中定义了一套完整的评分常量constSCORE_FIVE:number1000000;// 五连constSCORE_OPEN_FOUR:number100000;// 活四constSCORE_FOUR:number10000;// 冲四constSCORE_OPEN_THREE:number8000;// 活三constSCORE_THREE:number500;// 眠三constSCORE_OPEN_TWO:number400;// 活二constSCORE_TWO:number50;// 眠二constSCORE_ONE:number10;// 单子分值设计逻辑五连 活四 冲四 活三 眠三 活二 眠二 单子相邻级别约10倍差距确保高级棋型优先活四(100000)是冲四(10000)的10倍因为活四必胜而冲四可防总结GameConstants虽然只有50行代码但它奠定了整个项目的类型基础。好的常量设计能消除魔法数字提高可读性集中管理方便修改提供类型安全减少bug自文档化降低理解成本附
7月5日1.1;学习了GPIO的四种输出模式:通用输出推挽,通用输出开漏,复用输出推挽,复用输出开漏通用:单片机的cpu直接控制GPIO外设,输出高低电平复用:cpu通过其他外设间接控制GPIO外设&…
📅 2026/7/6 4:05:59
前言
2026 年,AI Agent 已从单点工具演化为多 Agent 协作系统。LangGraph、CrewAI、AutoGen 等框架可以编排多个 Agent,但这些 Agent 被"困"在同一个框架内。一旦需要与外部 Agent 通信,就变得非常困难。
A2A(Agent2A…
📅 2026/7/6 4:05:59
1. 这不是课本里的抽象公式,而是你每天都在用的概率思维 “Compound Probability”这个词乍一听像数学课上让人头皮发麻的术语,但其实它就藏在你早上决定带不带伞、刷到两条广告后点进哪个链接、甚至买彩票时心里默念“这次该轮到我了”的那一秒里。复合…
📅 2026/7/6 4:05:59
3步解锁你的音乐:告别平台限制,让加密音频自由播放 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址…
📅 2026/7/6 5:28:13
1. 概述
1.1 项目背景
EMS(Energy Management System)能源管理系统的 AI 预测服务,基于 PyTorch 构建深度学习模型,实现能源消耗的时序预测。系统采用 LSTM(长短期记忆网络)算法,能够捕捉时间序列数据中的长期依赖关系,为企业提供高精度的能源消耗预测能力。
1.2 核…
📅 2026/7/6 5:28:13
Inter字体系统技术决策指南:从屏幕显示优化到企业级应用实践 【免费下载链接】inter The Inter font family 项目地址: https://gitcode.com/gh_mirrors/in/inter
在数字界面设计领域,字体选择已从美学考量演变为技术决策的关键环节。Inter字体系…
📅 2026/7/6 5:28:13
在快节奏的现代生活中,寻找既健康又便捷的食物成为了许多人的追求。苦荞快餐粉以其独特的营养价值和食用方便性逐渐受到消费者的青睐。本文将重点介绍一款在市场上备受好评的产品——航飞苦荞快餐粉,并从多个角度对比分析,帮助您做出明智的选…
📅 2026/7/6 5:28:13
GitOps 密钥轮换:同步成功不代表凭据已经更新
一、密钥轮换容易半途而废
GitOps 管理配置很方便,但密钥轮换比普通配置更复杂。Secret 更新到集群,不代表应用已经重新加载;应用重新加载,不代表旧连接已经断开ÿ…
📅 2026/7/6 5:28:13
OpenDog V3:3小时打造你的智能四足机器人,运动精度提升60% 【免费下载链接】openDogV3 项目地址: https://gitcode.com/gh_mirrors/op/openDogV3
想象一下,你亲手组装的机器狗能在客厅里灵活穿梭,精准执行你的每一个指令。…
📅 2026/7/6 5:26:13
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray
你是否厌倦了Windows任务栏上密密麻麻的图标&…
📅 2026/7/6 0:01:19
1. 项目概述:一次对React Server Components核心安全机制的深度剖析 最近在安全研究圈里,CVE-2025-55182这个编号被频繁提及,它直指React生态中一个相对较新的概念——React Server Components(RSC)。作为一个长期关注…
📅 2026/7/6 0:01:20
星露谷物语终极MOD指南:5个步骤打造智能自动化农场 【免费下载链接】StardewMods Mods for Stardew Valley using SMAPI. 项目地址: https://gitcode.com/gh_mirrors/st/StardewMods
你是否厌倦了在星露谷物语中重复收割、加工、存储的繁琐操作?梦…
📅 2026/7/6 0:01:20
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/5 0:01:51
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/5 0:01:51
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/5 0:01:51
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/5 6:01:04
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/5 6:01:04
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/5 23:45:08