井字游戏,第3部分:使用命令存储撤消/重做

井字游戏第0部分:比较苗条和反应
井字游戏第1部分:Svelte and Canvas 2D
井字游戏第2部分:无状态复原/重做
井字游戏,第3部分:使用命令存储撤消/重做
井字游戏第4部分:使用HTTP与Flask后端交互

在这一部分中,我们将讨论使用“命令”模式实现井字游戏的方法,该方法存储撤消/重做团队而不是存储各个状态,并且可以随机访问游戏历史的每个步骤。


起始码

本文的上一部分以以下代码结尾: REPL代码


我们注释掉所有在进行更改时会产生错误的代码。 我们用以下单位填写比赛场地的所有单元格: REPL上的代码


状态储存

RELP代码


添加了状态存储。 现在,比赛字段显示状态存储库的内容。 默认情况下,比赛场地充满了平局。 在App组件中添加了状态输出。


命令类

RELP代码


我们将Command类添加到了helpers.js文件中。 历史记录类已更改为存储命令而不是状态。


在这里,我无法执行正确的状态更新。 如果有人知道,请告诉我。 而且,一般而言,是否可以通过这种方式使用状态存储?


移动翻译

RELP代码


添加了禁止点击已经填充的单元格的权限。 Command类的构造函数执行了移动的转换。 更正了状态输出。


运动场的状态

RELP代码


在之前的阶段,对于正确使用单独的状态存储存有疑问,因此将其删除,并将比赛场地的状态存储转移到History类-添加了状态字段。


随机存取

RELP代码
添加了步骤列表的输出。 通过顺序执行对选定团队的“撤消”或“重做”命令,可以随机访问游戏的任何步骤。


优胜者的决心

RELP代码
优胜者确定已经完成。 添加状态存储以显示状态。


结论

使用状态存储移动历史更易于使用,但在内存中却很昂贵,因为在每个步骤中,都将复制整个游戏状态。 对于大型模型的应用程序,最好在历史记录中使用命令存储。


GitHub存储库

https://github.com/nomhoi/tic-tac-toe-part3


在本地计算机上安装游戏:


git clone https://github.com/nomhoi/tic-tac-toe-part3.git cd tic-tac-toe-part3 npm install npm run dev 

我们在以下地址的浏览器中启动游戏: http:// localhost:5000 /

Source: https://habr.com/ru/post/zh-CN459906/


All Articles