Tic-Tac-Toe阵列或列表
Tic-Tac-Toe arrays or lists?
我读过一本书,正试图将井字游戏作为我的第一个项目之一。我在制作一个函数时遇到了一个问题,该函数检查所做的动作是否是获胜的动作。我只需要朝着正确的方向推动一下。
对于我的井字游戏板,我使用3x3阵列。可能有8种获胜组合。所以我想做一系列的组合,让程序检查棋盘上的任何一个动作是否和获胜的动作相匹配。
我想知道一个数组是否有效,或者其他东西是否更有效,比如向量或列表。
在这种情况下,数组会很好地工作,因为要存储的东西是静态的、不变的。这对他们来说是一个完美的用例。
当你以动态方式存储的东西,并且你事先不知道大小时,列表和向量更合适。在您的情况下,您预先知道大小,因此应该使用最简单的数据结构来完成任务(数组)。
嗯…真的很难说。两者都可以使用。我自己可能会用静态数组来做这件事,但随着你的学习,我建议你从静态数组开始,因为它更自然,然后尝试用Vector来做,这样你就会看到区别。此外,你可能想制作一个类TicTacToeBoard,它可以比较自己的实例(因为你需要检查策略是否成功)。当你有一个包含所有方法的类时,你可以在array和Vector之间更改实现,你还会看到封装的想法:所以从外部来看,这个类是相同的,从内部来看,你可以使用不同的解决方案。
使用3x3数组存储您当前的棋盘是可以的。使用数组存储可能的获胜组合是不可以的。虽然这是您的第一个程序,但开始学习好习惯永远不会有坏处。有了这个问题,你可以列举出所有可能的组合,这可能是真的。然而,如果您想对检查器进行编码,您会怎么做?可能获胜的场景数量巨大。下棋怎么样?今天所有的计算机都没有足够的内存来存储所有可能的国际象棋制胜棋。
更好的方法是编写一个函数,为您检查这些获胜条件。为了简单起见,我建议它这样写。为了不让它变得太简单,我将把它写成伪代码:
// returns true if specified side won
// board - a pointer to your array
// player - specifies if you want to check if X or O is the winner
bool game_won(board, player)
{
For each row, check if each field is equal to player.
if yes return true.
For each column, check if each field is equal to player.
if yes return true.
Check if each field on diagonal is equal to player.
if yes return true.
// winning conditions not met, let's keep playing
return false
}
在玩家做出每一个动作后,你应该调用game_won(),它会检查你的动作是否会让玩家获胜。
p.s。每个玩家有8个,而不是10个可能的获胜动作:3个水平、3个垂直和2个对角线。
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- OpenMP阵列性能较差
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- 一对向量构造函数:初始值设定项列表与显式构造
- 在阵列新表达中的直接限制与列表
- 在Android中的阵列列表中添加相等值
- 我如何使我的循环转到char*阵列的尽头,并将每个城市都放在链接的列表中(城市被划分为白色的空间)
- 是列表至少的炭阵列仍未终止
- c在.h文件中声明阵列列表
- 结构阵列的初始化列表的行为
- Tic-Tac-Toe阵列或列表
- 哪一个更快,为什么?1.阵列2.链接列表.如果我们只想在for循环中迭代并打印它