Advertisement
Guest User

Untitled

a guest
Apr 20th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.80 KB | None | 0 0
  1. function deepCopy(x) {
  2. return JSON.parse(JSON.stringify(x));
  3. }
  4. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  5. // CREATES A NEW GAME
  6. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  7. function createNewGame() {
  8. return [
  9. ["red", null, "red", null, "red", null, "red", null],
  10. [null, "red", null, "red", null, "red", null, "red"],
  11. ["red", null, "red", null, "red", null, "red", null],
  12. [null, "empty", null, "empty", null, "empty", null, "empty"],
  13. ["empty", null, "empty", null, "empty", null, "empty", null],
  14. [null, "black", null, "black", null, "black", null, "black"],
  15. ["black", null, "black", null, "black", null, "black", null],
  16. [null, "black", null, "black", null, "black", null, "black"]
  17. ];
  18. }
  19. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  20. // CHECKS FOR IF BOARD HAS VALID AMOUNTS OF EMPTY SQUARES
  21. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  22. function validNullSquares(board) {
  23. // SHOULD HAVE 32 NULL SQUARES
  24. let num = 0;
  25. board.forEach(row => {
  26. row.forEach(square => {
  27. if (square === null) {
  28. num++;
  29. }
  30. });
  31. });
  32. return num;
  33. }
  34. function validBoard(board) {
  35. if (validNullSquares(board) !== 32) {
  36. return false;
  37. }
  38. if (board.length !== 8) {
  39. return false;
  40. }
  41. for (let i = 0; i < board.length; i++) {
  42. for (let j = 0; j < board[i].length; j++) {
  43. if (board[i].length !== 8) return false;
  44. }
  45. }
  46. return true;
  47. }
  48. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  49. // CHECKS IF POSSIBLE IS ON BOARD
  50. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  51. function ifPossibleShown(board) {
  52. for (let i = 0; i < board.length; i++) {
  53. for (let j = 0; j < board[i].length; j++) {
  54. if (board[i][j] === "possible") return true;
  55. }
  56. }
  57. return false;
  58. }
  59. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  60. // FUNCTION TO RETURN BOARD WITH POSSIBLE MOVES TO SELECTED PIECE
  61. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  62. function selectPieceToMove(oldboard, playerTurn, pieceRow, pieceCol) {
  63. let board = deepCopy(oldboard);
  64. if (ifPossibleShown(board)) return false;
  65. if (playerTurn === "black") {
  66. if (board[pieceRow][pieceCol] === "black")
  67. pieceMove(board, pieceRow, pieceCol, -1, "black");
  68. else if (board[pieceRow][pieceCol] === "blackking")
  69. kingPieceMove(board, pieceRow, pieceCol, "black");
  70. } else {
  71. if (board[pieceRow][pieceCol] === "red")
  72. pieceMove(board, pieceRow, pieceCol, 1, "red");
  73. else if (board[pieceRow][pieceCol] === "redking")
  74. kingPieceMove(board, pieceRow, pieceCol), "red";
  75. }
  76. if (validBoard(board) === false) {
  77. return false;
  78. }
  79.  
  80. return board;
  81. }
  82. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  83. // FOR PIECE MOVEMENT
  84. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  85. function pieceMove(board, row, col, moveMent, currentPlayer) {
  86. board[row][col] = board[row][col] + "moving";
  87. if (board[row + moveMent]) {
  88. if (board[row + moveMent][col + 1] === "empty")
  89. board[row + moveMent][col + 1] = "possible";
  90. else checkPieceCapture(board, moveMent, 1, row, col, currentPlayer);
  91. if (board[row + moveMent][col - 1] === "empty")
  92. board[row + moveMent][col - 1] = "possible";
  93. else checkPieceCapture(board, moveMent, -1, row, col, currentPlayer);
  94. }
  95. }
  96. function kingPieceMove(board, row, col, currentPlayer) {
  97. board[row][col] = board[row][col] + "moving";
  98. if (board[row + 1]) {
  99. if (board[row + 1][col + 1] === "empty")
  100. board[row + 1][col + 1] = "possible";
  101. else checkPieceCapture(board, 1, 1, row, col, currentPlayer);
  102. if (board[row + 1][col - 1] === "empty")
  103. board[row + 1][col - 1] = "possible";
  104. checkPieceCapture(board, 1, -1, row, col, currentPlayer);
  105. }
  106. if (board[row - 1]) {
  107. if (board[row - 1][col + 1] === "empty")
  108. board[row - 1][col + 1] = "possible";
  109. else checkPieceCapture(board, -1, 1, row, col, currentPlayer);
  110. if (board[row - 1][col - 1] === "empty")
  111. board[row - 1][col - 1] = "possible";
  112. else checkPieceCapture(board, -1, -1, row, col, currentPlayer);
  113. }
  114. }
  115. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  116. // FOR CHECKS TO CAPTURE
  117. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  118. function checkPieceCapture(board, rowMove, colMove, row, col, currentPlayer) {
  119. let capturePiece1 = currentPlayer === "black" ? "red" : "black";
  120. let capturePiece2 = currentPlayer === "black" ? "redking" : "blackking";
  121. if (
  122. board[row + rowMove][col + colMove] === capturePiece1 ||
  123. board[row + rowMove][col + colMove] === capturePiece2
  124. ) {
  125. if (board[row + 2 * rowMove]) {
  126. if (board[row + rowMove + rowMove][col + colMove + colMove] === "empty") {
  127. board[row + rowMove + rowMove][col + colMove + colMove] = "possible";
  128. return true;
  129. } else {
  130. return false;
  131. }
  132. } else {
  133. return false;
  134. }
  135. } else {
  136. return false;
  137. }
  138. }
  139. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  140. // CAPTURE PIECE
  141. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  142. function getOg(board) {
  143. for (let i = 0; i < board.length; i++) {
  144. for (let j = 0; j < board[i].length; j++) {
  145. if (
  146. board[i][j] === "redmoving" ||
  147. board[i][j] === "redkingmoving" ||
  148. board[i][j] === "blackmoving" ||
  149. board[i][j] === "blackkingmoving"
  150. ) {
  151. return {
  152. row: i,
  153. col: j,
  154. pieceName: board[i][j].substring(0, board[i][j].indexOf("moving"))
  155. };
  156. } else {
  157. }
  158. }
  159. }
  160. }
  161. function capturePiece(board, row, col, currentPlayer) {
  162. let ogPiece = getOg(board);
  163. // let pieceToMove = ogPiece.pieceName;
  164. if (ogPiece.row - row === -2) {
  165. return getCol(board, row - 1, col, ogPiece.col, ogPiece);
  166. } else if (ogPiece.row - row === 2) {
  167. return getCol(board, row + 1, col, ogPiece.col, ogPiece);
  168. }
  169. }
  170. function getCol(board, row, col, ogCol, ogObj) {
  171. if (ogCol - col === 2) {
  172. board[row][col + 1] = "empty";
  173. return true;
  174. } else if (ogCol - col === -2) {
  175. board[row][col - 1] = "empty";
  176. return true;
  177. }
  178. }
  179. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  180. // Multi Capture
  181. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  182. function multiCapture(board, row, col) {
  183. let check1, check2, check3, check4;
  184. let currentPlayer = "";
  185. if (board[row][col] === "red" || board[row][col] === "redking") {
  186. currentPlayer = "red";
  187. } else {
  188. currentPlayer = "black";
  189. }
  190. if (board[row + 1]) {
  191. if (board[row + 1][col + 1] === "empty") null;
  192. else {
  193. check1 = checkPieceCapture(board, 1, 1, row , col, currentPlayer);
  194. }
  195. if (board[row + 1][col - 1] === "empty") null;
  196. else {
  197. check2 = checkPieceCapture(board, 1, -1, row, col , currentPlayer);
  198. }
  199. }
  200. if (board[row - 1]) {
  201. if (board[row - 1][col + 1] === "empty") null;
  202. else {
  203.  
  204. check3 = checkPieceCapture(board, -1, 1, row, col, currentPlayer);
  205. }
  206. if (board[row - 1][col - 1] === "empty") null;
  207. else {
  208.  
  209. check4 = checkPieceCapture(board,-1,-1,row ,col,currentPlayer );
  210. }
  211. }
  212. if (check1 || check2 || check3 || check4) {
  213. board[row][col] = board[row][col] + "moving";
  214. } else {
  215. }
  216. }
  217.  
  218. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  219. // MOVE TO POSSIBLE
  220. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  221. function moveToPossible(oldBoard, row, col) {
  222. let board = deepCopy(oldBoard);
  223. if (board[row][col] === "possible") {
  224. let ogPiece = getOg(board);
  225. let bool = capturePiece(board, row, col);
  226.  
  227. if (row === 0 && ogPiece.pieceName === "black") {
  228. board[row][col] = "blackking";
  229. } else if (row === 7 && ogPiece.pieceName === "red") {
  230. board[row][col] = "redking";
  231. } else {
  232. board[row][col] = ogPiece.pieceName;
  233. }
  234. board[ogPiece.row][ogPiece.col] = "empty";
  235. removePossible(board);
  236. if (bool) {
  237. multiCapture(board, row, col);
  238. }
  239. return board;
  240. } else {
  241. return board;
  242. }
  243. }
  244. function removePossible(board) {
  245. for (let i = 0; i < board.length; i++) {
  246. for (let j = 0; j < board[i].length; j++) {
  247. if (board[i][j] === "possible") board[i][j] = "empty";
  248. }
  249. }
  250. return board;
  251. }
  252. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  253. // CHECK PLAYERS
  254. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  255. function checkRedWinner(board) {
  256. let black = 0;
  257. for (let i = 0; i < board.length; i++) {
  258. for (let j = 0; j < board[i].length; j++) {
  259. if (board[i][j] === "black" || board[i][j] === "blackking") {
  260. black++;
  261. }
  262. }
  263. }
  264. if (black === 0) return true;
  265. else return false;
  266. }
  267. function checkBlackWinner(board) {
  268. let red = 0;
  269. for (let i = 0; i < board.length; i++) {
  270. for (let j = 0; j < board[i].length; j++) {
  271. if (board[i][j] === "red" || board[i][j] === "redking") {
  272. red++;
  273. }
  274. }
  275. }
  276. if (red === 0) return true;
  277. else return false;
  278. }
  279. function checkValidAmount(board) {
  280. let red = 0;
  281. let black = 0;
  282. for (let i = 0; i < board.length; i++) {
  283. for (let j = 0; j < board[i].length; j++) {
  284. if (board[i][j] === "black" || board[i][j] === "blackking") {
  285. black++;
  286. } else if (board[i][j] === "red" || board[i][j] === "redking") {
  287. red++;
  288. }
  289. }
  290. }
  291. if (red < 13 && black < 13) {
  292. return true;
  293. } else {
  294. return false;
  295. }
  296. }
  297. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  298.  
  299. module.exports = {
  300. createNewGame: createNewGame,
  301. validBoard: validBoard,
  302. selectPieceToMove: selectPieceToMove,
  303. moveToPossible: moveToPossible,
  304. checkRedWinner: checkRedWinner,
  305. checkBlackWinner: checkBlackWinner,
  306. checkValidAmount: checkValidAmount
  307. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement