support.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. /**
  2. * @Description:support.js
  3. * @Author:LCore
  4. */
  5. // var documentWidth = window.screen.availWidth
  6. // var gridContainerWidth = 0.92 * documentWidth
  7. // var cellSideLength = 0.18 * documentWidth
  8. // var cellSpace = 0.04 * documentWidth
  9. // var headerWidth = window.screen.availWidth
  10. var cellSideLength
  11. var cellSpace
  12. var showText = {
  13. '2': '高雄萌妹',
  14. '4': '一发入魂',
  15. '8': '乱斗王者',
  16. '16': 'CAD大师',
  17. '32': '斗奶狂魔',
  18. '64': '认发作妈',
  19. '128': '下岗女工',
  20. '256': '梦碎豪门',
  21. '512': '太极宗师',
  22. '1024': '远离魔都',
  23. '2048': '文学巨匠',
  24. '4096': '分手大师',
  25. '8192': '金牌僚机',
  26. '16384': '股海明灯',
  27. }
  28. var backgroundColor = {
  29. '2': '#eee4da',
  30. '4': '#ede0c8',
  31. '8': '#f2b179',
  32. '16': '#f59563',
  33. '32': '#f67c5f',
  34. '64': '#f65e3b',
  35. '128': '#edcf72',
  36. '256': '#edcc61',
  37. '512': '#9c0',
  38. '1024': '#33b5e5',
  39. '2048': '#09c',
  40. '4096': '#a6c',
  41. '8192': '#93c',
  42. '16384': '#e04',
  43. }
  44. export default class Support {
  45. constructor(w, h) {
  46. this.w = w
  47. this.h = h
  48. cellSideLength = 0.18*w
  49. cellSpace = 0.04*w
  50. }
  51. getPostionTop(i, j) {
  52. return (i * cellSideLength + (i + 1) * cellSpace + 0.3 * this.w + 50);
  53. }
  54. getPostionLeft(i, j) {
  55. return (j * cellSideLength + (j + 1) * cellSpace+ 0.04 * this.w);
  56. }
  57. getShowTextByNum(number) {
  58. if (number < (16384 + 1)) {
  59. return showText[number];
  60. }
  61. return 'fafa';
  62. }
  63. getBackgroundColorByNum(number) {
  64. if (number < (16384 + 1)) {
  65. return backgroundColor[number];
  66. }
  67. return "black";
  68. }
  69. getPreColorByNum(number) {
  70. if (number <= 4)
  71. return "#776e65";
  72. return "white";
  73. }
  74. isNoSpace(board) {
  75. for (var i = 0; i < 4; i++)
  76. for (var j = 0; j < 4; j++)
  77. if (board[i][j] == 0)
  78. return false;
  79. return true;
  80. }
  81. canMoveLeft(board) {
  82. for (var i = 0; i < 4; i++) {
  83. for (var j = 1; j < 4; j++) {
  84. if (board[i][j] != 0) {
  85. if (board[i][j - 1] == 0 || board[i][j] == board[i][j - 1])
  86. return true;
  87. }
  88. }
  89. }
  90. return false;
  91. }
  92. canMoveRight(board) {
  93. for (var i = 3; i >= 0; i--) {
  94. for (var j = 2; j >= 0; j--) {
  95. if (board[i][j] != 0) {
  96. if (board[i][j + 1] == 0 || board[i][j] == board[i][j + 1])
  97. return true;
  98. }
  99. }
  100. }
  101. return false;
  102. }
  103. /**
  104. *@Desciption: 补全原方法, 添加全部方向都不能的判断
  105. *@author: huwhois
  106. *@pragram board:棋盘格
  107. *@pragram direction:移动方向
  108. */
  109. canMoveUp(board) {
  110. for (var i = 0; i < 4; i++) {
  111. for (var j = 1; j < 4; j++) {
  112. if (board[j][i] != 0) { //可以移动
  113. if (board[j - 1][i] == 0 || board[j][i] == board[j - 1][i])
  114. return true;
  115. }
  116. }
  117. }
  118. return false;
  119. }
  120. canMoveDown(board) {
  121. for (var i = 3; i >= 0; i--) {
  122. for (var j = 2; j >= 0; j--) {
  123. if (board[j][i] != 0) { //可以移动
  124. if (board[j + 1][i] == 0 || board[j][i] == board[j + 1][i])
  125. return true;
  126. }
  127. }
  128. }
  129. return false;
  130. }
  131. canMoveAll(board) {
  132. return (this.canMoveLeft(board) || this.canMoveRight(board) || this.canMoveUp(board) || this.canMoveDown(board))
  133. }
  134. /**
  135. *@Desciption:重新构造canMove方法(包括上、下、左、右)
  136. *@author:LCore
  137. *@pragram board:棋盘格
  138. *@pragram direction:移动方向
  139. */
  140. canMove(board, direction) {
  141. if (direction == 1) {
  142. //左移
  143. for (var i = 0; i < 4; i++) {
  144. for (var j = 1; j < 4; j++) {
  145. if (board[i][j] != 0) {
  146. if (board[i][j - 1] == 0 || board[i][j] == board[i][j - 1])
  147. return true;
  148. }
  149. }
  150. }
  151. } else if (direction == 2) {
  152. //上移
  153. for (var i = 0; i < 4; i++) {
  154. for (var j = 1; j < 4; j++) {
  155. if (board[j][i] != 0) { //可以移动
  156. if (board[j - 1][i] == 0 || board[j][i] == board[j - 1][i])
  157. return true;
  158. }
  159. }
  160. }
  161. } else if (direction == 3) {
  162. //下移
  163. for (var i = 3; i >= 0; i--) {
  164. for (var j = 2; j >= 0; j--) {
  165. if (board[j][i] != 0) { //可以移动
  166. if (board[j + 1][i] == 0 || board[j][i] == board[j + 1][i])
  167. return true;
  168. }
  169. }
  170. }
  171. } else if (direction == 4) {
  172. //右移
  173. for (var i = 3; i >= 0; i--) {
  174. for (var j = 2; j >= 0; j--) {
  175. if (board[i][j] != 0) {
  176. if (board[i][j + 1] == 0 || board[i][j] == board[i][j + 1])
  177. return true;
  178. }
  179. }
  180. }
  181. } else
  182. return false;
  183. }
  184. /**
  185. *@Description:横向判断是否存在障碍物
  186. *@pagram row:第几行
  187. *@pagram col1:开始索引
  188. *@pagram col2:结束索引
  189. *@pagram board:棋盘格
  190. */
  191. noBlockHorizontal(row, col1, col2, board) {
  192. for (var i = col1 + 1; i < col2; i++) {
  193. if (board[row][i] != 0)
  194. return false;
  195. }
  196. return true;
  197. }
  198. /**
  199. *@Description:纵向判断是否存在障碍物
  200. *@pagram col:第几列
  201. *@pagram row1:开始索引
  202. *@pagram row2:结束索引
  203. *@pagram board:棋盘格
  204. */
  205. noBlockVectal(col, row1, row2, board) {
  206. for (var i = row1 + 1; i < row2; i++) {
  207. if (board[i][col] != 0)
  208. return false;
  209. }
  210. return true;
  211. }
  212. }