* 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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS