c++中的If(), else If()选项(这是AI吗?)
If(), else if() alternative in c++(Is this AI?)
首先,我是个新手。我也是一个从来没有赚过一分钱写代码的看门人。这就是我喜欢做的事情。也就是说,我编写了这款基于主机的井字棋游戏,它有足够的ai,不会输掉每一场游戏。(我想应该叫ai。)它有大约70个if/else if语句供计算机使用。我使用了3个int数组,像这样:
int L[2], M[2], R[2];
0 = blank;1 = x;2 = 0;
董事会就"看起来"像
L [0] | M [0] | R [0]
L [1] | M [1] | R [1]
L [2] | M [2] | R [2]
所以我基本上写下了我能想到的所有可能的情况,比如:
if(M[0]==1 & M[1]==1 & M[2]==0){M[2] = 2;}//here the computer prevents a win
else if(L[0] ==2&M[1]==2&R[2]==0){R[2]=2;}//here the computer wins
//and so on....68 more times!
我想我的问题是:
有没有更好的方法?
是否有一种方法可以用更少的代码行实现相同的结果?
这算是人工智能吗?
这个问题的标准算法叫做Minimax。它基本上构建了一个树,游戏的开始是根结点,然后子结点代表X在第一回合可能采取的所有行动,然后每个结点的子结点代表O在回应中可能采取的所有行动,以此类推。一旦整个树被填满(游戏邦注:对于井字棋来说,这是可能的,但对于像国际象棋这样的游戏,电脑仍然没有足够的内存),你就可以往回走,假设两个玩家都足够聪明,能够做出最佳的移动,并到达最佳的移动。这里是另一个关于Minimax的解释,特别是以井字游戏为例。
关于Tic-Tac-Toe的维基百科页面有一个非常好的获胜(或平局)算法大纲:http://en.wikipedia.org/wiki/Tic-tac-toe这是我几年前用来制作一款井字游戏的工具。
在你理解了这个算法之后,实现一个井字游戏的最聪明的方法之一就是用一个魔方。本文讨论了该方法。就大小而言,我已经看到它在大约50行代码中实现,如果我找到它,我会发布代码:)
这在技术上不是人工智能,因为人工智能通常指的是人工神经元、神经元层、梯度下降、支持向量机、求解复杂多项式等。解决井字
是的,有更好的方法。
最明显的是考虑不同的镜像视图如何简化情况的数量。
另外,考虑在数组中预先存储"有趣的"模式,然后将游戏状态与数据进行比较。例如,一个系列的模式可能是玩家在下一步中获胜的所有方式。
还要注意,对于int L[2]
的声明,数组L
中只有两个条目,即L[0]
和L[1]
。对L[2]
, M[2]
等的引用是编译器应该捕获的错误。考虑调高警告级别。如何做到这一点取决于编译器。对于gcc
,它是-Wall
。
这算是人工智能的一种形式。if
语句系列是积累的知识:如何识别一种情况,并对其作出适当的最佳反应。
解决这种游戏最接近真正的人工智能的方法是编写一个人工网络,并用所有的骰子游戏组合来训练它。
在这种情况下,代码不会做那么多的事情来解决问题,而是通过从其中训练的模式中选择解决问题的最合理的选择来解决问题。
但是给神经网络编码不是一件小事:)
当需要编写基于规则的系统(如您正在构建的AI)时,您可以使用规则引擎,例如CLIPS(这是NASA开发的用于创建用C编写的专家系统的工具)。
http://en.wikipedia.org/wiki/CLIPS对于玩井字游戏来说,这可能有点过分,但如果你想学习很酷的AI内容,专家系统是一个非常有趣的领域,但与神经网络不同(也许不那么棘手)。
玩得开心!
- 我的简单if-else语句是如何无法访问的代码
- 如何将enable-if与模板参数和参数包一起使用
- 无论条件是否为true,if总是在c++中执行
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何删除peer if else分支中的冗长句子
- 我似乎对if/else的基本语句有问题:/
- if数组上的随机数
- 将按位if条件转换为普通if条件
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 使用if-else将数字转换为单词
- 为什么简单的算术减法在"if"条件下不起作用?
- 以在Qt中的IF语句中设置时间延迟
- c++中的If(), else If()选项(这是AI吗?)