HarmonyOS 小游戏《对战五子棋》开发第9篇 - GomokuEngine核心引擎设计(四):悔棋功能与历史记录管理 悔棋是棋类游戏的标配——history数组的力量截图如下undo方法完整解析undo():boolean{// 1. 检查是否有棋可悔if(this.history.length0){returnfalse;}// 2. 弹出最后一步constlastMovethis.history.pop()!;this.board[lastMove.row][lastMove.col]EMPTY;// 3. 切换回上一个玩家this.currentPlayerthis.currentPlayerBLACK?WHITE:BLACK;// 4. 重置游戏状态this.resultGameResult.PLAYING;// 5. 更新lastMoveif(this.history.length0){constprevthis.history[this.history.length-1];this.lastMovenewMove(prev.row,prev.col);}else{this.lastMovenull;}returntrue;}悔棋的核心步骤步骤1空历史检查if(this.history.length0)returnfalse;没有落子记录时不能悔棋。步骤2撤销棋子constlastMovethis.history.pop()!;this.board[lastMove.row][lastMove.col]EMPTY;pop()移除并返回数组最后一个元素。!是非空断言——因为我们已经检查了length 0。步骤3切换玩家this.currentPlayerthis.currentPlayerBLACK?WHITE:BLACK;悔棋后当前玩家变回之前落子的玩家——因为那步棋被撤销了。步骤4重置游戏结果this.resultGameResult.PLAYING;即使之前已经分出胜负悔棋后游戏重新进入PLAYING状态。这是一个重要的设计决策——允许在游戏结束后悔棋继续游戏。步骤5更新lastMoveif(this.history.length0){constprevthis.history[this.history.length-1];this.lastMovenewMove(prev.row,prev.col);}else{this.lastMovenull;}如果还有历史记录lastMove指向倒数第二个落子否则置为null。history数组的多重作用悔棋功能history.pop()撤销最后一步空棋盘判断history.length 0等价于棋盘为空手数统计history.length就是当前手数复盘功能未来扩展可以回放整个对局UI层的悔棋控制// TwoPlayerPage中Button(悔棋).enabled(this.moveCount0this.resultGameResult.PLAYING).onClick((){this.undo();})privateundo():void{this.engine.undo();this.refreshBoardData();}UI层通过enabled控制悔棋按钮的可点击状态——只有手数0且游戏进行中才允许悔棋。AI对战中的悔棋问题本项目在AI对战模式中没有提供悔棋功能。如果需要实现需要撤销两步玩家AI// 假设的AI悔棋逻辑privateundoInAIBattle():void{this.engine.undo();// 撤销AI的落子this.engine.undo();// 撤销玩家的落子this.refreshBoardData();}对比其他撤销方案方案1history数组本项目优点简单直观O(1)撤销缺点需要额外的内存存储历史方案2保存棋盘快照// 每次落子前保存棋盘副本constsnapshotthis.board.map(row[...row]);snapshots.push(snapshot);// 悔棋时恢复this.boardsnapshots.pop();优点可以撤销到任意状态缺点内存开销大每次保存整个棋盘方案3命令模式classPlaceCommand{execute(board){/* 落子 */}undo(board){/* 撤销 */}}优点扩展性强支持复杂操作缺点过度设计本项目选择了最简单有效的方案1。总结悔棋功能的实现展示了history数组的多重价值——它不仅是悔棋的基础还是手数统计和空棋盘判断的依据。一个好的数据结构设计可以让多个功能自然涌现。

相关新闻

最新新闻

视觉优先多模态RAG:让土木标准图纸实现智能问答与合规检查

视觉优先多模态RAG:让土木标准图纸实现智能问答与合规检查

如果拿一叠土木标准图纸去问大模型“这个排水节点标高是否满足规范”,你很快会发现传统文本 RAG 基本帮不上忙。图纸上的结构构件、尺寸标注、图例符号、材料表几乎全是视觉信息,PDF 抽出来的文本要么是乱的,要么大量遗漏。PlanSightRAG 正是…

2026/8/31 11:40:01
Qwen3.8 27B部署实战:vLLM、FP8量化与8G显存方案

Qwen3.8 27B部署实战:vLLM、FP8量化与8G显存方案

阿里云 Qwen3.8 线上展示会预告已经放出来了。对做本地部署、模型推理和云上集成的同学来说,这次展示会最值得关注的不是“又一个新模型”,而是 Qwen3.8 这代模型从权重到部署栈的变化。从目前各个部署社区的热词来看,qwen3.8 27b、vllm 安装…

2026/8/31 11:40:01
AI 电动节日用品智能功率 MOSFET 精准选型方案

AI 电动节日用品智能功率 MOSFET 精准选型方案

随着 AI 技术在电动节日用品(如智能圣诞树、可编程灯光秀、互动装饰机械)中的广泛应用,对功率 MOSFET 提出了新要求:高效率、小体积、低功耗与高可靠性。微碧半导体(VBsemi)基于 Trench 与 SGT 工艺&#x…

2026/8/31 11:40:01
竖装显卡与高气流机箱怎么选?HAVN HS420 VGPU对比酷冷至尊HAF 500二代

竖装显卡与高气流机箱怎么选?HAVN HS420 VGPU对比酷冷至尊HAF 500二代

最近在帮朋友筹备一套白色海景房主机,也顺手看了不少高气流散热机箱,结果发现大家讨论最热烈的两款完全不是一个路子:一边是 HAVN HS420 VGPU,主打垂直显卡展示与现代化空间布局;另一边是酷冷至尊 HAF 500 二代&#x…

2026/8/31 11:40:01
基础模型如何提升B超影像感知?UltraPIPS实战解析

基础模型如何提升B超影像感知?UltraPIPS实战解析

B 模式超声(B-mode ultrasound)是临床最常见的二维灰阶成像方式,这类影像的 AI 分析一直比 CT、MRI 更棘手。UltraPIPS 这个方向的核心,就是用基础模型(foundation model)去改善模型对 B 超影像的“感知能力…

2026/8/31 11:40:01
企业级Agent记忆系统架构:从Context到长期记忆的工程实践

企业级Agent记忆系统架构:从Context到长期记忆的工程实践

如果把一个企业级 Agent 拆开来看,最容易被低估的技术模块就是记忆系统。对话能力再强,只要每次请求都像第一次见面,就无法建立稳定的用户画像,也无法保证多轮任务的一致性。企业级 Agent 与玩具 Demo 的分水岭,往往不…

2026/8/31 11:35:01