BlockData.ts 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. import ResSprite from "../../ResSprite";
  2. import { Url } from "../../Url";
  3. //Block的Type
  4. export enum BlockType {
  5. TYPE_A,
  6. TYPE_B,
  7. TYPE_C,
  8. TYPE_D,
  9. TYPE_E,
  10. TYPE_F,
  11. TYPE_G,
  12. TYPE_H,
  13. TYPE_I,
  14. TYPE_J,
  15. TYPE_K,
  16. TYPE_L,
  17. TYPE_M,
  18. TYPE_N,
  19. }
  20. //Block偏移方向
  21. export enum BlockOffset {
  22. NONE,
  23. UP,
  24. DOWN,
  25. LEFT,
  26. RIGHT,
  27. LEFTANDUP,
  28. LEFTANDDOWN,
  29. RIGHTANDUP,
  30. RIGHTANDDOWN
  31. }
  32. export enum BlockState {
  33. HIDE, ///隐藏
  34. SHOW ///显示
  35. }
  36. //地区位置
  37. export interface Region {
  38. i: number;
  39. j: number;
  40. }
  41. export interface ReConfig {
  42. iscanplaced: boolean; //是否可以放置
  43. indexarr: number[]; //可以放置的区域
  44. block_color?: string //颜色
  45. }
  46. // 棋盘数据
  47. export interface BlockBaData {
  48. index_i: number, //行
  49. index_j: number, //列
  50. block_ba_node: any, //节点
  51. block_state: BlockState, //状态
  52. block_sprite: ResSprite, //图片
  53. block_color: string //颜色
  54. }
  55. // 定义块的数据结构
  56. export class BlockConfig {
  57. block_arr: number[][]; //块的形状
  58. block_type: BlockType; //块的类型
  59. block_type_index: number; //块的类型索引
  60. block_offset: BlockOffset; //块的偏移
  61. block_color: string //块的颜色
  62. constructor(arr: number[][], type: BlockType, index: number, offset: BlockOffset) {
  63. this.block_arr = arr;
  64. this.block_type = type;
  65. this.block_type_index = index;
  66. this.block_offset = offset;
  67. this.block_color = Url.BLOCK.BLUE
  68. }
  69. }
  70. // 存储多个块的静态数据,定义底部方块形状
  71. export const BlocksAll: BlockConfig[] = [
  72. new BlockConfig([
  73. [0, 0, 0, 0, 0],
  74. [0, 0, 0, 0, 0],
  75. [0, 0, 1, 0, 0],
  76. [0, 0, 0, 0, 0],
  77. [0, 0, 0, 0, 0]
  78. ], BlockType.TYPE_A, 0, BlockOffset.NONE),
  79. new BlockConfig([
  80. [0, 0, 0, 0, 0],
  81. [0, 0, 1, 0, 0],
  82. [0, 0, 1, 0, 0],
  83. [0, 0, 0, 0, 0],
  84. [0, 0, 0, 0, 0]
  85. ], BlockType.TYPE_B, 0, BlockOffset.DOWN),
  86. new BlockConfig([
  87. [0, 0, 0, 0, 0],
  88. [0, 0, 0, 0, 0],
  89. [0, 0, 1, 1, 0],
  90. [0, 0, 0, 0, 0],
  91. [0, 0, 0, 0, 0]
  92. ], BlockType.TYPE_B, 1, BlockOffset.LEFT),
  93. new BlockConfig([
  94. [0, 0, 0, 0, 0],
  95. [0, 0, 0, 0, 0],
  96. [0, 0, 1, 0, 0],
  97. [0, 0, 1, 0, 0],
  98. [0, 0, 0, 0, 0]
  99. ], BlockType.TYPE_B, 2, BlockOffset.UP),
  100. new BlockConfig([
  101. [0, 0, 0, 0, 0],
  102. [0, 0, 0, 0, 0],
  103. [0, 1, 1, 0, 0],
  104. [0, 0, 0, 0, 0],
  105. [0, 0, 0, 0, 0]
  106. ], BlockType.TYPE_B, 3, BlockOffset.RIGHT),
  107. new BlockConfig([
  108. [0, 0, 0, 0, 0],
  109. [0, 0, 1, 0, 0],
  110. [0, 0, 1, 0, 0],
  111. [0, 0, 1, 0, 0],
  112. [0, 0, 0, 0, 0]
  113. ], BlockType.TYPE_C, 0, BlockOffset.NONE),
  114. new BlockConfig([
  115. [0, 0, 0, 0, 0],
  116. [0, 0, 0, 0, 0],
  117. [0, 1, 1, 1, 0],
  118. [0, 0, 0, 0, 0],
  119. [0, 0, 0, 0, 0]
  120. ], BlockType.TYPE_C, 1, BlockOffset.NONE),
  121. new BlockConfig([
  122. [0, 0, 0, 0, 0],
  123. [0, 0, 0, 0, 0],
  124. [0, 0, 1, 1, 0],
  125. [0, 0, 1, 0, 0],
  126. [0, 0, 0, 0, 0]
  127. ], BlockType.TYPE_D, 0, BlockOffset.LEFTANDUP),
  128. new BlockConfig([
  129. [0, 0, 0, 0, 0],
  130. [0, 0, 0, 0, 0],
  131. [0, 1, 1, 0, 0],
  132. [0, 0, 1, 0, 0],
  133. [0, 0, 0, 0, 0]
  134. ], BlockType.TYPE_D, 1, BlockOffset.RIGHTANDUP),
  135. new BlockConfig([
  136. [0, 0, 0, 0, 0],
  137. [0, 0, 1, 0, 0],
  138. [0, 1, 1, 0, 0],
  139. [0, 0, 0, 0, 0],
  140. [0, 0, 0, 0, 0]
  141. ], BlockType.TYPE_D, 2, BlockOffset.RIGHTANDDOWN),
  142. new BlockConfig([
  143. [0, 0, 0, 0, 0],
  144. [0, 0, 1, 0, 0],
  145. [0, 0, 1, 1, 0],
  146. [0, 0, 0, 0, 0],
  147. [0, 0, 0, 0, 0]
  148. ], BlockType.TYPE_D, 3, BlockOffset.LEFTANDDOWN),
  149. new BlockConfig([
  150. [0, 0, 0, 0, 0],
  151. [0, 0, 1, 1, 0],
  152. [0, 0, 1, 1, 0],
  153. [0, 0, 0, 0, 0],
  154. [0, 0, 0, 0, 0]
  155. ], BlockType.TYPE_E, 0, BlockOffset.LEFTANDDOWN),
  156. new BlockConfig([
  157. [0, 0, 0, 0, 0],
  158. [0, 0, 0, 0, 0],
  159. [0, 0, 1, 1, 0],
  160. [0, 0, 1, 1, 0],
  161. [0, 0, 0, 0, 0]
  162. ], BlockType.TYPE_E, 1, BlockOffset.LEFTANDUP),
  163. new BlockConfig([
  164. [0, 0, 0, 0, 0],
  165. [0, 0, 0, 0, 0],
  166. [0, 1, 1, 0, 0],
  167. [0, 1, 1, 0, 0],
  168. [0, 0, 0, 0, 0]
  169. ], BlockType.TYPE_E, 2, BlockOffset.RIGHTANDUP),
  170. new BlockConfig([
  171. [0, 0, 0, 0, 0],
  172. [0, 1, 1, 0, 0],
  173. [0, 1, 1, 0, 0],
  174. [0, 0, 0, 0, 0],
  175. [0, 0, 0, 0, 0]
  176. ], BlockType.TYPE_E, 3, BlockOffset.RIGHTANDDOWN),
  177. new BlockConfig([
  178. [0, 0, 0, 0, 0],//4个格子的
  179. [0, 0, 1, 1, 0],
  180. [0, 0, 1, 1, 0],
  181. [0, 0, 0, 0, 0],
  182. [0, 0, 0, 0, 0]
  183. ], BlockType.TYPE_F, 0, BlockOffset.LEFTANDDOWN),
  184. new BlockConfig([
  185. [0, 0, 0, 0, 0],//4个格子的
  186. [0, 0, 0, 0, 0],
  187. [0, 0, 1, 1, 0],
  188. [0, 0, 1, 1, 0],
  189. [0, 0, 0, 0, 0]
  190. ], BlockType.TYPE_F, 1, BlockOffset.LEFTANDUP),
  191. new BlockConfig([
  192. [0, 0, 0, 0, 0],//4个格子的
  193. [0, 0, 0, 0, 0],
  194. [0, 1, 1, 0, 0],
  195. [0, 1, 1, 0, 0],
  196. [0, 0, 0, 0, 0]
  197. ], BlockType.TYPE_F, 2, BlockOffset.RIGHTANDUP),
  198. new BlockConfig([
  199. [0, 0, 0, 0, 0],//4个格子的
  200. [0, 1, 1, 0, 0],
  201. [0, 1, 1, 0, 0],
  202. [0, 0, 0, 0, 0],
  203. [0, 0, 0, 0, 0]
  204. ], BlockType.TYPE_F, 3, BlockOffset.RIGHTANDDOWN),
  205. new BlockConfig([
  206. [0, 0, 0, 0, 0],
  207. [0, 0, 0, 0, 0],
  208. [0, 1, 1, 1, 0],
  209. [0, 1, 0, 0, 0],
  210. [0, 0, 0, 0, 0]
  211. ], BlockType.TYPE_G, 0, BlockOffset.UP),
  212. new BlockConfig([
  213. [0, 0, 0, 0, 0],
  214. [0, 1, 1, 0, 0],
  215. [0, 0, 1, 0, 0],
  216. [0, 0, 1, 0, 0],
  217. [0, 0, 0, 0, 0]
  218. ], BlockType.TYPE_G, 1, BlockOffset.RIGHT),
  219. new BlockConfig([
  220. [0, 0, 0, 0, 0],
  221. [0, 0, 0, 1, 0],
  222. [0, 1, 1, 1, 0],
  223. [0, 0, 0, 0, 0],
  224. [0, 0, 0, 0, 0]
  225. ], BlockType.TYPE_G, 2, BlockOffset.DOWN),
  226. new BlockConfig([
  227. [0, 0, 0, 0, 0],
  228. [0, 0, 1, 0, 0],
  229. [0, 0, 1, 0, 0],
  230. [0, 0, 1, 1, 0],
  231. [0, 0, 0, 0, 0]
  232. ], BlockType.TYPE_G, 3, BlockOffset.LEFT),
  233. new BlockConfig([
  234. [0, 0, 0, 0, 0],
  235. [0, 0, 1, 0, 0],
  236. [0, 0, 1, 1, 0],
  237. [0, 0, 1, 0, 0],
  238. [0, 0, 0, 0, 0]
  239. ], BlockType.TYPE_H, 0, BlockOffset.LEFT),
  240. new BlockConfig([
  241. [0, 0, 0, 0, 0],
  242. [0, 0, 0, 0, 0],
  243. [0, 1, 1, 1, 0],
  244. [0, 0, 1, 0, 0],
  245. [0, 0, 0, 0, 0]
  246. ], BlockType.TYPE_H, 1, BlockOffset.UP),
  247. new BlockConfig([
  248. [0, 0, 0, 0, 0],
  249. [0, 0, 1, 0, 0],
  250. [0, 1, 1, 1, 0],
  251. [0, 0, 0, 0, 0],
  252. [0, 0, 0, 0, 0]
  253. ], BlockType.TYPE_H, 2, BlockOffset.DOWN),
  254. new BlockConfig([
  255. [0, 0, 0, 0, 0],
  256. [0, 0, 1, 0, 0],
  257. [0, 1, 1, 0, 0],
  258. [0, 0, 1, 0, 0],
  259. [0, 0, 0, 0, 0]
  260. ], BlockType.TYPE_H, 3, BlockOffset.RIGHT),
  261. new BlockConfig([
  262. [0, 0, 0, 0, 0],
  263. [0, 0, 1, 1, 0],
  264. [0, 0, 1, 0, 0],
  265. [0, 0, 1, 0, 0],
  266. [0, 0, 0, 0, 0]
  267. ], BlockType.TYPE_I, 0, BlockOffset.LEFT),
  268. new BlockConfig([
  269. [0, 0, 0, 0, 0],
  270. [0, 0, 0, 0, 0],
  271. [0, 1, 1, 1, 0],
  272. [0, 0, 0, 1, 0],
  273. [0, 0, 0, 0, 0]
  274. ], BlockType.TYPE_I, 1, BlockOffset.UP),
  275. new BlockConfig([
  276. [0, 0, 0, 0, 0],
  277. [0, 0, 1, 0, 0],
  278. [0, 0, 1, 0, 0],
  279. [0, 1, 1, 0, 0],
  280. [0, 0, 0, 0, 0]
  281. ], BlockType.TYPE_I, 2, BlockOffset.RIGHT),
  282. new BlockConfig([
  283. [0, 0, 0, 0, 0],
  284. [0, 1, 0, 0, 0],
  285. [0, 1, 1, 1, 0],
  286. [0, 0, 0, 0, 0],
  287. [0, 0, 0, 0, 0]
  288. ], BlockType.TYPE_I, 3, BlockOffset.DOWN),
  289. new BlockConfig([
  290. [0, 0, 0, 0, 0],
  291. [0, 1, 1, 0, 0],
  292. [0, 0, 1, 1, 0],
  293. [0, 0, 0, 0, 0],
  294. [0, 0, 0, 0, 0]
  295. ], BlockType.TYPE_J, 0, BlockOffset.DOWN),
  296. new BlockConfig([
  297. [0, 0, 0, 0, 0],
  298. [0, 0, 0, 1, 0],
  299. [0, 0, 1, 1, 0],
  300. [0, 0, 1, 0, 0],
  301. [0, 0, 0, 0, 0]
  302. ], BlockType.TYPE_J, 1, BlockOffset.LEFT),
  303. new BlockConfig([
  304. [0, 0, 0, 0, 0],
  305. [0, 0, 0, 0, 0],
  306. [0, 1, 1, 0, 0],
  307. [0, 0, 1, 1, 0],
  308. [0, 0, 0, 0, 0]
  309. ], BlockType.TYPE_J, 2, BlockOffset.UP),
  310. new BlockConfig([
  311. [0, 0, 0, 0, 0],
  312. [0, 0, 1, 0, 0],
  313. [0, 1, 1, 0, 0],
  314. [0, 1, 0, 0, 0],
  315. [0, 0, 0, 0, 0]
  316. ], BlockType.TYPE_J, 3, BlockOffset.RIGHT),
  317. new BlockConfig([
  318. [0, 0, 0, 0, 0],//5个的
  319. [0, 0, 1, 0, 0],
  320. [0, 0, 1, 0, 0],
  321. [0, 0, 1, 0, 0],
  322. [0, 0, 0, 0, 0]
  323. ], BlockType.TYPE_K, 0, BlockOffset.NONE),
  324. new BlockConfig([
  325. [0, 0, 0, 0, 0],//5个的
  326. [0, 0, 0, 0, 0],
  327. [0, 1, 1, 1, 0],
  328. [0, 0, 0, 0, 0],
  329. [0, 0, 0, 0, 0]
  330. ], BlockType.TYPE_K, 1, BlockOffset.NONE),
  331. new BlockConfig([
  332. [0, 0, 0, 0, 0],
  333. [0, 1, 1, 1, 0],
  334. [0, 1, 0, 0, 0],
  335. [0, 1, 0, 0, 0],
  336. [0, 0, 0, 0, 0]
  337. ], BlockType.TYPE_L, 0, BlockOffset.NONE),
  338. new BlockConfig([
  339. [0, 0, 0, 0, 0],
  340. [0, 1, 1, 1, 0],
  341. [0, 0, 0, 1, 0],
  342. [0, 0, 0, 1, 0],
  343. [0, 0, 0, 0, 0]
  344. ], BlockType.TYPE_L, 1, BlockOffset.NONE),
  345. new BlockConfig([
  346. [0, 0, 0, 0, 0],
  347. [0, 0, 0, 1, 0],
  348. [0, 0, 0, 1, 0],
  349. [0, 1, 1, 1, 0],
  350. [0, 0, 0, 0, 0]
  351. ], BlockType.TYPE_L, 2, BlockOffset.NONE),
  352. new BlockConfig([
  353. [0, 0, 0, 0, 0],
  354. [0, 1, 0, 0, 0],
  355. [0, 1, 0, 0, 0],
  356. [0, 1, 1, 1, 0],
  357. [0, 0, 0, 0, 0]
  358. ], BlockType.TYPE_L, 3, BlockOffset.NONE),
  359. new BlockConfig([
  360. [0, 0, 0, 0, 0],
  361. [0, 1, 1, 0, 0],
  362. [0, 1, 1, 0, 0],
  363. [0, 1, 1, 0, 0],
  364. [0, 0, 0, 0, 0]
  365. ], BlockType.TYPE_M, 0, BlockOffset.RIGHT),
  366. new BlockConfig([
  367. [0, 0, 0, 0, 0],
  368. [0, 0, 0, 0, 0],
  369. [0, 1, 1, 1, 0],
  370. [0, 1, 1, 1, 0],
  371. [0, 0, 0, 0, 0]
  372. ], BlockType.TYPE_M, 1, BlockOffset.UP),
  373. new BlockConfig([
  374. [0, 0, 0, 0, 0],
  375. [0, 1, 1, 1, 0],
  376. [0, 1, 1, 1, 0],
  377. [0, 0, 0, 0, 0],
  378. [0, 0, 0, 0, 0]
  379. ], BlockType.TYPE_M, 2, BlockOffset.DOWN),
  380. new BlockConfig([
  381. [0, 0, 0, 0, 0],
  382. [0, 0, 1, 1, 0],
  383. [0, 0, 1, 1, 0],
  384. [0, 0, 1, 1, 0],
  385. [0, 0, 0, 0, 0]
  386. ], BlockType.TYPE_M, 3, BlockOffset.LEFT),
  387. new BlockConfig([
  388. [0, 0, 0, 0, 0],
  389. [0, 0, 1, 0, 0],
  390. [0, 0, 1, 1, 0],
  391. [0, 0, 0, 1, 0],
  392. [0, 0, 0, 0, 0]
  393. ], BlockType.TYPE_N, 0, BlockOffset.LEFT),
  394. new BlockConfig([
  395. [0, 0, 0, 0, 0],
  396. [0, 0, 0, 0, 0],
  397. [0, 0, 1, 1, 0],
  398. [0, 1, 1, 0, 0],
  399. [0, 0, 0, 0, 0]
  400. ], BlockType.TYPE_N, 1, BlockOffset.UP),
  401. new BlockConfig([
  402. [0, 0, 0, 0, 0],
  403. [0, 1, 0, 0, 0],
  404. [0, 1, 1, 0, 0],
  405. [0, 0, 1, 0, 0],
  406. [0, 0, 0, 0, 0]
  407. ], BlockType.TYPE_N, 2, BlockOffset.RIGHT),
  408. new BlockConfig([
  409. [0, 0, 0, 0, 0],
  410. [0, 0, 1, 1, 0],
  411. [0, 1, 1, 0, 0],
  412. [0, 0, 0, 0, 0],
  413. [0, 0, 0, 0, 0]
  414. ], BlockType.TYPE_N, 3, BlockOffset.DOWN),
  415. ];
  416. // 权重数组
  417. export const BlockWeights = {
  418. [BlockType.TYPE_A]: 0.01,
  419. [BlockType.TYPE_B]: 0.07,
  420. [BlockType.TYPE_C]: 0.035,
  421. [BlockType.TYPE_D]: 0.17,
  422. [BlockType.TYPE_E]: 0.085,
  423. [BlockType.TYPE_F]: 0.085,
  424. [BlockType.TYPE_G]: 0.07,
  425. [BlockType.TYPE_H]: 0.07,
  426. [BlockType.TYPE_I]: 0.07,
  427. [BlockType.TYPE_J]: 0.13,
  428. [BlockType.TYPE_K]: 0.035,
  429. [BlockType.TYPE_L]: 0.01,
  430. [BlockType.TYPE_M]: 0.07,
  431. [BlockType.TYPE_N]: 0.13,
  432. };
  433. export var GridBoardData = {
  434. //前三步是引导布局
  435. customizeBoardData1: [
  436. [0, 0, 0, 1, 1, 0, 0, 0],
  437. [0, 0, 0, 1, 1, 0, 0, 0],
  438. [0, 0, 0, 0, 1, 0, 0, 0],
  439. [0, 0, 0, 0, 0, 0, 0, 0],
  440. [0, 0, 0, 1, 0, 0, 0, 0],
  441. [0, 0, 0, 1, 1, 0, 0, 0],
  442. [0, 0, 0, 1, 1, 0, 0, 0],
  443. [0, 0, 0, 1, 1, 0, 0, 0]
  444. ],
  445. //第二步引导,需要旋转
  446. customizeBoardData2: [
  447. [0, 0, 0, 0, 0, 0, 0, 0],
  448. [0, 0, 0, 0, 0, 0, 0, 0],
  449. [0, 0, 0, 0, 0, 0, 0, 0],
  450. [1, 1, 1, 0, 0, 1, 1, 1],
  451. [1, 1, 1, 0, 1, 1, 1, 1],
  452. [0, 0, 0, 0, 0, 0, 0, 0],
  453. [0, 0, 0, 0, 0, 0, 0, 0],
  454. [0, 0, 0, 0, 0, 0, 0, 0]
  455. ],
  456. //第三步十字引导
  457. customizeBoardData3: [
  458. [0, 0, 0, 1, 1, 0, 0, 0],
  459. [0, 0, 0, 1, 1, 0, 0, 0],
  460. [0, 0, 0, 1, 1, 0, 0, 0],
  461. [1, 1, 1, 0, 0, 1, 1, 1],
  462. [1, 1, 1, 0, 0, 1, 1, 1],
  463. [0, 0, 0, 1, 1, 0, 0, 0],
  464. [0, 0, 0, 1, 1, 0, 0, 0],
  465. [0, 0, 0, 1, 1, 0, 0, 0]
  466. ],
  467. //第4步引导
  468. customizeBoardData4: [
  469. [1, 1, 0, 0, 0, 0, 1, 1],
  470. [1, 1, 0, 0, 0, 0, 1, 1],
  471. [0, 0, 0, 0, 0, 0, 0, 0],
  472. [0, 0, 0, 0, 0, 0, 0, 0],
  473. [1, 1, 1, 0, 0, 1, 1, 1],
  474. [0, 0, 0, 0, 0, 0, 0, 0],
  475. [1, 1, 0, 0, 0, 0, 1, 1],
  476. [1, 1, 0, 0, 0, 0, 1, 1]
  477. ],
  478. customizeBoardData5: [
  479. [0, 0, 0, 0, 0, 0, 0, 0],
  480. [0, 0, 0, 0, 0, 0, 0, 0],
  481. [0, 0, 0, 0, 0, 0, 0, 0],
  482. [0, 0, 0, 0, 0, 0, 0, 0],
  483. [0, 0, 0, 0, 0, 0, 0, 0],
  484. [0, 0, 0, 0, 0, 0, 0, 0],
  485. [0, 0, 0, 0, 0, 0, 0, 0],
  486. [0, 0, 0, 0, 0, 0, 0, 0]
  487. ]
  488. }