home *** CD-ROM | disk | FTP | other *** search
- 100 ' F-BASIC386 SAMPLE PROGRAM % COPYRIGHT FUJITSU LIMITED 19900514
- 110 ' PUBLIC DOMAIN SOFTWARE by PRELUDE FMC(Fujitsuマイコンクラブ)
- 120 ' ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
- 130 ' ★ ソフト名:フラクタル・デモ PART7 V4 ★
- 140 ' ★ 登録名 :FRADEMO07.BAS ★
- 150 ' ★ 登録者 :PRELUDE(Yuuichi Sasaki) ★
- 160 ' ★ 動作確認:FM-TOWNS 2 F-BASIC386 V1.1L20 ★
- 170 ' ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
- 180 ' 初期設定
- 190 CLEAR,,4096
- 200 ' マウス割込み処理の定義
- 210 MOUSE 0:MOUSE 4,0,0,319,239:MOUSE 1,0,0,0
- 220 ON MOUSE (5) GOSUB *右放す:MOUSE (5) OFF
- 230 ON MOUSE (1) GOSUB *動かす:MOUSE (1) OFF
- 240 ' Hopalong 関数の定義
- 250 DEF FNX0(A,B,C,X,Y)=Y-SQR(ABS(B*X-C))
- 260 DEF FNX1(A,B,C,X,Y)=Y+SQR(ABS(B*X-C))
- 270 DEF FNY(A,B,C,X,Y)=A-X
- 280 ' タイマ割込み処理の定義
- 290 INTERVAL 1:ON INTERVAL GOSUB *時計:INTERVAL OFF
- 300 ' 異常処理定義
- 310 ON ERROR GOTO *異常
- 320 ' 音楽設定
- 330 BGM 1:PLAY "%C@63T280V15"
- 340 ' 32K色モード
- 350 SC=1:S=1:SW=0:SCREEN@ 1
- 360 WINDOW (0,0)-(319,239)
- 370 VIEW (0,0)-(319,239)
- 380 ' 題名表示
- 390 INTERVAL ON:COLOR 6,0,0,4:CLS
- 400 P=3.14159!/180:A=89:B=91:WINDOW (-1.6!,-1.2!)-(1.59!,1.19!)
- 410 X=SIN(P*T*A):Y=COS(P*T*B):LINE(X,Y)-(X,Y),PSET,0
- 420 T=T+1:IF T>360 THEN T=1
- 430 X=SIN(P*T*A):Y=COS(P*T*B):IF T=1 THEN LINE-(X,Y),PSET,0
- 440 LINE-(X,Y),PASTEL,GCOL,B
- 450 MO=MOUSE (2,1):IF MO=0 GOTO 420 ELSE CLS:MOUSE 1,,,0
- 460 COLOR 6,3,0,4:INTERVAL OFF:GOTO *MAIN7
- 470 '
- 480 *時計 ' タイマ割込み処理
- 490 INTERVAL OFF
- 500 COLOR COL:IF COL=2 THEN COL=10 ELSE COL=2
- 510 GCOL=GCOL+1:IF GCOL=8 THEN GOSUB *消去:GCOL=0:A=A+1:B=B+1
- 520 LOCATE 1,1:PRINT "Pattern=";A
- 530 LOCATE 15,12
- 540 PRINT"HOPALONGによるカオスを計算表示します。"
- 550 LOCATE 15,14
- 560 PRINT"マウスの右ボタンを押すとメニューを表示します。"
- 570 INTERVAL ON
- 580 RETURN
- 590 '
- 600 *消去
- 610 FOR T=1 TO 720
- 620 X=SIN(P*T*A):Y=COS(P*T*B):LINE-(X,Y),PSET,0
- 630 NEXT:CLS 5
- 640 RETURN
- 650 '
- 660 *END ' 終了します。
- 670 LOCATE 0,1:PRINT"Y: 終了?"
- 680 GOSUB *座標:IF D$<>"Y:" GOTO 2450
- 690 WINDOW (0,0)-(319,239)
- 700 VIEW (0,0)-(319,239)
- 710 MOUSE 5:CLS 4:END
- 720 '
- 730 *音楽 ' フラクタル音楽のつもり。
- 740 IF SEL=0 THEN SEL=1 ELSE IF SEL=1 THEN SEL=2 ELSE SEL=0
- 750 ON SEL GOTO 770,780
- 760 PLAY "%L":GOTO 790
- 770 PLAY "%C":GOTO 790
- 780 PLAY "%R":GOTO 790
- 790 DS=T MOD 8:ON DS GOTO 810,820,830,840,850,860,870
- 800 PLAY "C":RETURN
- 810 PLAY "D":RETURN
- 820 PLAY "E":RETURN
- 830 PLAY "F":RETURN
- 840 PLAY "G":RETURN
- 850 PLAY "A":RETURN
- 860 PLAY "B":RETURN
- 870 PLAY ">C<":RETURN
- 880 '
- 890 *VIDEO ' 表示中の絵を録画します。
- 900 IF SC=0 THEN RETURN ELSE SIMPOSE ON 0:MOUSE 1,,,0
- 910 MO=MOUSE (2,0):IF MO=0 GOTO 910 ELSE SIMPOSE OFF:RETURN
- 920 '
- 930 *初期化
- 940 LOCATE 0,1:PRINT"Y:初期化。"
- 950 PRINT"H:SPOT表示。"
- 960 PRINT"L:ロード。":GOSUB *座標
- 970 IF D$="H:" THEN MOUSE 1,,,0:CLS 4:GOTO *動かす
- 980 IF D$="L:" THEN GOSUB *書庫:MOUSE 1,,,0:CLS 4:GOTO *動かす
- 990 IF D$="Y:" THEN MOUSE 1,,,0:CLS:RETURN *MAIN7 ELSE GOTO 2460
- 1000 '
- 1010 *書庫 ' 保存値設定
- 1020 ON SC GOTO 1050
- 1030 OPEN"I",#1,"\FILE\FR16.DOC"
- 1040 LOAD@ "\FILE\FRA16.TIF":GOTO 1070
- 1050 OPEN"I",#1,"\FILE\FR32.DOC"
- 1060 LOAD@ "\FILE\FRA32.TIF"
- 1070 INPUT#1,R,TM,ZX0,ZY0,DD,MD,AR,AI,XL,XU,YL,YU
- 1080 CLOSE#1:RETURN
- 1090 '
- 1100 *座標 ' 文字読み込み
- 1110 MO=MOUSE (2,0):IF MO<>0 GOTO 1110
- 1120 IF SC=0 THEN S=2 ELSE S=1
- 1130 MOX=MOUSE (0) ' X 座標
- 1140 MOY=MOUSE (1) ' Y 座標
- 1150 MDX=(XU-XL)/(270*S):MDY=(YU-YL)/(220*S)
- 1160 XS=XL+MDX*(MOX-40*S):LOCATE 30,0:PRINT"I=";XS;" "
- 1170 YS=YL+MDY*(MOY-10*S):LOCATE 50,0:PRINT"J=";YS;" "
- 1180 LOCATE 70,0:PRINT"C=";C;" "
- 1190 D$=CHR$(SCREEN (MOX/(4*S),MOY/(10*S)))
- 1200 D$=D$+CHR$(SCREEN (1+MOX/(4*S),MOY/(10*S)))
- 1210 LOCATE 0,0:PRINT"選択=>";D$;" 左ボタンを押す。 "
- 1220 MO=MOUSE (2,0):IF MO=0 GOTO 1130
- 1230 MO=MOUSE (2,0):IF MO<>0 GOTO 1230
- 1240 CLS 4:RETURN
- 1250 '
- 1260 *窓変更 ' 図形拡大
- 1270 CLS 4
- 1280 LOCATE 30,1:PRINT"左上の座標で左ボタンを押す。"
- 1290 GOSUB *座標:MOXL=MOX:MOYL=MOY
- 1300 LOCATE 30,1:PRINT"右下の座標で左ボタンを押す。"
- 1310 GOSUB *座標:MOXU=MOX:MOYU=MOY
- 1320 MDX=(XU-XL)/(270*S):MDY=(YU-YL)/(220*S)
- 1330 XLL=XL+MDX*(MOXL-40*S)
- 1340 YLL=YL+MDY*(MOYL-10*S)
- 1350 XUU=XL+MDX*(MOXU-40*S)
- 1360 YUU=YL+MDY*(MOYU-10*S)
- 1370 XL=XLL:YL=YLL:XU=XUU:YU=YUU
- 1380 RETURN
- 1390 '
- 1400 *窓 ' Attractors set
- 1410 WINDOW (XL,YL)-(XU,YU):VIEW (0,190*S)-(39*S,229*S)
- 1420 PSET (I,J),T MOD 8
- 1430 WINDOW (-R,-R)-(R,R):VIEW (40*S,10*S)-(309*S,229*S)
- 1440 LOCATE 30,0:PRINT"I=";I;" "
- 1450 LOCATE 50,0:PRINT"J=";J;" "
- 1460 LOCATE 70,0:PRINT"C=";C;" "
- 1470 RETURN
- 1480 '
- 1490 *白窓 ' reset
- 1500 WINDOW (XL,YL)-(XU,YU):VIEW (0,190*S)-(39*S,229*S)
- 1510 LINE (XL,YL)-(XU,YU),PSET,1,BF
- 1520 WINDOW (-R,-R)-(R,R):VIEW (40*S,10*S)-(309*S,229*S)
- 1530 RETURN
- 1540 '
- 1550 *保存 ' .TIF形式で保存。
- 1560 ON SC GOTO 1610
- 1570 KILL "\FILE\FRA16.TIF":KILL "\FILE\FR16.BAS":KILL "\FILE\FR16.DOC"
- 1580 SAVE@ "\FILE\FRA16.TIF",(0,0)-(639,479)
- 1590 OPEN"A",#1,"\FILE\FR16.BAS":OPEN"A",#2,"\FILE\FR16.DOC"
- 1600 GOTO 1640
- 1610 KILL "\FILE\FRA32.TIF":KILL "\FILE\FR32.BAS":KILL "\FILE\FR32.DOC"
- 1620 SAVE@ "\FILE\FRA32.TIF",(0,0)-(319,239)
- 1630 OPEN"A",#1,"\FILE\FR32.BAS":OPEN"A",#2,"\FILE\FR32.DOC"
- 1640 PRINT#1,10;"R";R;"TM";TM;"ZX0";ZX0;"ZY0";ZY0;
- 1650 PRINT#1,"DD";DD;"MD";MD;"AR";AR;"AI";AI
- 1660 PRINT#1,20;"XL";XL;"XU";XU;"YL";YL;"YU";YU
- 1670 WRITE#2,R;TM;ZX0;ZY0;DD;MD;AR;AI;XL;XU;YL;YU
- 1680 CLOSE#1,#2
- 1690 RETURN
- 1700 '
- 1710 *異常 ' 異常処理。
- 1720 OPEN"A",#1,"\FILE\ERROR.BAS":BEEP
- 1730 PRINT#1,ERL,"Error number=";ERR,"Error line=";ERL
- 1740 CLOSE#1:BEEP
- 1750 RESUME NEXT
- 1760 '
- 1770 *MAIN7
- 1780 '
- 1790 ' % % % % % Hopalong map % % % % %
- 1800 '
- 1810 ' パラメータ初期値
- 1820 CLS:R=80:TM=1024:DD=2:MD=0:AR=10:AI=2:ZX0=0:ZY0=0:C=20
- 1830 XL=-20:XU=20:YL=-20:YU=20:MOUSE (5) ON
- 1840 ' 枠作り
- 1850 ' 複素数平面サイズ Xmin(XL),Ymin(YL),Xmax(XU),Ymax(YU)
- 1860 WINDOW (XL,YL)-(XU,YU)
- 1870 ' 表示画面サイズ Xmin(40),Ymin(10),Xmax(309),Ymax(229)
- 1880 VIEW (40*S,10*S)-(309*S,229*S)
- 1890 GOSUB *白窓:LINE (-R,-R)-(R,R),PSET,0,BF
- 1900 DX=DD*(XU-XL)/(40*S):DY=DD*(YU-YL)/(40*S)
- 1910 '
- 1920 FOR J=YL TO YU STEP DY
- 1930 FOR I=XL TO XU STEP DX
- 1940 T=0
- 1950 IF MD=0 THEN A=I:B=J:X0=ZX0:Y0=ZY0 ELSE A=AR:B=AI:X0=I:Y0=J
- 1960 IF X0<0 THEN X=FNX1(A,B,C,X0,Y0) ELSE X=FNX0(A,B,C,X0,Y0)
- 1970 Y=FNY(A,B,C,X0,Y0)
- 1980 X0=X:Y0=Y
- 1990 PSET (X,Y),7-T/10 MOD 7
- 2000 IF ABS(X)+ABS(Y)>R*2 GOTO 2020
- 2010 T=T+1:IF T<TM GOTO 1960
- 2020 GOSUB *窓:IF SW=1 THEN GOSUB *音楽
- 2030 LINE (-R,-R)-(R,R),PSET,0,BF
- 2040 NEXT I,J:BEEP:GOTO 1920
- 2050 '
- 2060 *右放す:' マウス割り込み処理
- 2070 MOUSE 1,,,1
- 2080 CLS 4:LOCATE 0,1
- 2090 IF MD=0 THEN PRINT"1:初期ZX=";ZX0 ELSE PRINT"1:定数A=";AR
- 2100 IF MD=0 THEN PRINT"2:初期ZY=";ZY0 ELSE PRINT"2:定数B=";AI
- 2110 PRINT"3:定数C=";C
- 2120 PRINT"4:境界R=";R
- 2130 PRINT"5:繰返数TM=";TM
- 2140 PRINT"C:画面消去"
- 2150 PRINT"D:密度DD=";DD
- 2160 PRINT"E:終了"
- 2170 PRINT"I:初期化"
- 2180 IF MD=0 THEN PRINT"M:C平面" ELSE PRINT"M:Z平面"
- 2190 PRINT"N:音楽";SW
- 2200 PRINT"R:メニュー消去"
- 2210 PRINT"S:画面モード";SC
- 2220 PRINT"T:保存"
- 2230 PRINT"V:録画:マウス左で戻る"
- 2240 WINDOW (XL,YL)-(XU,YU)
- 2250 PRINT"W:拡大"
- 2260 PRINT"☆XL=";WINDOW(0)
- 2270 PRINT"☆YL=";WINDOW(1)
- 2280 PRINT"☆XU=";WINDOW(2)
- 2290 PRINT"☆YU=";WINDOW(3)
- 2300 WINDOW (-R,-R)-(R,R)
- 2310 GOSUB *座標
- 2320 LOCATE 30,0
- 2330 IF D$="1:" THEN IF MD=0 THEN INPUT"実部初期値ZX";ZX0
- 2340 IF D$="1:" THEN IF MD=1 THEN INPUT"定数A";AR
- 2350 IF D$="2:" THEN IF MD=0 THEN INPUT"虚部初期値ZY";ZY0
- 2360 IF D$="2:" THEN IF MD=1 THEN INPUT"定数B";AI
- 2370 IF D$="3:" THEN INPUT"定数C";C
- 2380 IF D$="4:" THEN INPUT"吸引境界値R";R:MOUSE 1,,,0
- 2390 IF D$="4:" THEN WINDOW (-R,-R)-(R,R):CLS 4:RETURN
- 2400 IF D$="5:" THEN INPUT"繰返し数TM";TM
- 2410 IF D$="C:" THEN CLS:MOUSE 1,,,0:RETURN 1890
- 2420 IF D$="D:" THEN IF DD=2 THEN DD=1 ELSE DD=2
- 2430 IF D$="D:" THEN MOUSE 1,,,0:CLS 4:RETURN 1900
- 2440 IF D$="E:" GOTO *END
- 2450 IF D$="I:" GOTO *初期化
- 2460 IF D$="M:" THEN IF MD=0 THEN MD=1 ELSE MD=0
- 2470 IF D$="M:" THEN MOUSE 1,,,0:CLS 4:RETURN 1920
- 2480 IF D$="N:" THEN IF SW=1 THEN SW=0 ELSE SW=1
- 2490 IF D$="R:" THEN CLS 4:MOUSE 1,,,0:RETURN
- 2500 IF D$="S:" THEN IF SC=0 THEN SC=1 ELSE SC=0
- 2510 IF D$="S:" THEN IF SC=0 THEN S=2:SCREEN@ 0 ELSE S=1:SCREEN@ 1
- 2520 IF D$="S:" THEN MOUSE 1,,,0:RETURN 1860
- 2530 IF D$="T:" THEN GOSUB *保存
- 2540 IF D$="V:" THEN GOSUB *VIDEO:MOUSE 1,,,1
- 2550 IF D$="W:" THEN GOSUB *窓変更:D$="":MOUSE 1,,,0:CLS 4:RETURN 1860
- 2560 GOTO 2080
- 2570 '
- 2580 ' 一点処理
- 2590 *動かす
- 2600 CLS 4:MOUSE (1) OFF:MOUSE 1,,,1
- 2610 LINE (-R,-R)-(R,R),PSET,0,BF
- 2620 MO=MOUSE (2,0):IF MO<>0 GOTO 2620
- 2630 LOCATE 0,1:INPUT"定数C";C
- 2640 INPUT"繰返T";TMS:CLS 4
- 2650 GOSUB *座標:MOUSE 1,,,0:MOUSE (5) OFF:MOUSE (1) ON
- 2660 T=0:GOSUB *白窓
- 2670 IF MD=0 THEN A=XS:B=YS:X0=ZX0:Y0=ZY0 ELSE A=AR:B=AI:X0=XS:Y0=YS
- 2680 IF X0<0 THEN X=FNX1(A,B,C,X0,Y0) ELSE X=FNX0(A,B,C,X0,Y0)
- 2690 Y=FNY(A,B,C,X0,Y0)
- 2700 X0=X:Y0=Y
- 2710 PSET (X,Y),7-T/10 MOD 7
- 2720 IF ABS(X)+ABS(Y)>R*2 GOTO 2740
- 2730 T=T+1:IF T<TMS GOTO 2680
- 2740 I=XS:J=YS:T=2:GOSUB *窓:IF SW=1 THEN GOSUB *音楽
- 2750 MOUSE 1,,,1:MOUSE (1) OFF
- 2760 LOCATE 0,1:PRINT"Y:メニューに戻る?":GOSUB *座標
- 2770 IF D$="Y:" THEN MOUSE (5) ON:GOTO *右放す
- 2780 GOTO *動かす
-