* ES-BASIC #15 -(by [[K]], 2019.11.30) ** ブロック崩しゲーム (142行)(コメントのみの行も数えています) ** ブロック崩しゲーム (140行)(コメントのみの行も数えています) -これは ES-BASIC ver.0.1d以降でしか動きません。 --ver.0.1cまでにはバグがあってGPRINTS命令がうまく動かないのです。 -パッドはカーソルキーで動かします。左右に動くのはもちろんですが、上下にも動きます。 --これでボールをブロックと壁の隙間に閉じ込めることができて、それが成功するとかなり気持ちがいいです! -100点ごとにパッドが短くなります(=徐々に難しくなります)。 1000 OPENWIN 640,480 1010 ARY INT NEW COL[6]; ARY INT COL[0...]={0XBF0000,0XBFBF00,0X00BF00,0X00BFBF,0X0000BF,0XBF00BF} 1020 ARY INT NEW C[40*30]; // index=y*40+x 1025 ALIAS FILLRECT:FILLRECT0 1030 DOLOOP 1040 ML=10 1050 SCORE=0 1060 LABEL RELOAD 1070 BLOCKS=0 1080 FILLRECT 640,480,0,0,0 1090 BX=19; BY=20; VX=1; VY=_1; MX=15; MY=29 1100 I1=40*30; FORNE I=0,I1 1110 C[I]=0 1120 NEXT 1130 FORNE I=0,40 1140 C[1*40+I]=1 1150 NEXT 1160 FILLRECT 640,16,0,16,7 1170 FORNE J=2,30 1180 C[J*40+ 0]=1 1190 C[J*40+39]=1 1200 NEXT 1210 FILLRECT 16,448, 0,32,7 1220 FILLRECT 16,448,624,32,7 1230 // 1240 FORNE I=0,6 1250 I4=I+4 1260 T=COL[I]; FILLRECT 608-128,16,16+64,I4*16,T+0X1000000 1270 FORNE J=5,34,2 1280 C[I4*40+J+0]=8-I 1290 C[I4*40+J+1]=8-I 1300 FILLRECT 32, 1,J*16 ,I4*16+15,0 1310 FILLRECT 1,16,J*16+31,I4*16 ,0 1320 FILLRECT 32, 1,J*16 ,I4*16 ,7 1330 FILLRECT 1,16,J*16 ,I4*16 ,7 1340 BLOCKS=BLOCKS+1 1350 NEXT 1360 NEXT 1370 FILLOVAL 16,16,BX*16,BY*16,7 1380 FILLRECT ML*16,16,MX*16,MY*16,7 1390 EWAIT 500 1400 // 1410 PH=1; DOLOOP 1420 PH=PH^1 1430 S100=SCORE/100 1440 IF HIGH<SCORE THEN HIGH=SCORE; FI 1450 // 1460 FILLRECT 640,16,0,0,0 1470 GPRINTS 160,0,"SCORE: HIGH:",7,0 1480 GPRINTI 6*8+160,0,5,SCORE 1490 GPRINTI 21*8+160,0,5,HIGH 1500 // 1510 // ball 1520 IF PH!=0 GOTO SKIP 1530 FILLRECT 16,16,BX*16,BY*16,0 1540 C[BY*40+BX]=0 1550 T=0 1560 S=C[BY*40+BX+VX]; IF S==2 THEN T=1; FI 1570 S=C[(BY+VY)*40+BX]; IF S==2 THEN T=1; FI 1580 S=C[(BY+VY)*40+BX+VX]; IF S==2 THEN T=1; FI 1590 IF T!=0 THEN SCORE=SCORE+29-BY; FI 1600 T=C[BY*40+BX+VX];IF T>=3 THEN 1610 I=BX+VX; J=BY 1620 T=C[J*40+I]; SCORE=SCORE+T-2 1630 IF (I&1)==0 THEN I=I-1; FI 1640 FILLRECT 32,16,I*16,J*16,0 1650 VX=VX*_1 1660 C[J*40+I]=0; 1670 C[J*40+I+1]=0 1680 BLOCKS=BLOCKS-1 1690 FI 1700 T=C[(BY+VY)*40+BX];IF T>=3 THEN 1710 I=BX; J=BY+VY 1720 T=C[J*40+I]; SCORE=SCORE+T-2 1730 IF (I&1)==0 THEN I=I-1; FI 1740 FILLRECT 32,16,I*16,J*16,0 1750 VY=VY*_1 1760 C[J*40+I]=0; 1770 C[J*40+I+1]=0 1780 BLOCKS=BLOCKS-1 1790 FI 1800 T=C[(BY+VY)*40+BX+VX];IF T>=3 THEN 1810 I=BX+VX; J=BY+VY 1820 T=C[J*40+I]; SCORE=SCORE+T-2 1830 IF (I&1)==0 THEN I=I-1; FI 1840 FILLRECT 32,16,I*16,J*16,0 1850 VX=VX*_1; VY=VY*_1 1860 C[J*40+I]=0; 1870 C[J*40+I+1]=0 1880 BLOCKS=BLOCKS-1 1890 FI 1900 T=C[BY*40+BX+VX]; IF T!=0 THEN VX=VX*_1; FI 1910 T=C[(BY+VY)*40+BX]; IF T!=0 THEN VY=VY*_1; FI 1920 T=C[(BY+VY)*40+BX+VX]; IF T!=0 THEN VX=VX*_1; VY=VY*_1; FI 1930 T=C[(BY+VY)*40+BX+VX]; IF T==0 THEN 1940 BX=BX+VX 1950 BY=BY+VY 1960 FI 1970 FILLOVAL 16,16,BX*16,BY*16,7 1980 C[BY*40+BX]=1 1990 IF BY>=29 GOTO GAMEOVER 2000 T=SCORE/100; IF T!=S100 THEN IF ML>4 THEN 2010 FILLRECT ML*16,16,MX*16,MY*16,0 2020 FORNE I=0,ML 2030 C[MY*40+MX+I]=0 2040 NEXT 2050 ML=ML-1 2060 FI; FI 2070 // 2080 LABEL SKIP 2090 // pad 2100 FILLRECT ML*16,16,MX*16,MY*16,0 2110 FORNE I=0,ML 2120 C[MY*40+MX+I]=0 2130 NEXT 2140 J=0; K=0 2150 I=EINKEY 2160 IF I==0X1024 THEN J=_1; FI; // left 2170 IF I==0X1025 THEN J= 1; FI; // right 2180 IF I==0X1026 THEN K=_1; FI; // up 2190 IF I==0X1027 THEN IF MY<=28 THEN K=1; FI; FI; // down 2200 IF I!=0 THEN 2210 DOLOOP; ENDDO EINKEY!=0 2220 FI 2200 CLRKEYBUF 2230 D=0 2240 FORNE I=0,ML 2250 T=C[(MY+K)*40+MX+J+I]; D=D+T 2260 NEXT 2270 IF D==0 THEN 2280 MX=MX+J 2290 MY=MY+K 2300 FI 2310 FILLRECT ML*16,16,MX*16,MY*16,7 2320 FORNE I=0,ML 2330 C[MY*40+MX+I]=2 2340 NEXT 2350 EWAIT 50 2360 IF BLOCKS==0 GOTO RELOAD 2370 ENDDO 2380 LABEL GAMEOVER 2390 KWAIT 10 2400 ENDDO -http://k.osask.jp/files/esb20191211a.png * こめんと欄 #comment