Advertisement
eternalmeg

ticTacToe

May 23rd, 2024 (edited)
542
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function ticTacToe(moves) {
  2.     const dashboard = [
  3.         [false, false, false],
  4.         [false, false, false],
  5.         [false, false, false]
  6.     ];
  7.  
  8.     let currentPlayer = 'X';
  9.  
  10.     for (let move of moves) {
  11.         const [row, col] = move.split(' ').map(Number);
  12.  
  13.         if (dashboard[row][col] !== false) {
  14.             console.log("This place is already taken. Please choose another!");
  15.             continue;
  16.         }
  17.  
  18.         dashboard[row][col] = currentPlayer;
  19.  
  20.  
  21.         if (checkWinner(dashboard, row, col, currentPlayer)) {
  22.             console.log(`Player ${currentPlayer} wins!`);
  23.             printDashboard(dashboard);
  24.             return;
  25.         }
  26.  
  27.         currentPlayer = currentPlayer === 'X' ? 'O' : 'X';
  28.  
  29.  
  30.         if (isDashboardFull(dashboard)) {
  31.             console.log("The game ended! Nobody wins :(");
  32.             printDashboard(dashboard);
  33.             return;
  34.         }
  35.     }
  36.  
  37.     function checkWinner(dashboard, row, col, player) {
  38.  
  39.         if (dashboard[row].every(cell => cell === player)) return true;
  40.  
  41.  
  42.         if (dashboard.every(row => row[col] === player)) return true;
  43.  
  44.  
  45.         if ((row === col || row + col === 2) && checkDiagonal(dashboard, player)) return true;
  46.  
  47.         return false;
  48.     }
  49.  
  50.     function checkDiagonal(dashboard, player) {
  51.         const n = dashboard.length;
  52.         let mainDiagonal = true;
  53.         let secondaryDiagonal = true;
  54.  
  55.         for (let i = 0; i < n; i++) {
  56.             if (dashboard[i][i] !== player) {
  57.                 mainDiagonal = false;
  58.             }
  59.             if (dashboard[i][n - 1 - i] !== player) {
  60.                 secondaryDiagonal = false;
  61.             }
  62.         }
  63.  
  64.         return mainDiagonal || secondaryDiagonal;
  65.     }
  66.  
  67.     function isDashboardFull(dashboard) {
  68.         return dashboard.every(row => row.every(cell => cell !== false));
  69.     }
  70.  
  71.     function printDashboard(dashboard) {
  72.         for (let row of dashboard) {
  73.             console.log(row.map(cell => cell === false ? 'false' : cell).join('\t'));
  74.         }
  75.     }
  76.  
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement