Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 井字游戏_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript 井字游戏

Javascript 井字游戏,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,创建一个tic-tac-toe游戏。我正在试着读《井字游戏》的专栏和行,看看谁赢了。我正在使用$scope.checkResults()获取列和行,并将它们传递到allTheSame函数中,以检查值是否相等,这是无效的。 这里是代码笔链接 var-app=angular.module(“ticTacToe”,[]); 应用程序控制器(“MainCtrl”,函数($scope){ 变量单元格=$(“.square”); $scope.player=“”; $scope.AI=“”; //由于if语

创建一个tic-tac-toe游戏。我正在试着读《井字游戏》的专栏和行,看看谁赢了。我正在使用
$scope.checkResults()
获取列和行,并将它们传递到
allTheSame
函数中,以检查值是否相等,这是无效的。 这里是代码笔链接

var-app=angular.module(“ticTacToe”,[]);
应用程序控制器(“MainCtrl”,函数($scope){
变量单元格=$(“.square”);
$scope.player=“”;
$scope.AI=“”;
//由于if语句失败,将特殊字符更改为X和O。
变量交叉=”✖";
变量圆=”◯";
/***选择一个形状***/
$scope.choosePlayer=函数(e){
$scope.player=$(e.currentTarget).text();
$('.choose').css('top','-2000px');
$('#wrapper').css('top','-600px');
$('#wrapper').css('opacity','1');
//这些if语句以前失败(AI始终为空)
如果($scope.player===交叉){
$scope.AI=圆;
}else if($scope.player==圆圈){
$scope.AI=交叉;
}
}
/***形状细胞***/
$scope.cells=[{value:''},{value:''},{value:''},
{value:''},{value:''},{value:''},
{value:''},{value:''},{value:''}
];
//对范围单元格进行了引用
$scope.emptyCells=$scope.cells;
/***采取行动***/
$scope.move=函数(单元格){
cell.value=$scope.player;
var round=0;
/***艾未未采取行动***/
while(圆形<1){
//过滤以仅获取可用单元格(用于性能)
$scope.emptyCells=$scope.cells.filter(函数(单元格){
返回cell.value=='';
});
//根据空单元格获取随机单元格
var randomCell=$scope.emptyCells[Math.floor((Math.random()*($scope.emptyCells.length-1))+1];
如果(randomCell.value==“”){
randomCell.value=$scope.AI;
轮=1;
}否则{
四舍五入=0;
} 
}
$scope.checkResults();
};
//检查值是否相同
功能完全相同(arr){
var L=arr.length-1;
while(L){
if(arr[L--]!==arr[L])返回false;
}
警报(arr[L]。值+“为赢家”);
}
//检查列和行
$scope.checkResults=函数(){
var allCells=$scope.cells;
//检查行
var cellRows=[];
而(所有单元格>0){
细胞行.推(所有细胞.剪接(0,3));
}
对于(var i=0;i0){
细胞压入(所有细胞拼接(0));
细胞压入(所有细胞拼接(3));
细胞压入(所有细胞拼接(6));
}
while(cellCols>0){
细胞压入(细胞拼接(0,3));
}
对于(var i=0;i
因此,您有一个包含9个值的数组,需要比较8种可能的获胜安排,3种垂直、3种水平和2种对角线。您可能需要对下面列出的“获胜”组合进行数组迭代

{0,1,2}
{3,4,5}
{6,7,8}
{0,3,6}
{1,4,7}
{2,5,8}
{0,4,8}
{2,4,6}
我正要出门,我可以稍后发布一些代码,但我认为将此列表保存为单元格的比较项可能是更简单的方法


下面是我很快抓到的一篇参考文章:这应该很容易转换成javascript:

根据Frodo的建议,我想出了一个比以前简单得多的解决方案

我将所有获胜组合存储到一个数组中。然后我检查每个获胜组合,看看该组合中每个单元格的值是否匹配。就这么简单

var winningNums = [
    [0,1,2],
    [3,4,5],
    [6,7,8],
    [0,3,6],
    [1,4,7],
    [2,5,8],
    [0,4,8],
    [2,4,6]
   ];


  //checks if values are the same
  $scope.checkResults = function(){
    var allCells = $scope.cells;
    for(var i = 0; i < winningNums.length; i++){
        var a = winningNums[i][0],b=winningNums[i][1],c=winningNums[i][2];
        var cell1 = allCells[a].value, cell2 = allCells[b].value, cell3 = allCells[c].value;
      if(cell1 == "" || cell2 == "" || cell3 == "" ){
        break;
      }
        if(cell1 === cell2 && cell2 === cell3 ){
            var winnerDiv = "<div><h1>" + cell1 + " is the winner</h1></div>";
          $(
"#wrapper").append(winnerDiv);
        }

      }

  }
var winningNums=[
[0,1,2],
[3,4,5],
[6,7,8],
[0,3,6],
[1,4,7],
[2,5,8],
[0,4,8],
[2,4,6]
];
//检查值是否相同
$scope.checkResults=函数(){
var allCells=$scope.cells;
对于(变量i=0;i
我会试试你的解决方案,看看我能想出什么。
var winningNums = [
    [0,1,2],
    [3,4,5],
    [6,7,8],
    [0,3,6],
    [1,4,7],
    [2,5,8],
    [0,4,8],
    [2,4,6]
   ];


  //checks if values are the same
  $scope.checkResults = function(){
    var allCells = $scope.cells;
    for(var i = 0; i < winningNums.length; i++){
        var a = winningNums[i][0],b=winningNums[i][1],c=winningNums[i][2];
        var cell1 = allCells[a].value, cell2 = allCells[b].value, cell3 = allCells[c].value;
      if(cell1 == "" || cell2 == "" || cell3 == "" ){
        break;
      }
        if(cell1 === cell2 && cell2 === cell3 ){
            var winnerDiv = "<div><h1>" + cell1 + " is the winner</h1></div>";
          $(
"#wrapper").append(winnerDiv);
        }

      }

  }