Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 KB | None | 0 0
  1. (() => {
  2. "use strict";
  3.  
  4. const game = () => {
  5. let done;
  6. const solutions = [
  7. [ 0, 1, 2 ], [ 0, 3, 6 ], [ 0, 4, 8 ],
  8. [ 1, 4, 7 ], [ 2, 4, 6 ], [ 2, 5, 8 ],
  9. [ 3, 4, 5 ], [ 6, 7, 8 ]
  10. ];
  11.  
  12. const check = abc => abc.filter(e => board[e] !== ' '
  13. && board[e] === board[abc[0]])
  14. .length === 3;
  15.  
  16. const win = (...args) => {
  17. done = args;
  18. };
  19.  
  20. const board = new Proxy([...' '], {
  21. set: (t, k, v) => {
  22. if (t[k] === ' ') {
  23. t[k] = v;
  24. } else {
  25. return false;
  26. }
  27.  
  28. const correct = solutions.filter(e => e.includes(+k) && check(e));
  29.  
  30. if (correct.length > 0) win(k, v, correct);
  31.  
  32. return true;
  33. },
  34. get: (t, k) => { return t[k]; },
  35. });
  36.  
  37. const render = message => {
  38. const b = board;
  39.  
  40. return `
  41. ${ message }
  42.  
  43. 0: ${ b[0] } | 1: ${ b[1] } | 2: ${ b[2] }
  44. 3: ${ b[3] } | 4: ${ b[4] } | 5: ${ b[5] }
  45. 6: ${ b[6] } | 7: ${ b[7] } | 8: ${ b[8] }`;
  46. };
  47.  
  48. const play = (() => {
  49. let turn = 0;
  50.  
  51. return () => {
  52. if(done) {
  53. const [k, v, correct] = done;
  54. if(confirm(render(`${ v } won! play again?`))) {
  55. game();
  56. }
  57. return false;
  58. }
  59.  
  60. if(turn > 8) {
  61. if(confirm(render(`Game over, play again?`))) {
  62. game();
  63. }
  64. return false;
  65. }
  66.  
  67. const value = ['X', 'O'][turn++ % 2];
  68.  
  69. const index = prompt(render(`Player ${ value }, choose a space:`));
  70.  
  71. if(index === null) {
  72. if(confirm(render(`${ value } forfeit the game, play again?`))) {
  73. game();
  74. }
  75. return false;
  76. }
  77.  
  78. if(!(index in board)) {
  79. if(confirm(render(`${ index } is an invalid index, try again?`))) {
  80. play(--turn);
  81. }
  82. return false;
  83. }
  84.  
  85. try {
  86. board[+index] = value;
  87. play();
  88. } catch(e) {
  89. if(confirm(render(`${ index } is occupied, choose again?`))) {
  90. play(--turn);
  91. }
  92. }
  93. };
  94. })();
  95.  
  96. return play();
  97. };
  98.  
  99. game();
  100. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement