Advertisement
YaQNjx

A2048min

Nov 16th, 2019
573
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. EXPORT lib2048min_IFEND(now)
  2. BEGIN
  3. LOCAL row,col,out;
  4. 1►out;
  5. FOR row FROM 1 TO 4 DO
  6. FOR col FROM 1 TO 4 DO
  7. IF now(row,col)==0 THEN
  8. 0►out;
  9. END;
  10. END;
  11. END;
  12. RETURN out;
  13. END;
  14.  
  15. EXPORT lib2048min_ADD(now,a)
  16. BEGIN
  17. LOCAL th,pos,m;
  18. FOR th FROM 1 TO a DO
  19. 2*FLOOR(RANDOM(9,19)/9)►m;
  20. WHILE 1 DO
  21. {CEILING(RANDOM(4)),CEILING(RANDOM(4))}►pos;
  22. IF now(pos(1),pos(2))==0 THEN
  23. BREAK;
  24. END;
  25. END;
  26. m►now(pos(1),pos(2));
  27. END;
  28. RETURN now;
  29. END;
  30.  
  31.  
  32. EXPORT lib2048min_DRAW(now) BEGIN
  33. LOCAL row, col, num_now, long;
  34. FOR row FROM 1 TO 4 DO
  35. FOR col FROM 1 TO 4 DO
  36. now(row,col)►num_now;
  37. IF num_now==0 THEN
  38. RECT_P(31*col-29,31*row-29,31*col-2,31*row-2,3);
  39. ELSE
  40. FLOOR(LOG(num_now))+1►long;
  41. RECT_P(31*col-29,31*row-29,31*col-2,31*row-2,0);
  42. TEXTOUT_P(num_now,31*col-15-3*long,31*row-22,1,3);
  43. END;
  44. END;
  45. END;
  46.  
  47. END;
  48.  
  49.  
  50. EXPORT lib2048min_MOVE(now, move)
  51. BEGIN
  52. LOCAL poss_now, poss_prev, next, num_now, num_prev, row,col;
  53. LOCAL poss_head, offset_row, offset_col;
  54.  
  55. MAKEMAT(0,4,4)►next;
  56. move(1)►poss_head;move(2)►offset_row;move(3)►offset_col;
  57.  
  58. FOR col FROM 0 TO 3 DO
  59. 0►num_prev;
  60. poss_head+col*offset_col-offset_row►poss_prev;
  61. FOR row FROM 0 TO 3 DO
  62. poss_head+col*offset_col+row*offset_row►poss_now;
  63. now(poss_now(1),poss_now(2))►num_now;
  64. IF num_now≠0 THEN
  65. IF num_now==num_prev THEN
  66. num_prev*2►num_prev;
  67. num_prev►next(poss_prev(1),poss_prev(2));
  68. 0►num_prev;
  69. ELSE
  70. poss_prev+offset_row►poss_prev;
  71. num_now►next(poss_prev(1),poss_prev(2));
  72. num_now►num_prev;
  73. END;
  74. END;
  75. END;
  76. END;
  77. RETURN next;
  78. END;
  79.  
  80. EXPORT A2048min()
  81. BEGIN
  82. LOCAL now,next,n,key,moves;
  83. RECT_P();
  84. MAKEMAT(0,4,4)►now;MAKEMAT(0,4,4)►next;
  85. {0,0,0,0,0,0,0,0,{{1,1},{1,0},{0,1}},{{4,4},{0,-1},{-1,0}},0,0,0,{{1,1},{0,1},{1,0}},{{4,1},{-1,0},{0,1}}}►moves;
  86. FOR n FROM 0 TO 124 STEP 31 DO
  87. LINE_P(n,0,n,124,0);
  88. LINE_P(0,n,124,n,0);
  89. END;
  90. lib2048min_ADD(now,2)►now;
  91. lib2048min_DRAW(now);
  92. WHILE 1 DO
  93. GETKEY►key;
  94. IF POS({9,10,14,15},key)==0 THEN
  95. CONTINUE;
  96. END;
  97. lib2048min_MOVE(now,moves(key))►next;
  98. lib2048min_DRAW(next);
  99. IF lib2048min_IFEND(next)==0 AND now≠next THEN
  100. lib2048min_ADD(next,1)►next;
  101. WAIT(0.2);
  102. lib2048min_DRAW(next);
  103. END;
  104. next►now;
  105. END;
  106. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement