首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tic Tac Toe -计算机AI

Tic Tac Toe -计算机AI
EN

Stack Overflow用户
提问于 2014-03-12 07:59:01
回答 2查看 1K关注 0票数 0

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

下面是我的伪代码

代码语言:javascript
复制
for (int i = 0; i < rowSize; i++)
{
     if(any 4 out of 5 elements are equal)
     {
          block it;
     }
}

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

EN

回答 2

Stack Overflow用户

发布于 2014-03-12 08:10:32

使用LINQ:

代码语言:javascript
复制
if(elements.GroupBy(e=>e).Max(g=>g.Count())>=4)
  ...

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

票数 2
EN

Stack Overflow用户

发布于 2014-03-12 08:23:18

C#样式的伪代码,

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

用25个方块(5x5) board一个字符数组(例如)。例如,每个正方形可以是‘’、'X‘或'O’

例如,player可以是'X‘或'O’。

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

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22339247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档