问题标签 [tic-tac-toe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1224 浏览

algorithm - 在井字游戏上扭动

我正在编写一个 tictactoe 程序,但它不是你传统的 tictactoe

首先,棋盘是 4x4,获胜的方法是在一行、一列或对角线上获得 3 个同类和 1 个对手。因此,通过第一列,以下将是“O”的胜利:

我正在尝试实现一个极小极大算法,以便为程序提供一个无法击败的“硬”模式。

我的问题是我不能希望创建一个包含所有可能游戏状态的树,因此我必须想出某种函数来评估我可以生成的游戏状态。

我想我的问题是,我怎么能想出这样的功能?

0 投票
1 回答
692 浏览

c++ - 在 C++ 中遍历 2D tic-tac-toe 数组的好方法?

我有一个函数来检查一个数组是否具有三个相同字符的井字游戏数组。麻烦的是,我的逻辑有问题:

看来我可以水平和垂直检查匹配。但是,我不太清楚如何找到对角线匹配。我认为这段代码可以工作,但到目前为止还没有。

关于什么是错的任何建议?

0 投票
1 回答
1116 浏览

vector - Clojure:遍历向量向量以找到满足特定条件的第一个向量

为了学习 Clojure,我正在开发一个小井字游戏。在相对轻松地完成游戏的第一部分后,我一直在努力尝试构建一个智能电脑播放器。

对于我正在编写以帮助指导这一点的测试,如果轮到计算机,我想检查计算机是否选择了点 9,这是板:

X | ○ | 3
4 | X | 7
| 8 | 9

开始游戏时,将棋盘定义为这样的地图,其键值对表示棋盘上的位置和该空间的内容:

我对如何解决这个问题有一些想法。一种是这样定义获胜集:

遍历每个集合:

但这似乎不对……我不知道从那里去哪里。我试图解决的问题可以这样描述:

告诉计算机查看 8 个获胜组,并找到一组有两个符号一个空位。

我对 Clojure 还很陌生,所以我不确定我是否理解解决这个问题的最佳方法。我一直在查看ClojureDocs(检查迭代函数,如forandloopcase),但无法完成这项工作。

迭代这些获胜集的最佳方法是什么,目前是矢量形式,并找到具有两个特定符号和一个开口的集合?还是最好将获胜集存储在不同的数据结构中?

注意:我已阅读对此问题的回复,但无法将它们应用于我的。

0 投票
2 回答
809 浏览

java - 我的tictactoe 游戏中的每个按钮都有相同的代码。如何使这个简短?

这个tictactoe程序是一个2人游戏。在我开始编码之后,我制作的 GUI 是框架和按钮。实际上我的程序正在使用这种编码。

是的,它实际上正在工作,但我对这些代码的问题是我需要将代码放在每个按钮中,例如 button7、button1(这些只是我的按钮的示例),这些代码是按钮执行的操作。

我只需要每个按钮执行一个命令,并且我不想在每个按钮中复制粘贴,因为它们是相同的代码。我认为有一个代码可以做到这一点,你怎么看?请帮忙!

0 投票
1 回答
892 浏览

algorithm - 在 Clojure 中实现 Minimax 算法 - 具有多个递归调用的条件函数

在我弄清楚了一些事情之后,这个问题和我的另一个问题合二为一,所以我修改了这个问题。

下面概述了我试图用我的功能完成的事情。

  1. 遍历所有的点。如果它是开放的,请选择带有当前玩家符号的位置。
  2. 如果这一举动导致游戏获胜并且轮到计算机玩家,则将点的键值对(整数)和点的分数(整数,在本例中为 1)添加到scored-spots哈希图中。
  3. 递归并调用这个相同的函数,传递给它 scored-spots的哈希映射、刚刚移除的棋盘、相同的玩家和相同的符号。
  4. 但是,如果游戏没有获胜,请继续下一个条件语句并检查它。
  5. 以相同的方式继续下一个条件语句,只是分数不同(轮到计算机获胜为 1,轮到人类获胜为 -1,平局为 0)。
  6. 如果没有条件语句评估为真,则无论如何都要递归(scored-spots在这种情况下哈希映射不会有任何不同)。

这是我尝试过的代码,但这并没有返回我期望的值。

注意:
board是这样的散列图:({0 "0", 1 "1", 2 "2"}点位置 - 点值)
sym是一个符号,如“X”或“O”
current-player是关键字,如:computer或是:human
scored-spots这样的散列图:{}

我期望的返回值是一个散列图,每个开放点都得分。例如,{1 0, 4 1, 5 -1, 6 -1, 8 0}

相反,如果我通过这个 board:
{1 "X" 2 "X" 3 "O" 4 "4" 5 "5" 6 "6" 7 "7" 8 "X" 9 "O"}
我会得到一个带有大量list哈希映射的返回值。

0 投票
1 回答
1974 浏览

java - 井字游戏的游戏树

首先,我是java初学者,我正在尝试模拟井字游戏。我想使用游戏树为所有状态创建一个可能的树。树中的每个节点都将代表状态并使用这棵树来决定下一步要采取的行动。我计划如下接近,

  1. 接口类包括表示单个移动所需的信息。
  2. 抽象/接口类包括以下方法:

    一个。返回一个新的状态对象,它表示
    应用该移动后游戏的状态。

    湾。如果当前状态代表其中一名玩家获胜,则该游戏获胜者的 id。

    C。返回当前玩家和下一个玩家ID。

  3. 在一个类中包括方法,

    一个。游戏树中此节点处表示的游戏状态

    湾。给定一个 Move,向该节点添加一个子节点。

    C。给定一个 Move,返回相应的子节点。

  4. 在另一个类中包含方法,

    一个。构造一棵具有初始状态的树。

    湾。返回游戏的当前状态

    C。给定一个移动,更新树,使树的根保持游戏的新状态。

    d。为这棵树生成给定深度的子节点。

我知道树的概念(二进制或 avl 或红黑),但我有点困惑从哪里开始以及如何继续。在这种情况下的任何建议都会非常有帮助。

谢谢

辛克斯

0 投票
4 回答
472 浏览

algorithm - 创建一个不完美的游戏算法

我知道如何使用 minimax 之类的算法来玩完美的游戏(在这种情况下,我正在寻找类似于井字游戏的游戏)

但是,我想知道如何创建一个不完美的算法,或不同“技能水平”(简单、中等、困难等)的人工智能,人类玩家实际上有机会击败。

0 投票
1 回答
1592 浏览

hashmap - 井字游戏 - 类似 BFS 的算法

我正在考虑我自己的算法来实现井字游戏。这将是一台计算机对抗系统。我想实现的算法将是一个哈希图,其中包含用户每个选定节点的所有获胜节点。系统将轮询用户选择的密钥的哈希映射,并随机选择一个获胜的移动选项。可以删除用户或系统之前选择的选项或将其设置为布尔值 true。这主要是基于阻塞的算法。欢迎对此提出任何想法或意见。

系统哈希图

系统将根据用户的键选择随机选择散列映射的条目之一。我知道这不是一个非常可扩展的方法,但我想知道对此的一些评论。系统/用户已经选择的每个条目都可以设置为假/删除,因此这可能不是问题。

0 投票
0 回答
3473 浏览

java - Java Minimax井字游戏

我目前正在尝试实现一个Minimax algorithmfor Tic Tac Toe。在当前版本中,在某些情况下,计算机会出现问题,我不太清楚为什么。例如,如果我(作为人类玩家)从左上角的 x 开始,计算机的反应是左下角的 ao(当然,这等于他输了)整个程序在MVC-Design.

问题:我是否正确纠正了 Minimax 算法,或者(如果没有)是什么导致了“坏”动作?

这是代码:(我省略了一些我测试正确的方法的代码)

游戏类表示 Cell[][] 数组中的字段(与 AIMinimax 相同)并创建 AIMinimax 的实例并在此调用 nextMove,以生成计算机做出的下一个移动。默认情况下,人类玩家总是启动。

先感谢您!

0 投票
1 回答
3219 浏览

java - MVC 井字游戏

我目前正在为学校的一个项目工作。我们应该将用 Java 编写的井字游戏重构为更好的东西。给定的代码是一个大问题,用户界面不能很好地工作。

问题是游戏没有告知两位玩家的观点。所以,我应该实现观察者模式。

http://www.imgdumper.nl/uploads6/50a794d4ea6ba/50a794d4e2d9f-now.jpg

此图像是给定代码的 UML。

为了让它像真正的游戏一样工作,我假设我会创建一个如下结构:

http://www.imgdumper.nl/uploads6/50a7953c6c6b3/50a7953c64186-new.jpg

好的,我认为这是正确的。但这个项目的目的是将其重构为 MVC 模式。在学校提供的演示文稿中,我发现了这个方案:(请参阅 url 评论)

但我不知道如何将代码重构为满足 MVC 模式要求的东西。如果有人可以向我解释我应该如何做到这一点,那就太好了。比如,模型、控制器和视图是什么?