JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了算法连接四个javascript大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
HY,
我试图在 javascript / jQuery中实现Connect Four Game.首先,这不是家庭作业或任何其他职责.我只是想提升自己的能力. @H_607_3@我的“playground”是一个简单的html表,有7行6列.
但现在我已经到了我的身边.我坚持检查是否有4个相同的td的主要功能.我正在添加一个类来确定它应该在游戏中代表哪种颜色.
首先,我认为我可以使用.nextAll()和.prevAll()来处理这个问题,但这对我不起作用,因为它之间没有检测.
因为我正在寻找兄弟姐妹,在添加一个新项目时,只是查看了找到的兄弟姐妹的长度,如果他们最后匹配4我认为这是对的,但不是没有:D是否有任何类型的directNext ()它提供了所有下一个css选择器,直到出现不同的东西?

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

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

@H_607_3@无论如何,谢谢!

解决方法

DOM遍历不是特别有效,因此,当你可以避免它时,我建议这样做.将它构建为2D数组以存储和更新游戏状态是有意义的.该表只是数组的直观表示. @H_607_3@我知道,通常情况下,您将构建数组,其中行作为第一个维度,列作为第二个维度,但为了能够将片段添加到每个列的“堆栈”,我将第一个维度作为列和行的第二个维度.

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

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

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

@H_404_26@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); @H_607_3@为了避免小于和大于(我遇到过)的任何问题,计算循环遍历各个部分之前的步数,而不是使用计算的边界作为条件.

steps = Math.max(Math.abs(maxX - minX),Math.abs(maxY - minY));
@H_607_3@最后,遍历项目,保持与最后放置的棋子相匹配的连续棋子的数量.

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;
}

大佬总结

以上是大佬教程为你收集整理的算法连接四个javascript全部内容,希望文章能够帮你解决算法连接四个javascript所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。