我读了一本书,并且正在努力制作一个井字游戏作为我的第一个项目之一。我有一个问题是制作一个功能,检查所做的移动是否是一个成功的举动。我只需要朝着正确的方向努力。
对于我使用3x3阵列的tic-tac-toe board。可能有8种获胜组合。所以我想要制作一个组合数组并让程序检查棋盘上的任何动作是否与获胜动作中的动作相匹配。
我想建议一个阵列是否有效,或者其他东西是否像矢量或列表一样更好。
答案 0 :(得分:2)
在这种情况下,数组会很好地工作,因为你有一些静态的,不变的东西要存储。这对他们来说是一个完美的用例。
当您以动态存储的内容时,列表和向量更合适,并且您不知道预先确定的大小。在您的情况下,您事先知道大小,因此您应该使用最简单的数据结构来完成工作(数组)。
答案 1 :(得分:1)
答案 2 :(得分:1)
使用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个对角线。