home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 1
/
FREEWARE.BIN
/
basic
/
fractal
/
frademo4.bas
< prev
next >
Wrap
BASIC Source File
|
1989-10-17
|
6KB
|
159 lines
100 '
110 ' F-BASIC386 SAMPLE PROGRAM % COPYRIGHT FUJITSU LIMITED 19890822
120 '
130 ' PUBLIC DOMAIN SOFTWARE by PRELUDE FMC(富士通マイコンクラブ)
140 '
150 ' ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
160 ' ★ ソフト名:フラクタル・デモ PART4 V3 ★
170 ' ★ 登録名 :FRADEMO4.BAS ★
180 ' ★ 登録者 :PRELUDE(佐々木裕一) ★
190 ' ★ 動作確認:FM-TOWNS F-BASIC386 ★
200 ' ★ 備考 :このプログラムはビデオカード対応です。 ★
210 ' ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
220 '
230 ' マウス割り込みルーチンの定義
240 CLEAR,,2048:MOUSE 0:MOUSE 4,0,0,319,239:MOUSE 1,,,0
250 ON MOUSE (5) GOSUB *マウス:MOUSE (5) OFF
260 ' 音楽設定
270 BGM 1:PART 0,0:PLAY "@3V15T280L4O5CDEFGABO6CCO5BAGFEDC"
280 ' 3万2千色モード
290 SCREEN@ 1:COLOR 6,0,0,4:CLS
300 ' 宣伝表示
310 LOCATE 0,10
320 WINDOW (0,0)-(319,239)
330 VIEW (0,0)-(319,239)
340 PRINT"..... The VP series expands the range of supercomputing applications."
350 PRINT" "
360 PRINT" Supercomputers ・・・・"
370 SYMBOL (0,50),"VP2000",3,7,2,0,PSET,3,0
380 PRINT" "
390 PRINT" "
400 PRINT" "
410 PRINT" マウスの右ボタンを押して下さい。"
420 PRINT" "
430 PRINT" ジュリア集合f(z)=a*z*(1-z)を計算表示します。"
440 PRINT" "
450 PRINT" マウスの右ボタンを押すとメニューを表示します。"
460 MO=MOUSE (2,1):IF MO=0 GOTO 460 ELSE CLS:MOUSE 1,,,0
470 MOUSE (5) ON:COLOR 6,2,0,4:GOTO *STEP1
480 '
490 ' 終了をします。
500 *END
510 WINDOW (0,0)-(319,239)
520 VIEW (0,0)-(319,239)
530 MOUSE 5:END
540 '
550 ' フラクタル音楽をします。
560 *MUS
570 DS=T MOD 8
580 IF DS=0 THEN PLAY "C" ELSE IF DS=1 THEN PLAY "D"
590 IF DS=2 THEN PLAY "E" ELSE IF DS=3 THEN PLAY "F"
600 IF DS=4 THEN PLAY "G" ELSE IF DS=5 THEN PLAY "A"
610 IF DS=6 THEN PLAY "B" ELSE IF DS=7 THEN PLAY ">C<"
620 PSET (I,J),T MOD 8
630 RETURN
640 '
650 ' 表示中の絵を録画します。
660 *VIDEO
670 SIMPOSE ON 0:MOUSE 1,,,0
680 MO=MOUSE (2,0):IF MO=0 GOTO 680 ELSE SIMPOSE OFF:RETURN
690 '
700 *STEP1:CLS
710 '
720 ' % % % % % Julia set of f(z)=a*z*(1-z) % % % % %
730 '
740 ' パラメータ初期値
750 AR=3.2!:AI=0:R=5:TM=32:DD=5
760 XL=-.4!:XU=1.4!:YL=-.6!:YU=.6!
770 ' 枠作り
780 ' 複素数平面サイズ Xmin(XL),Ymin(YL),Xmax(XU),Ymax(YU)
790 WINDOW (XL,YL)-(XU,YU)
800 ' 表示画面サイズ Xmin(40),Ymin(10),Xmax(309),Ymax(229)
810 VIEW (40,10)-(309,229)
820 LINE (XL,YL)-(XU,YU),PSET,0,BF
830 DX=DD*(XU-XL)/270:DY=DD*(YU-YL)/220
840 '
850 FOR I=XL TO XU STEP DX
860 FOR J=YL TO YU STEP DY
870 ZX=I:ZY=J:T=0
880 ZX2=ZX^2:ZY2=ZY^2
890 ZXN=ZX-ZX2+ZY2:ZYN=ZY-2*ZX*ZY
900 ZX=AR*ZXN-AI*ZYN:ZY=AR*ZYN+AI*ZXN
910 ZX2=ZX^2:ZY2=ZY^2:IF SW=0 ELSE GOSUB *JULIA
920 IF ZX2+ZY2>R GOTO 940
930 T=T+1:IF T<TM GOTO 890
940 IF SW=0 THEN PSET (I,J),T MOD 8 ELSE GOSUB *MUS:GOSUB *JURES
950 NEXT J,I:GOTO 850
960 '
970 *マウス:' マウス割り込み処理
980 MOUSE 1,,,1:GOSUB *JURES
990 CLS 4:LOCATE 0,1
1000 PRINT"1:実定数AR=";AR
1010 PRINT"2:虚定数AI=";AI
1020 PRINT"3:吸引境界値R=";R
1030 PRINT"4:繰返し数TM=";TM
1040 PRINT"C:画面消去"
1050 PRINT"D:密度DD=";DD
1060 PRINT"E:終了"
1070 PRINT"I:初期状態に戻す"
1080 PRINT"R:メニュー消去"
1090 PRINT"V:録画:マウス左で戻る"
1100 PRINT"W:拡大(左上隅XL)";WINDOW(0)
1110 PRINT" (左上隅YL)";WINDOW(1)
1120 PRINT" (右下隅XU)";WINDOW(2)
1130 PRINT" (右下隅YU)";WINDOW(3)
1140 GOSUB *SER
1150 LOCATE 0,16
1160 IF D$="1:" THEN INPUT"実定数AR";AR
1170 IF D$="2:" THEN INPUT"虚定数AI";AI
1180 IF D$="3:" THEN INPUT"吸引境界値R";R
1190 IF D$="4:" THEN INPUT"繰返し数TM";TM
1200 IF D$="C:" THEN CLS:MOUSE 1,,,0:RETURN 820
1210 IF D$="D:" THEN IF DD=1 THEN DD=5:MOUSE 1,,,0:CLS 4:RETURN 830 ELSE DD=1:MOUSE 1,,,0:CLS 4:RETURN 830
1220 IF D$="E:" THEN PRINT"終了? Y: ":GOSUB *SER:IF D$="Y:" GOTO *END
1230 IF D$="I:" THEN PRINT"初期値に戻します。Y: ":GOSUB *SER:IF D$="Y:" THEN MOUSE 1,,,0:CLS:RETURN *STEP1
1240 IF D$="R:" THEN CLS 4:MOUSE 1,,,0:RETURN 850
1250 IF D$="V:" THEN GOSUB *VIDEO:MOUSE 1,,,1
1260 IF D$="W:" THEN GOSUB *WIN:MOUSE 1,,,0:CLS 4:RETURN 790
1270 PRINT"左ボタンで、音を出すなら Y: を入れて下さい。":GOSUB *SER:IF D$="Y:" THEN SW=1 ELSE SW=0
1280 GOTO 990
1290 ' 文字読み込み
1300 *SER
1310 MO=MOUSE (2,0):IF MO<>0 GOTO 1310
1320 MOX=MOUSE (0):' X 座標
1330 MOY=MOUSE (1):' Y 座標
1340 D$=CHR$(SCREEN (MOX/4,MOY/10))+CHR$(SCREEN (1+MOX/4,MOY/10))
1350 LOCATE 0,15:PRINT"選択=>";D$;MOX;MOY;" 良ければマウスの左ボタンを押して下さい。 "
1360 MO=MOUSE (2,0):IF MO=0 GOTO 1320
1370 MO=MOUSE (2,0):IF MO<>0 GOTO 1370
1380 RETURN
1390 ' 図形拡大
1400 *WIN
1410 LOCATE 0,16:PRINT"左上の座標を選択し、マウスの左ボタンを押して下さい。"
1420 GOSUB *SER:XLL=MOX:YLL=MOY
1430 LOCATE 0,16:PRINT"右下の座標を選択し、マウスの左ボタンを押して下さい。"
1440 GOSUB *SER:XUU=MOX:YUU=MOY
1450 DX=(XU-XL)/270:DY=(YU-YL)/220
1460 XLLL=XL+DX*(XLL-40)
1470 YLLL=YL+DY*(YLL-10)
1480 XUUU=XL+DX*(XUU-40)
1490 YUUU=YL+DY*(YUU-10)
1500 XL=XLLL:YL=YLLL:XU=XUUU:YU=YUUU
1510 RETURN
1520 ' Julia set
1530 *JULIA
1540 WINDOW (-5,-5)-(5,5)
1550 VIEW (0,190)-(39,229)
1560 PSET (ZX,ZY),T MOD 8
1570 WINDOW (XL,YL)-(XU,YU)
1580 VIEW (40,10)-(309,229)
1590 RETURN
1600 ' Julia reset
1610 *JURES
1620 WINDOW (-5,-5)-(5,5)
1630 VIEW (0,190)-(39,229)
1640 LINE (-5,-5)-(5,5),PSET,7,BF
1650 WINDOW (XL,YL)-(XU,YU)
1660 VIEW (40,10)-(309,229)
1670 RETURN