ES-BASIC #10
(12) ES-BASIC ver.0.1b 向けのプログラム集
- ES-BASICはバージョン0.1bより32bit/64bitの両方に対応しました。
- また書きなおすついでに微妙に仕様が変わったので、今までのプログラムの中にはそのままでは動かないものもあります。
- そういうのを管理するのが面倒なので、ひとまず全部ここに書くことにします。
(12-1) グラデーション
1000 OPENWIN 256,256
1010 FOR Y=0,255
1020 FOR X=0,255
1030 C=RGBCOL(Y,X,0)
1040 SETPIX X,Y,C
1050 NEXT
1060 NEXT
(12-2) マンデルブロ集合
1010 OPENWIN 512,384
1020 $DI=R07; // R07をプログラム中で使いたいときの慣用句
1030 ALIAS ZX:R01, ZY:R03, XX:R06, YY:R07, CX:R08, CY:R09, N:R10, SN:R11, SX:R12, SY:R13, C:R01
1040 FOR Y=0,383
1050 FOR X=0,511
1060 SN=0
1070 FOR SX=0,3
1080 CX=(X*4+SX)*56+4673536
1090 FOR SY=0,3
1100 CY=(Y*4+SY)*_56-124928
1110 ZX=CX
1120 ZY=CY
1130 FOR N=1,446
1140 XX=ZX*:ZX>>24
1150 YY=ZY*:ZY>>24
1160 IF XX+YY>0X4000000 GOTO SKIP
1170 ZY=ZY*:ZX>>23
1180 ZX=XX+CX-YY
1190 ZY=ZY+CY
1200 NEXT
1210 LABEL SKIP
1220 SN=SN+N
1230 NEXT
1240 NEXT
1250 N=SN>>4; // N=SN/16 (N=0...447)
1260 C=N<<16
1270 IF N>=256 THEN
1280 C=0
1290 IF N<447 THEN
1300 C=((N-255)<<8)+0XFF0000
1310 FI
1320 FI
1330 SETPIX X,Y,C+0X1000000
1340 NEXT
1350 LEAPFLUSHWIN 300
1360 NEXT
(12-3) 迷路作成
1000 OPENWIN 752,496
1010 CHRBOX 47,31,0,0,1,2
1020 ECHR 1,1,0
1030 FOR I=0,1000000
1040 X=(RAND%23)*2+1
1050 Y=(RAND%15)*2+1
1060 GETCHR X,Y,C
1070 IF C==0 THEN
1080 LABEL DIGLOOP; // X,Yから掘り進める.
1090 D0=0; D1=0; D2=0; D3=0
1100 IF X<45 THEN GETCHR X+1,Y,C; GETCHR X+2,Y,CC; IF C+CC==2 THEN D0=1; FI; FI
1110 IF X> 1 THEN GETCHR X-1,Y,C; GETCHR X-2,Y,CC; IF C+CC==2 THEN D1=1; FI; FI
1120 IF Y<29 THEN GETCHR X,Y+1,C; GETCHR X,Y+2,CC; IF C+CC==2 THEN D2=1; FI; FI
1130 IF Y> 1 THEN GETCHR X,Y-1,C; GETCHR X,Y-2,CC; IF C+CC==2 THEN D3=1; FI; FI
1140 D=D0+D1+D2+D3
1150 IF D>0 THEN
1160 DD=RAND%D
1170 IF D0!=0 THEN IF DD==0 THEN ECHR X+1,Y,0; X=X+2; FI; DD=DD-1; FI
1180 IF D1!=0 THEN IF DD==0 THEN ECHR X-1,Y,0; X=X-2; FI; DD=DD-1; FI
1190 IF D2!=0 THEN IF DD==0 THEN ECHR X,Y+1,0; Y=Y+2; FI; DD=DD-1; FI
1200 IF D3!=0 THEN IF DD==0 THEN ECHR X,Y-1,0; Y=Y-2; FI; DD=DD-1; FI
1210 ECHR X,Y,0
1220 GOTO DIGLOOP
1230 FI
1240 FI
1250 NEXT
こめんと欄