如何在编写接龙纸牌游戏中实现恢复游戏功能?
我正在编写一款接龙纸牌游戏,目前一切顺利,基本引擎运行正常,我甚至编写了像点击自动移动、赢得游戏时自动完成、无限撤销/恢复等功能。但是现在我意识到游戏无法完全恢复,也就是保存游戏状态以便于从上次打开游戏时的 exact 位置继续进行游戏。
我想知道有经验的程序员会如何处理这个问题,因为这似乎不像其他游戏那样简单,其他游戏只需要保存一些数字,如关卡号码等就足以恢复游戏。
现在的游戏方式是,在新游戏中创建所有游戏对象,如卡牌、基础和牌面等,然后随机洗牌并发牌。从我的角度来看,游戏需要记住这个随机发牌的操作,以便在恢复游戏时再次进行相同的发牌操作。然后,需要按照之前执行的所有移动,一一进行相同的移动。因此,游戏看起来像上次玩的状态一样,但实际上所有移动都已经再次从头开始执行。我不确定这是否是最佳方法,如果还有其他方法,我很感兴趣。
我想知道有经验的程序员如何处理这个问题,并可能提供一些提示/建议等。
我建议设计一个保存结构。每张牌都应该有一个花色和一个值变量,所以我会写出:
[DECK_UNTURNED]
H 1
H 10
S 7
C 2
...
[DECK_UNTURNED_END]
[DECK_TURNED]
...
[DECK_TURNED_END]
等等
我会为每个位置卡牌可以堆叠的地方(我相信您称它们为基础),未揭示的牌组,揭示的牌组,七个主槽位和四个获胜槽位做同样的事情。不管你如何读入和输出,它们都要按照相同的顺序排列。
当您打开文件进行读取时,一个简单的方法是将整个文件读入字符串向量。然后,遍历该向量,直到找到其中一个块。
if (vector[iter] == "[DECK_UNTURNED]")
现在,进入另一个循环,使用相同的向量和迭代器,继续读取这些卡片,直到达到相关的结束块。
while (vector[iter] != "[DECK_UNTURNED_END]")
读取卡片...
++iter
这是我通常做所有保存文件的方法。创建 [DATA] 块,并在达到结束块之前读入。它并不是非常复杂,但它是有效的。
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

Your idea of replaying the game up to a point is good. Just save the undo info and redo it at load time.你重新玩游戏直到某一个点的想法很好。只要保存撤销信息并在加载时重新执行即可。