Advertisement
Guest User

Tic Tac Toe

a guest
Oct 11th, 2020
800
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. function play(matrix) {
  2.  
  3. let dashboard =
  4. [[false, false, false],
  5. [false, false, false],
  6. [false, false, false]];
  7.  
  8. let player = 'X';
  9. let hasWon = false;
  10.  
  11.  
  12. for (let i = 0; i < matrix.length; i++) {
  13. let line = matrix[i];
  14. let [row, col] = line.split(' ').map(num => (Number(num)));
  15.  
  16.  
  17. if (dashboard[row][col] === false) {
  18. dashboard[row][col] = player;
  19.  
  20. if (ifWins(dashboard, player)) {
  21. hasWon = true;
  22. break;
  23. }
  24.  
  25. player = player === 'X' ? 'O' : 'X';
  26. } else if (dashboard.map(r => r[i]).every(e => e !== false)) {
  27. break;
  28. }
  29. else {
  30. console.log('This place is already taken. Please choose another!');
  31. }
  32. }
  33.  
  34. if (hasWon) {
  35. console.log(`Player ${player} wins!`);
  36. } else {
  37. console.log('The game ended! Nobody wins :(');
  38. }
  39.  
  40. printMatrix(dashboard);
  41.  
  42. function ifWins(dashboard, player) {
  43. return checkFirstDiagonal(dashboard, player) ||
  44. checkSecondDiagonal(dashboard, player) ||
  45. checkCols(dashboard, player) ||
  46. checkRows(dashboard, player);
  47. };
  48.  
  49. function checkFirstDiagonal(dashboard, player) {
  50. return dashboard[0][0] === player &&
  51. dashboard[1][1] === player
  52. && dashboard[2][2] === player;
  53. }
  54.  
  55. function checkSecondDiagonal(dashboard, player) {
  56.  
  57. return dashboard[2][0] === player
  58. && dashboard[1][1] === player
  59. && dashboard[0][2] === player;
  60. }
  61.  
  62. function checkRows(dashboard, player) {
  63.  
  64. return (dashboard[0][0] === player
  65. && dashboard[0][1] === player && dashboard[0][2] === player)
  66. || (dashboard[1][0] === player && dashboard[1][1] === player
  67. && dashboard[1][2] === player)
  68. || (dashboard[2][0] === player && dashboard[2][1] === player
  69. && dashboard[2][2] === player);
  70. }
  71.  
  72. function checkCols(dashboard, player) {
  73. return (dashboard[0][0] === player &&
  74. dashboard[1][0] === player
  75. && dashboard[2][0] === player)
  76. || (dashboard[0][1] === player && dashboard[1][1] === player
  77. && dashboard[2][1] === player) ||
  78. (dashboard[0][2] === player && dashboard[1][2] === player
  79. && dashboard[2][2] === player);
  80. }
  81.  
  82. function printMatrix(dashboard) {
  83. dashboard.forEach(row => {
  84. console.log(row.join('\t'));
  85. });
  86. }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement