首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用for循环检查Tic Tac Toe中的获胜者,然后切换玩家的好方法是什么?

使用for循环检查Tic Tac Toe中的获胜者,然后切换玩家的好方法是什么?
EN

Stack Overflow用户
提问于 2020-05-06 05:24:18
回答 1查看 69关注 0票数 0

我正在寻找一种使用for循环检查获胜条件的方法。基本上,我希望有一个函数,可以在玩家每次单击单元格时调用它。然后切换玩家,以便计算机在具有最小最大函数的人类玩家之后输入。到目前为止,我的程序能够将cell id作为字符串从人工玩家推送到huPlayerArr,然后在屏幕上显示它。接下来,期望的结果将是对计算机玩家执行相同的操作。

代码语言:javascript
复制
 $(document).ready(function() {
  var huPlayer, computer;
  var huPlayerArr = [], computerArr = [];
  var occupiedCells = [];
  var winningCombos = [
    [1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7]
  ];

  $cell = $('.cell');

  $('#myModal').modal('show');

  $('.select').click(function() {
    let turnX = 'X';
    let turnO = 'O';
    $(this).attr("data-dismiss", "modal");
    huPlayer = $(this).text() 
    computer = huPlayer === turnX ? turnO: turnX; 
    $('.player').append(`<div class="alert-success">You chose to play as ${huPlayer}</div>`);
  });

  function resetGame() {
    huPlayer = undefined;
    computer = undefined;
    huPlayerArr = [];
    computerArr = [];
    occupiedCells = [];

  }

  function generateRandomNumber(min, max) {
    return Math.floor(Math.random()*(max-min+1)+min);
  }

  function isEmpty(el) {
    if ($.trim($(el).html()) == '') {
      return true;
    };
  }

  function insertMarker(text, val, id) {
    occupiedCells.push(+id);
    text.html(val);
  }

  function isThereAWinner(arr) {
    for (let i = 0; i < winningCombos.length; i++) {
      if (arr.includes( winningCombos[i][0] )
        && arr.includes( winningCombos[i][1] )
        && arr.includes( winningCombos[i][2] )) { 
        console.log("There's a winner");
      } 
    }
  }

  $cell.click(function() {
    if (huPlayer === undefined && computer === undefined) {
      $('#myModal').modal('show');
    } 
    else {
      var id = $(this).attr("id");
      if (isEmpty(id)) {
        insertMarker($(this), huPlayer, id);
        huPlayerArr.push(id);
        console.log(huPlayerArr); 

        if (isThereAWinner(huPlayerArr)) {
          console.log("There's a winner");
        }
        else if (occupiedCells.length === 9) {
          console.log("Tie game");
        }
      }
    }
  });
});

HTML:

代码语言:javascript
复制
  <header>
    <h1 class="text-center">Tic Tac Toe</h1>
    <div class="player text-center"></div>
  </header>

  <div id="popup-box">
    <div class="modal fade bg-red" id="myModal" role="dialog" aria-labelledby="myModalLabel">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <h4 class="modal-title text-center text-danger">Welcome!</h4>
          </div>
          <div class="modal-body">
            <h1 class="text-center text-success">Choose X or O !!!</h1>
          </div>
          <div class="modal-footer">
            <button type="button" class="select btn btn-info btn-lg">X</button>
            <button type="button" class="select btn btn-danger btn-lg">O</button>
          </div>
        </div>
      </div>
    </div>

    <div id="app">

      <table>
        <tr>
          <td class="cell" id="cell-0"></td>
          <td class="cell" id="cell-1"></td>
          <td class="cell" id="cell-2"></td>
        </tr>
        <tr>
          <td class="cell" id="cell-3"></td>
          <td class="cell" id="cell-4"></td>
          <td class="cell" id="cell-5"></td>
        </tr>
        <tr>
          <td class="cell" id="cell-6"></td>
          <td class="cell" id="cell-7"></td>
          <td class="cell" id="cell-8"></td>
        </tr>
      </table>
EN

回答 1

Stack Overflow用户

发布于 2020-05-06 11:47:56

对于每个winningCombos数组,如果获胜组合中的三个正方形in中的每一个都存在于arr中,那么您就有了一个赢家:

代码语言:javascript
复制
function isThereAWinner(arr) {
    for (let i = 0; i < winningCombos.length; i++) {
        if (
            arr.includes( winningCombos[i][0] )
                &&
            arr.includes( winningCombos[i][1] )
                &&
            arr.includes( winningCombos[i][2] )
    ) {
        console.log("There's a winner");
        break;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61623334

复制
相关文章

相似问题

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