Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- EXPORT lib2048min_IFEND(now)
- BEGIN
- LOCAL row,col,out;
- 1►out;
- FOR row FROM 1 TO 4 DO
- FOR col FROM 1 TO 4 DO
- IF now(row,col)==0 THEN
- 0►out;
- END;
- END;
- END;
- RETURN out;
- END;
- EXPORT lib2048min_ADD(now,a)
- BEGIN
- LOCAL th,pos,m;
- FOR th FROM 1 TO a DO
- 2*FLOOR(RANDOM(9,19)/9)►m;
- WHILE 1 DO
- {CEILING(RANDOM(4)),CEILING(RANDOM(4))}►pos;
- IF now(pos(1),pos(2))==0 THEN
- BREAK;
- END;
- END;
- m►now(pos(1),pos(2));
- END;
- RETURN now;
- END;
- EXPORT lib2048min_DRAW(now) BEGIN
- LOCAL row, col, num_now, long;
- FOR row FROM 1 TO 4 DO
- FOR col FROM 1 TO 4 DO
- now(row,col)►num_now;
- IF num_now==0 THEN
- RECT_P(31*col-29,31*row-29,31*col-2,31*row-2,3);
- ELSE
- FLOOR(LOG(num_now))+1►long;
- RECT_P(31*col-29,31*row-29,31*col-2,31*row-2,0);
- TEXTOUT_P(num_now,31*col-15-3*long,31*row-22,1,3);
- END;
- END;
- END;
- END;
- EXPORT lib2048min_MOVE(now, move)
- BEGIN
- LOCAL poss_now, poss_prev, next, num_now, num_prev, row,col;
- LOCAL poss_head, offset_row, offset_col;
- MAKEMAT(0,4,4)►next;
- move(1)►poss_head;move(2)►offset_row;move(3)►offset_col;
- FOR col FROM 0 TO 3 DO
- 0►num_prev;
- poss_head+col*offset_col-offset_row►poss_prev;
- FOR row FROM 0 TO 3 DO
- poss_head+col*offset_col+row*offset_row►poss_now;
- now(poss_now(1),poss_now(2))►num_now;
- IF num_now≠0 THEN
- IF num_now==num_prev THEN
- num_prev*2►num_prev;
- num_prev►next(poss_prev(1),poss_prev(2));
- 0►num_prev;
- ELSE
- poss_prev+offset_row►poss_prev;
- num_now►next(poss_prev(1),poss_prev(2));
- num_now►num_prev;
- END;
- END;
- END;
- END;
- RETURN next;
- END;
- EXPORT A2048min()
- BEGIN
- LOCAL now,next,n,key,moves;
- RECT_P();
- MAKEMAT(0,4,4)►now;MAKEMAT(0,4,4)►next;
- {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;
- FOR n FROM 0 TO 124 STEP 31 DO
- LINE_P(n,0,n,124,0);
- LINE_P(0,n,124,n,0);
- END;
- lib2048min_ADD(now,2)►now;
- lib2048min_DRAW(now);
- WHILE 1 DO
- GETKEY►key;
- IF POS({9,10,14,15},key)==0 THEN
- CONTINUE;
- END;
- lib2048min_MOVE(now,moves(key))►next;
- lib2048min_DRAW(next);
- IF lib2048min_IFEND(next)==0 AND now≠next THEN
- lib2048min_ADD(next,1)►next;
- WAIT(0.2);
- lib2048min_DRAW(next);
- END;
- next►now;
- END;
- END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement