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数组的多重价值——它不仅是悔棋的基础还是手数统计和空棋盘判断的依据。一个好的数据结构设计可以让多个功能自然涌现。

相关新闻

鸿蒙新特性深度解析:从内核到生态的全方位升级

鸿蒙新特性深度解析:从内核到生态的全方位升级

1. 引言 2024年以来,华为鸿蒙(HarmonyOS)操作系统进入全新阶段,HarmonyOS NEXT(鸿蒙星河版)更是实现了从底层内核到上层框架的全面自研。本文将带您深入解读鸿蒙的最新核心特性,涵盖ArkUI增强、…

2026/7/7 1:25:52 阅读更多 →
10m/s超高速电梯:西奥XO-NEWIII如何树立行业速度标杆

10m/s超高速电梯:西奥XO-NEWIII如何树立行业速度标杆

一、超高速电梯的技术难点 电梯速度的提升,并非简单地换装更大功率的电机。当电梯运行速度从常规的1.75m/s提升到10m/s,一系列技术难题会呈几何级数放大。 超高速电梯的核心技术难点10m/s意味着电梯每秒运行10米,相当于时速36公里。在这种速度…

2026/7/7 1:23:52 阅读更多 →
嵌入式(C语言基础)

嵌入式(C语言基础)

1.内存分为四个区域:栈区,堆区,数据区,代码区栈区:由编译器自动分配,存放局部变量堆区:程序员手动分配,手动存放数据区:存放全局变量,静态变量代码区:只读,存放程序指令2.作用域和生命周期作用域…

2026/7/7 1:21:52 阅读更多 →

最新新闻

DTC诊断测试方法

DTC诊断测试方法

这篇文章用TSMaster工具从实操角度介绍IOS 14299中的诊断DTC测试方法,主要内容为如何搭建DTC测试环境以及测试方法 DTC的命名规则 DTC是Diagnostic Trouble Code的缩写,中文名称为诊断故障码,它的作用是将车辆上发生的故障通过固定的命名规…

2026/7/7 2:16:08 阅读更多 →
8G显存全自动AI漫剧制作:Stable Diffusion+ControlNet实战方案

8G显存全自动AI漫剧制作:Stable Diffusion+ControlNet实战方案

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 如果你正在寻找一个真正能本地部署、低显存要求的AI漫剧制作方案,那么这篇文章可能是你目前能找到的最实用指南。市面上很…

2026/7/7 2:14:07 阅读更多 →
本地化图生图解决方案:部署与优化实战指南

本地化图生图解决方案:部署与优化实战指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 1. 为什么我们需要本地化图生图解决方案 去年夏天,我帮一位设计师朋友处理紧急项目时,第一次深刻体会到云端A…

2026/7/7 2:12:06 阅读更多 →
Linux 下装 Oracle 11g 总失败?这套 UDEV + ASM + GRID 实战教程,帮你一次搞定

Linux 下装 Oracle 11g 总失败?这套 UDEV + ASM + GRID 实战教程,帮你一次搞定

📥 想跟着视频一步步操作? 文章末尾有 10 节完整视频 安装包 配置文件 的网盘下载链接,保存后随时回看。 你是不是也这样? 搜了一圈 Linux 下装 Oracle 11g 的教程,结果不是环境没配好,就是 UDEV 磁盘识别…

2026/7/7 2:12:06 阅读更多 →
【Bug已解决】OpenClaw macOS 报错 Operation not permitted 完全磁盘访问权限解决方案

【Bug已解决】OpenClaw macOS 报错 Operation not permitted 完全磁盘访问权限解决方案

【Bug已解决】OpenClaw macOS 报错 Operation not permitted 完全磁盘访问权限解决方案 1. 问题描述 在 macOS 上启动 OpenClaw 时,终端报出权限被拒绝的错误: zsh: operation not permitted尤其是在涉及读写某些系统敏感目录(如访问其他应用…

2026/7/7 2:10:06 阅读更多 →
Cadence Allegro 17.4 电源完整性(PI)设计:解决3A大电流下的电源压降超标问题

Cadence Allegro 17.4 电源完整性(PI)设计:解决3A大电流下的电源压降超标问题

Cadence Allegro 17.4 电源完整性设计实战:3A大电流场景下的压降优化策略1. 电源完整性设计的核心挑战与解决框架在高速嵌入式硬件设计中,电源分配网络(PDN)如同人体的血液循环系统,其稳定性直接决定整个系统的可靠性。…

2026/7/7 2:08:05 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻