【问题标题】:How to undo multiple steps in a Tic-Tac-Toe game in C如何在 C 中撤消井字游戏中的多个步骤
【发布时间】:2023-09-06 09:59:01
【问题描述】:

我想用 C 编写一个井字游戏版本,其中我们有'n × n' 棋盘由用户决定,输者由第一个获得第一个'n' X 的人决定或 O 在一行或一列等中。

其中一个要求是让玩家能够撤消多个步骤,这意味着通过输入一个负奇数返回到几步前的棋盘状态。

例如,如果玩家 1 输入“-3”作为行索引,则游戏需要恢复到之前 3 步的状态(如果游戏中已经完成了 3 步),显示棋盘并轮到玩家 2。

知道我将如何制作这样的功能,或者至少给我一个提示,我将如何开始对其进行编程?

谢谢!

【问题讨论】:

  • 保留所有已进行的移动的数组。要撤消移动,只需返回数组并清除已播放的单元格。
  • @TomKarzes 意思是为每一步创建一个新数组?
  • 我认为他的意思是创建一个可以表示所有步骤的数组,因为每一步都将移动添加到数组中。然后要撤消,您只需备份该移动次数即可擦除每个单元格中的内容。您可以使用 9 元素数组来实现井字游戏,并为 xo 存储 10
  • @DavidC.Rankin 哦,我知道了,非常感谢!
  • 另外,撤消的方式通常是你有一个简单的结构来保存描述移动的信息,比如 cellX/O。然后,每次移动都将移动压入一个简单的堆栈,要撤消,只需弹出最后一个移动,无论你喜欢多少移动。你可以用一个简单的结构数组(或者最基本的两个数组)来做同样的事情。只是可以掌握每个动作的“内容和位置”的东西。

标签: c function tic-tac-toe undo revert


【解决方案1】:

想一想我将如何制作这样的功能,或者至少给我一个提示,我将如何开始对其进行编程?

撤消步骤的替代方法是保留所有活动的历史记录(链表)。重播列表 sans 最后一个以“撤消”。效率较低但复杂度较低且易于撤消复杂步骤的错误较少 - 这可能存在于更高级的游戏中。有时,“备份”具有微妙的复杂性,其中先前的状态并未真正完全恢复。类似于@Tom Karzes@David C. Rankin

作为奖励,你有一个游戏记录。


假设你的游戏有这样的事件:

  • 默认设置
  • 选择尺码n
  • 先选择 X 或 O
  • 行动
  • 旋转视图
  • 保存游戏
  • 恢复游戏
  • 撤消上一个命令

【讨论】:

  • 很抱歉,我认为我没有完全理解您的回答。你能详细说明一下吗? (这次知道自己是初学者,5周前开始单独学习C..)
  • user11513173, "我不认为我完全理解" --> 你理解了哪些部分?所以我不必详细说明整个答案。您的问题是“任何想法如何”,现在听起来您正在寻找的不仅仅是想法,而是代码。
【解决方案2】:

通常您会有一个堆栈,您可以在其中放置每个新动作,当您想要撤消一个动作时,您只需将其从堆栈中弹出并在您的游戏模型上执行反向移动。

【讨论】:

    最近更新 更多