Tic Tac Toe - 计算机AI

时间:2014-03-11 23:59:01

标签: c#

我正在玩家和电脑之间构建一个5x5 tic tac toe游戏,我遇到了计算机将看到玩家移动的部分,如果玩家已经连续4次,则决定阻止他的获胜转弯。所以我知道它应该是一个for循环,但我有实现它的问题。查找数组的最佳方法是什么,内部有4个元素来检查其中5个元素中有4个是否相同?通常我会做if else语句,但在这种情况下if else应该是乏味且冗长的。

下面是我的伪代码

for (int i = 0; i < rowSize; i++)
{
     if(any 4 out of 5 elements are equal)
     {
          block it;
     }
}

PS:我有一个5x5的获胜组合数组,它的行大小为12

2 个答案:

答案 0 :(得分:2)

使用LINQ:

if(elements.GroupBy(e=>e).Max(g=>g.Count())>=4)
  ...

GroupBy将相等的值组合在一起(作为IGrouping的集合),Max(g=>g,Count())返回最大组中的项目数。

答案 1 :(得分:0)

C#风格的伪代码,

wins一组获胜组合数组(按位置),例如[[0,1,2,3],[1,2,3,4],...]

board单个数组的字符(例如),25个方格(5x5)。例如每个方格可以是'','X'或'O'

例如,

player可以是“X”或“O”。

这是检查玩家是否获胜的算法。

bool checkWin(char player)
{
  foreach (win in wins)
  {
     int count = 0;
     foreach(sq in win)
     {
       if (board[sq] == player)
         count++;
     }
     if (count == 4) return true;
  }
  return false;
}