EXPORT SCOR; DRAWP(G,C,A,RED,PX,PY) BEGIN //绘制图像 LOCAL PA; PA:=GETP(A,RED); FOR N FROM 1 TO 4 DO BLIT_P(G,(PA(N*2-1)+PX)*8,(PA(N*2)+PY)*8,C); END; END; BOOM() BEGIN N:=−1; WHILE (Y+N)*8≤112 AND N≤1 DO FOR P FROM −1 TO 1 DO IF (X+P)*8≥8 AND (X+P)*8≤112 THEN BLIT_P(G9,(X+P)*8,(Y+N)*8,G2);END; END; N:=N+1; END; END; ISOK(A,RED,LX,LY) BEGIN //满足移动条件,返回1 LOCAL PA:=GETP(A,RED); FOR N FROM 1 TO 4 DO IF GETPIX_P(G9,(LX+PA(N*2-1))*8+3,(LY+PA(N*2))*8+3)==0 THEN RETURN 0;END;END;RETURN 1; END; ISSCOR() BEGIN //判断分数,插除,移动 FOR M FROM 0 TO 3 DO IF Y+M≥15 THEN BREAK; END; FOR N FROM 1 TO 14 DO IF GETPIX_P(G9,N*8+3,(Y+M)*8+3)≠0 THEN RETURN;END; END; RECT_P(G9,8,(Y+M)*8,120,(Y+M)*8+8,3,3); DIMGROB_P(G5,120,(Y+M)*8); SUBGROB_P(G9,8,0,128,(Y+M)*8,G5); BLIT_P(G9,8,8,G5);SCOR:=SCOR+10; IF SCOR>L9(1) THEN L9(1):=SCOR;TEXTOUT_P("最高分:"+L9(1),190,0,0,0,100,3);END; TEXTOUT_P("分数:"+SCOR,130,0,0,0,60,3); END; END; EXPORT ELS() BEGIN //主程序 LOCAL RED:=0,NAME,NAMEO,on1:=0,on2:=0; NAMEO:=INT(RANDOM(1,10)); NAME:=INT(RANDOM(1,10)); SCOR:=0; X:=8;Y:=0;I:=0;G:=0;V:=3; IF SIZE(L9)==0 THEN L9(1):=0;END; DIMGROB_P(G1,8,8); DIMGROB_P(G2,8,8); DIMGROB_P(G3,8,8); DIMGROB_P(G4,8,8); DIMGROB_P(G9,16*8,16*8,3); RECT_P(G1,0,0,7,7,3,1); RECT_P(G2,0,0,7,7,3,3); LOAD(G3,0,0,{1,"¡ĘĘĘ¡žžž¡",8,8}); LOAD(G4,0,0,{3,"£¡¡ġ«ŁËʼnŁ«ŋīŋŋŋʼn¡¡",8,8}); PIXON_P(G4,0,7,3); RECT(); TEXTOUT_P("分数:"+SCOR,130,0,0,0,60,3); TEXTOUT_P("最高分:"+L9(1),190,0,0,0,100,3); TEXTOUT_P("下个方块:",130,16,0,0,60,3); TEXTOUT_P("Cerry-2021.07.29",130,115,1); RECT_P(135,31,169,65,0,3); IF NAMEO==9 THEN DRAWP(G0,G4,NAMEO,RED,17,4); ELSE DRAWP(G0,G3,NAMEO,RED,17,4);END; RECT_P(G9,0,0,8,128,0,0); RECT_P(G9,0,120,128,128,0,0); RECT_P(G9,120,0,128,128,0,0); WHILE 1 DO WAIT(0.1); I:=I+1; K:=GETKEY(); DRAWP(G9,G2,NAME,RED,X,Y); //按键检测 IF K==5 THEN IF V==0 THEN V:=7;ELSE V:=0; END; END; IF K==9 THEN IF ISOK(NAME,RED+1,X,Y) THEN RED:=RED+1;END;END; IF ISKEYDOWN(10) THEN V:=6;on1:=on1+1; IF (on1≥4 OR on1==1) AND ISOK(NAME,RED,X+1,Y) THEN X:=X+1;END;ELSE on1:=0;END; IF ISKEYDOWN(14) THEN V:=6;on2:=on2+1; IF (on2≥4 OR on2==1) AND ISOK(NAME,RED,X-1,Y) THEN X:=X-1;END;ELSE on2:=0;END; IF K==15 THEN V:=1;END; IF I MOD V==0 THEN IF ISOK(NAME,RED,X,Y+1)==0 THEN IF NAME==9 THEN BOOM();ELSE DRAWP(G9,G3,NAME,RED,X,Y); ISSCOR();END; IF Y==0 THEN MSGBOX("GAME OVER",1);BREAK;END; RANDSEED(RANDOM(1,10));NAME:=NAMEO; NAMEO:=INT(RANDOM(1,10)); RECT_P(136,32,168,64); DRAWP(G0,G4,NAMEO,RED,17,4); V:=7;X:=8;Y:=0; ELSE Y:=Y+1;END; END; IF NAME == 9 THEN DRAWP(G9,G4,NAME,RED,X,Y); ELSE DRAWP(G9,G1,NAME,RED,X,Y); END; BLIT_P(G0,0,0,G9); END; END;