10 MODE129 20 INPUT"PICTURE NUMBER";P 25 INPUT"HEIGHT EXAGGERATION % +/-";HE 26 CP=(100+HE)/100 30 R=RND(-P) 40 INPUT"WATER HIGHT , % (RETURN FOR AVERAGE HIGHT)";PRR 44 PRR=PRR/100 45 PER=TRUE 50 IF PRR=0 PER=FALSE 60 INPUT"NUMBER OF BLOCKS ALONG EACH SIDE ";C 70 GY=640/(C-1):GX=200/(C-1) 80 E$="M*X+CC-Y" 81 CLS 90 DIMCO%(C*C),BLUE%(6),COLS%(9):PROCSETUP 100 FOR N=1TOC*C:CO%(N)=50:NEXT 110 VDU19,2,2,0,0,0 120 VDU19,1,4,0,0,0 130 PROCFAULT 140 DEFPROCSCREENUP 150 LO=100000:HI=-1000000:TT=0 160 LO2=10000 170 CLS 180 FORG=1TOC*C 190 IF CO%(G)HI HI=AF 250 TT=TT+AF 260 NEXT, 270 AVER=TT/(C*C) 280 IF PER AVER=LO+PRR*(HI-LO) 290 INC=(HI-AVER)/10 300 WINC=(AVER-LO)/6 310 IF INC<1 INC=1 320 IF WINC<0 WINC=1 330 FOR G=1TO(C-1)^2 340 PROCLOCATE2(G) 350 A=ROW 360 B=SP 370 X=(GX*C*2)-(GX*B)-(GX*A) 380 Y=640+(GY*B)-(GY*A) 390 AV=(CO%(UP)+CO%(RI)+CO%(LE)+CO%(DO))/4 400 PAT=(INT(((AV-AVER)/INC)))-1:IF PAT<0 PAT=0 410 VDU23,12:FOR TH=1TO8:VDU(COLS%(PAT) AND 3*(4^(TH-1)))/(4^(TH-1)) 420 NEXT 430 PROCWC 440 NEXT:PROCFINOFF 450 G$=GET$:IF G$="D":*GDUMP 460 END 470 DEFPROCTRI1 480 GCOL16,0:MOVEY,X+CO%(UP):DRAW Y+GY,X-GX+CO%(RI):PLOT 85,Y-GY,X-GX+CO%(LE) 490 ENDPROC 500 DEFPROCTRI2 510 GCOL 16,0:MOVE Y,X-GX-GX+CO%(DO):DRAW Y+GY,X-GX+CO%(RI):PLOT 85,Y-GY,X-GX+CO%(LE) 520 ENDPROC 530 DEFPROCSETUP 540 FOR N=1TO10:FOR M=1TO8 550 READ A:COLS%(N-1)=COLS%(N-1)+A*(4^(M-1)) 560 NEXT, 570 FOR N=1TO 7:FOR M=1TO8 580 READ A:BLUE%(N-1)=BLUE%(N-1)+A*(4^(M-1)) 590 NEXT, 600 ENDPROC 610 DATA 0,2,2,0,0,2,2,0 620 DATA 2,2,2,0,2,2,2,0 630 DATA 2,2,2,0,2,2,2,0 640 DATA 2,2,2,2,2,2,2,2 650 DATA 2,2,2,2,2,2,2,2 660 DATA 2,2,2,3,2,2,2,3 670 DATA 2,2,2,3,2,2,2,3 680 DATA 2,3,3,2,2,3,3,2 690 DATA 2,3,3,3,2,3,3,3 700 DATA 3,3,3,3,3,3,3,3 710 DATA 1,0,0,1,1,0,0,1 720 DATA 1,1,1,0,1,1,1,0 730 DATA 1,1,1,1,1,1,1,1 740 DATA 1,1,1,1,1,1,1,1 750 DATA 1,1,1,1,1,1,1,1 760 DATA 1,1,1,3,1,1,1,3 770 DATA 3,1,1,3,3,1,1,3 780 ENDPROC 790 DEFPROCFAULT 800 INPUT"NO. OF FAULTS";FAL 810 TIME=0 820 FOR D=1TOFAL 830 PRINTTAB(1,1);" FAULTS=";D;" " 840 IF D=2 PRINTTAB(1,3);"PREDICTED TIME NEEDED=";INT(FAL*TIME/100);" SECONDS" 850 IF D>1 PRINTTAB(1,4);"TIME TAKEN=";INT(TIME/100) 860 CHANGE=(RND(60*CP)-CP*.5) 870 R=RND(2) 880 IF R=2 GOTO 1050 890 X1=RND(C):Y1=1 900 X2=RND(C):Y2=C 910 IF (Y2-Y1)=0 M=1000000:GOTO 930 920 M=(X2-X1)/(Y2-Y1) 930 CC=(Y2-(M*X2)) 940 R=RND(6) 950 ON R GOTO 960,1050,1080,1110,1140,1170 960 FOR X=1TOC:FOR Y=1TOC 970 IF EVAL(E$)>=0 CO%(X+((Y-1)*C))=CO%(X+((Y-1)*C))+CHANGE 980 NEXT, 990 NEXT 1000 ENDPROC 1010 FOR X=1TOC:FOR Y=1TOC 1020 IF 0>=EVAL(E$) CO%(X+((Y-1)*C))=CO%(X+((Y-1)*C))+CHANGE 1030 NEXT, 1040 GOTO 990 1050 Y1=RND(C):X1=1 1060 Y2=RND(C):X2=C 1070 GOTO 910 1080 Y1=RND(C):X1=1 1090 Y2=C:X1=RND(C) 1100 GOTO 910 1110 Y1=RND(C):X1=C 1120 Y2=C:X2=RND(C) 1130 GOTO 910 1140 Y1=RND(C):X1=C 1150 Y2=1:X2=RND(C) 1160 GOTO 910 1170 Y1=RND(C):X1=1 1180 Y2=1:X2=RND(C) 1190 GOTO 910 1200 DEFPROCFIND(Z1,X1,Y1,Z2,X2,Y2) 1210 IF X1-X2=0 M=100000:GOTO 1230 1220 M=(Z1-Z2)/(X1-X2) 1230 CC=Z1-(M*X1) 1240 IF M=0 X0=X1 : GOTO 1270 1250 X0=(-CC+AVER)/M 1260 IF Y1-Y2=0 M=100000 : GOTO 1280 1270 M=(Z1-Z2)/(Y1-Y2) 1280 CC=Z1-(M*Y1) 1290 IF M=0 Y0=Y1 : ENDPROC 1300 Y0=(-CC+AVER)/M 1310 ENDPROC 1320 DEFPROCWC 1330 WACOL=INT((AV-LO)/WINC) 1340 IF WACOL>6 WACOL=6 1350 VDU 23,13:FOR EW=1TO8:VDU ((BLUE%(WACOL) AND 3*(4^(EW-1)))/(4^(EW-1))):NEXT 1360 PROCWATERF 1370 IF L<>0 AND L<>7 GCOL 0,3:MOVE Y3,X3:DRAW Y0,X0 1380 PROCWATERS 1390 IF L<>0 AND L<>7 GCOL 0,3:MOVE Y3,X3:DRAW Y0,X0 1400 ENDPROC 1410 DEFPROCWATERF 1420 L=-((CO%(UP)