【问题标题】:Tic-tac-toe game graph design?井字游戏图形设计?
【发布时间】:2012-01-21 14:12:50
【问题描述】:

这是我作业中的一个一般性问题,我只是要求一些想法或伪代码。

假设我正在使用 C++ 构建一个井字游戏。我已经拥有的是一个Node 类,它包含一个表示当前游戏板状态的 const 成员数据,以及一个指向其他节点的指针的 const 数组,其中包含所有可能的下一步状态。所以这将是一个没有重复节点的有向图(每个节点都有其独特的游戏状态。)。

当我尝试生成这样的图表时遇到了麻烦。似乎我需要使用递归,因为 Node 类中的所有数据成员都是 const 所以没有办法改变它们。而且如果不复制节点,我很难想出一个好主意来立即生成这样的图(我的意思是让它成为一棵树很容易,但它会浪费大量的空间和时间。)。一件事可能会有所帮助,我可以比较两种不同的游戏状态,而且我认为我不能使用除<set> 之外的任何模板。

因此,如果有人对此有任何想法,请随意写下您的想法或伪代码。谢谢

【问题讨论】:

  • Java 带有一个示例井字游戏。你在网上找过例子吗?
  • @PeterLawrey 是的,我环顾了几个小时,但没有发现任何对我有帮助的东西..
  • 如果需要为const,则只能在创建时设置。也就是创建完所有子节点后才能创建节点。
  • @SteveC 是的,没错,我只是对如何实现它感到困惑..
  • 井字游戏的排列不是足够少,您可以为每一步生成一个 2 或 3 深度的树吗?可能不需要预先生成它们。

标签: c++ oop graph tic-tac-toe


【解决方案1】:

我认为你需要的是检查是否存在:

std::set< Node > checked_node;

bool isNodeChecked( Node ){
    return checked_node.find( Node )!=checked_node.end();
}

您需要重载 operator =operator &lt; 之类的内容,以便 std::set 处理您的 class Node

std::unordered_map 也可能有效。

( 虽然在我看来,井字游戏状态可以用 0 到 3^9 的非负整数表示。这样,std::set 就足够了,但您需要额外的编码解码功能.

【讨论】:

    猜你喜欢
    • 2010-12-13
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    相关资源
    最近更新 更多