算法连接四个javascript

前端之家收集整理的这篇文章主要介绍了算法连接四个javascript前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
HY,
我试图在 javascript / jQuery中实现Connect Four Game.首先,这不是家庭作业或任何其他职责.我只是想提升自己的能力.

我的“playground”是一个简单的html表,有7行6列.
但现在我已经到了我的身边.我坚持检查是否有4个相同的td的主要功能.我正在添加一个类来确定它应该在游戏中代表哪种颜色.
首先,我认为我可以使用.nextAll()和.prevAll()来处理这个问题,但这对我不起作用,因为它之间没有检测.
因为我正在寻找兄弟姐妹,在添加一个新项目时,只是查看了找到的兄弟姐妹的长度,如果他们最后匹配4我认为这是对的,但不是没有:D是否有任何类型的directNext ()它提供了所有下一个css选择器,直到出现不同的东西?

我将把所有代码放入这个jsfiddle:http://jsfiddle.net/LcUVf/5/

也许有人曾经尝试过相同或有人想出一个好主意我不是要求任何人做或完成我的代码.我只想获得实现这样一个算法或示例如何解决它的提示

无论如何,谢谢!

解决方法

DOM遍历不是特别有效,因此,当你可以避免它时,我建议这样做.将它构建为2D数组以存储和更新游戏状态是有意义的.该表只是数组的直观表示.

我知道,通常情况下,您将构建数组,其中行作为第一个维度,列作为第二个维度,但为了能够将片段添加到每个列的“堆栈”,我将第一个维度作为列和行的第二个维度.

要做检查,看看我做的这个小提琴:

http://jsfiddle.net/Koviko/4dTyw/

有4个方向可供选择:南北,东西,东北 – 西南和东南 – 西北.这可以表示为具有为X和Y定义的增量的对象:

directions = [
  { x: 0,y: 1  },// North-South
  { x: 1,y: 0  },// East-West
  { x: 1,// Northeast-Southwest
  { x: 1,y: -1 }  // Southeast-Northwest
];

然后,循环遍历该对象并循环通过您的“表格”,从最远的边界开始,这块可能有助于获胜.因此,由于您需要连续4件,因此当前放置的部件可以在任何方向上最多赢得3件.

minX = Math.min(Math.max(placedX - (3 * directions[i].x),0),pieces.length    - 1);
minY = Math.min(Math.max(placedY - (3 * directions[i].y),pieces[0].length - 1);
maxX = Math.max(Math.min(placedX + (3 * directions[i].x),pieces.length    - 1),0);
maxY = Math.max(Math.min(placedY + (3 * directions[i].y),pieces[0].length - 1),0);

为了避免小于和大于(我遇到过)的任何问题,计算循环遍历各个部分之前的步数,而不是使用计算的边界作为条件.

steps = Math.max(Math.abs(maxX - minX),Math.abs(maxY - minY));

最后,遍历项目,保持与最后放置的棋子相匹配的连续棋子的数量.

function isVictory(pieces,placedX,placedY) {
  var i,j,x,y,maxX,maxY,steps,count = 0,directions = [
      { x: 0,// North-South
      { x: 1,// East-West
      { x: 1,// Northeast-Southwest
      { x: 1,y: -1 }  // Southeast-Northwest
    ];

  // Check all directions
  outerloop:
  for (i = 0; i < directions.length; i++,count = 0) {
    // Set up bounds to go 3 pieces forward and backward
    x =     Math.min(Math.max(placedX - (3 * directions[i].x),pieces.length    - 1);
    y =     Math.min(Math.max(placedY - (3 * directions[i].y),pieces[0].length - 1);
    maxX =  Math.max(Math.min(placedX + (3 * directions[i].x),0);
    maxY =  Math.max(Math.min(placedY + (3 * directions[i].y),0);
    steps = Math.max(Math.abs(maxX - x),Math.abs(maxY - y));

    for (j = 0; j < steps; j++,x += directions[i].x,y += directions[i].y) {
      if (pieces[x][y] == pieces[placedX][placedY]) {
        // Increase count
        if (++count >= 4) {
          break outerloop;
        }
      } else {
        // Reset count
        count = 0;
      }
    }
  }

  return count >= 4;
}
原文链接:https://www.f2er.com/js/159171.html

猜你在找的JavaScript相关文章