10 REM ************** 20 REM Bouncing Balls 30 REM By Tim Surtell 40 REM ************** 50 REM NC200 Version 1 60 REM *THIS PROGRAM IS UNFINISHED AND MAY HAVE ERRORS IN IT* 70 REM Downloaded from Tim's NC Users' Site 80 REM http://www.ncus.org.uk 90 PROCSETUP 100 VDU29,0;0;:MOVE0,0:DRAW479,0:DRAW479,127:DRAW0,127:DRAW0,0:MOVE19,19:PLOT101,460,108:MOVE22,22:PLOT103,457,105:MOVE20,20:PLOT22,20,107:PLOT22,459,107:PLOT22,459,20:PLOT22,20,20 110 PRINTTAB(26,3)"B o u n c i n g B a l l s"TAB(26,4)"---------------------------" 120 PRINTTAB(10,7)"* Press P to play the game"TAB(10,9)"* Press D to design a screen" 130 X=1:Y=11:V=2:H=2 140 MOVEX+1,Y+1:PLOT101,X+4,Y+4:PLOT69,X+2,Y:PLOT69,X+3,Y:PLOT69,X+2,Y+5:PLOT69,X+3,Y+5:PLOT69,X,Y+2:PLOT69,X,Y+3:PLOT69,X+5,Y+2:PLOT69,X+5,Y+3:FORI=1 TO100:NEXT:MOVEX,Y:PLOT103,X+5,Y+5 150 X=X+H:Y=Y+V 160 IF POINT(X+2,Y-1)=1 OR POINT(X+2,Y+6)=1 V=-V 170 IF POINT(X-1,Y+2)=1 OR POINT(X+6,Y+2)=1 H=-H 180 G$=INKEY$(1) 190 IF G$="P" PROCSELECT:CLS:GOTO100 200 IF G$="D" PROCDESIGN:CLS:GOTO100 210 GOTO140 220 END 230 DEF PROCPLAY 240 V=10:H=10:X=11:Y=RND(10)*10+1:XX=215:B=FALSE:BY=11 250 MOVEXX,0:PLOT101,XX+50,10 260 TIME=0 270 X=X+H 280 Y=Y+V 290 MOVEX+1,Y+1:PLOT102,X+4,Y+4:PLOT70,X+2,Y:PLOT70,X+3,Y:PLOT70,X+2,Y+5:PLOT70,X+3,Y+5:PLOT70,X,Y+2:PLOT70,X,Y+3:PLOT70,X+5,Y+2:PLOT70,X+5,Y+3 300 IF POINT(X+2,Y-1)=1 OR POINT(X+2,Y+6)=1 V=-V 310 IF POINT(X-1,Y+2)=1 OR POINT(X+6,Y+2)=1 H=-H 320 PRINTTAB(71,1);TIME DIV100;" ";HI(S) 330 IF Y<0 OR (POINT(X-1,Y+2)=1 AND POINT(X+6,Y+2)=1 AND POINT(X+2,Y-1)=1 AND POINT(X+2,Y+6)=1) T=TIME DIV 100:ENDPROC 340 G=INKEY(1):FORI=1 TO 10:NEXT 350 IF G=81 T=TIME DIV 100:ENDPROC 360 IF D=TRUE AND XXX G=243 380 MOVEX+1,Y+1:PLOT102,X+4,Y+4:PLOT70,X+2,Y:PLOT70,X+3,Y:PLOT70,X+2,Y+5:PLOT70,X+3,Y+5:PLOT70,X,Y+2:PLOT70,X,Y+3:PLOT70,X+5,Y+2:PLOT70,X+5,Y+3 390 IF G=242 AND XX>0 MOVEXX,0:PLOT103,XX+50,10:MOVE477,0:DRAW477,10:XX=XX-25:MOVEXX,0:PLOT101,XX+50,10 400 IF G=243 AND XX<430 MOVEXX,0:PLOT103,XX+50,10:MOVE0,0:DRAW0,10:XX=XX+25:MOVEXX,0:PLOT101,XX+50,10 410 GOTO270 420 DEF PROCDRAWSCREEN 430 MOVE0,0:PLOT101,479,127:CLS:VDU29,1;0; 440 MOVE0,0:DRAW0,127:DRAW477,127:DRAW477,0 450 MOVE417,107:PLOT101,477,110:MOVE417,107:PLOT101,420,127 460 FORI=1 TO NW(S) 470 MOVEWBX1(S,I),WBY1(S,I):DRAWWBX1(S,I),WBY2(S,I):DRAWWBX2(S,I),WBY2(S,I):DRAWWBX2(S,I),WBY1(S,I):DRAWWBX1(S,I),WBY1(S,I) 480 NEXT 490 FORI=1 TO NB(S) 500 MOVEBBX1(S,I),BBY1(S,I):PLOT101,BBX2(S,I),BBY2(S,I) 510 NEXT 520 ENDPROC 530 ENDPROC 540 DEF PROCSETUP 550 CLS:MOVE160,45:PLOT101,320,85:MOVE163,48:PLOT103,317,82:MOVE161,46:PLOT22,161,84:PLOT22,319,84:PLOT22,319,46:PLOT22,161,46:PRINTTAB(32,6)"--Please wait--"TAB(31,8)"---Loading game---" 560 D=FALSE 570 DIMNB(20),NW(20),WBX1(20,20),WBY1(20,20),WBX2(20,20),WBY2(20,20),BBX1(20,20),BBY1(20,20),BBX2(20,20),BBY2(20,20),HI(20),HIN$(20) 580 K=OPENIN("BALLDES") 590 INPUT#K,NUM 600 IF NUM=0 CLOSE#K:ENDPROC 610 FORI=1 TO NUM 620 INPUT#K,HI(I),HIN$(I),NW(I),NB(I) 630 IF NW(I)=0 GOTO670 640 FORA=1 TO NW(I) 650 INPUT#K,WBX1(I,A),WBY1(I,A),WBX2(I,A),WBY2(I,A) 660 NEXT 670 IF NB(I)=0 GOTO710 680 FORA=1 TO NB(I) 690 INPUT#K,BBX1(I,A),BBY1(I,A),BBX2(I,A),BBY2(I,A) 700 NEXT 710 NEXT 720 CLOSE#K 730 ENDPROC 740 DEF PROCSELECT 750 MOVE0,0:DRAW479,0:DRAW479,127:DRAW0,127:DRAW0,0:MOVE19,19:PLOT101,460,108:MOVE22,22:PLOT103,457,105:MOVE20,20:PLOT22,20,107:PLOT22,459,107:PLOT22,459,20:PLOT22,20,20 760 PRINTTAB(33,3)"Play the game"TAB(33,4)"-------------" 770 REPEAT:PRINTTAB(5,7)SPC40:INPUTTAB(5,7)"Which screen do you want to play ? "S:UNTILS0 780 PROCDRAWSCREEN:PROCPLAY 790 MOVE100,30:PLOT101,380,100:MOVE103,33:PLOT103,377,97:MOVE101,31:PLOT22,101,99:PLOT22,379,99:PLOT22,379,31:PLOT22,101,31 800 PRINTTAB(18,5)"You kept the ball up for ";T;" second";:IF T=1 PRINT;"." ELSE PRINT"s." 810 IF T"D" GOTO780 830 D=FALSE 840 IF T>HI(S) HI(S)=T:PRINTTAB(18,7)"This is the highest time recorded so far!":INPUTLINETAB(18,8);"Type in your name : "HIN$(S):PROCSAVE 850 PRINTTAB(18,10)"Press any key to play again, or M for menu...":FORI=1 TO 10:G=INKEY(1):NEXT:G=GET 860 IF G=68 D=TRUE 870 IF G<>77 GOTO780 880 ENDPROC 890 DEF PROCDESIGN 900 MOVE0,0:DRAW479,0:DRAW479,127:DRAW0,127:DRAW0,0:MOVE19,19:PLOT101,460,108:MOVE22,22:PLOT103,457,105:MOVE20,20:PLOT22,20,107:PLOT22,459,107:PLOT22,459,20:PLOT22,20,20 910 PRINTTAB(33,3)"Design screen"TAB(33,4)"-------------" 920 REPEAT:PRINTTAB(5,7)SPC40:INPUTTAB(5,7)"Which screen do you want to design ? "S:UNTILS0 930 IF S=NUM+1 NUM=NUM+1 940 PROCDRAWSCREEN 950 MOVE1,0:PLOT101,477,10:VDU14 960 X1=247:Y1=57:PRINTTAB(2,15)"Press W for a whirl box, B for a bounce bar, or ENTER to finish...";:G$=GET$ 970 IF G$="W" AND NW(S)<20 PROCWHIRL:GOTO960 980 IF G$="B" AND NB(S)<20 PROCBOUNCE:GOTO960 990 IF G$=CHR$13 VDU15:PROCSAVE:ENDPROC 1000 GOTO960 1010 DEF PROCWHIRL 1020 X1=X1+1:X2=X2-1 1030 PRINTTAB(2,15)"Use cursor keys to move, press SPACE to select, ENTER to abandon..."; 1040 MOVEX1,Y1-2:PLOT6,X1,Y1+2:MOVEX1-2,Y1:PLOT6,X1+2,Y1:G=GET:MOVEX1,Y1-2:PLOT6,X1,Y1+2:MOVEX1-2,Y1:PLOT6,X1+2,Y1 1050 IF G=242 AND X1>10 X1=X1-10 1060 IF G=243 AND X1<467 X1=X1+10 1070 IF G=240 AND Y1<117 Y1=Y1+10 1080 IF G=241 AND Y1>20 Y1=Y1-10 1090 IF G=13 ENDPROC 1100 IF G=32 NW(S)=NW(S)+1:WBX1(S,NW(S))=X1:WBY1(S,NW(S))=Y1:X2=X1+1:Y2=Y1+3:GOTO1120 1110 GOTO1040 1120 MOVEX1,Y1:PLOT6,X1,Y2:PLOT6,X2,Y2:PLOT6,X2,Y1:PLOT6,X1,Y1:G=GET:MOVEX1,Y1:PLOT6,X1,Y2:PLOT6,X2,Y2:PLOT6,X2,Y1:PLOT6,X1,Y1 1130 IF G=242 AND X2>7 AND X2>X1+3 X2=X2-10 1140 IF G=243 AND X2<467 X2=X2+10 1150 IF G=240 AND Y2<120 Y2=Y2+10 1160 IF G=241 AND Y2>20 AND Y2>Y1+3 Y2=Y2-10 1170 IF G=13 NW(S)=NW(S)-1:ENDPROC 1180 IF G=32 WBX2(S,NW(S))=X2:WBY2(S,NW(S))=Y2:MOVEX1,Y1:DRAWX1,Y2:DRAWX2,Y2:DRAWX2,Y1:DRAWX1,Y1:ENDPROC 1190 GOTO1120 1200 DEF PROCBOUNCE 1210 PRINTTAB(2,15)"Use cursor keys to move, press SPACE to select, ENTER to abandon..."; 1220 MOVEX1,Y1-2:PLOT6,X1,Y1+2:MOVEX1-2,Y1:PLOT6,X1+2,Y1:G=GET:MOVEX1,Y1-2:PLOT6,X1,Y1+2:MOVEX1-2,Y1:PLOT6,X1+2,Y1 1230 IF G=242 AND X1>10 X1=X1-10 1240 IF G=243 AND X1<467 X1=X1+10 1250 IF G=240 AND Y1<117 Y1=Y1+10 1260 IF G=241 AND Y1>20 Y1=Y1-10 1270 IF G=13 ENDPROC 1280 IF G=32 NB(S)=NB(S)+1:BBX1(S,NB(S))=X1:BBY1(S,NB(S))=Y1:X2=X1+3:Y2=Y1+3:GOTO1300 1290 GOTO1220 1300 MOVEX1,Y1:PLOT102,X2,Y2:G=GET:MOVEX1,Y1:PLOT102,X2,Y2 1310 IF G=242 AND X2>7 AND X2>X1+3 X2=X2-10 1320 IF G=243 AND X2<467 AND Y2=Y1+3 X2=X2+10 1330 IF G=240 AND Y2<120 AND X2=X1+3 Y2=Y2+10 1340 IF G=241 AND Y2>20 AND Y2>Y1+3 Y2=Y2-10 1350 IF G=13 NB(S)=NB(S)-1:ENDPROC 1360 IF G=32 BBX2(S,NB(S))=X2:BBY2(S,NB(S))=Y2:MOVEX1,Y1:PLOT101,X2,Y2:ENDPROC 1370 GOTO1300 1380 DEF PROCSAVE 1390 K=OPENOUT("BALLDES") 1400 PRINT#K,NUM 1410 FORI=1 TO NUM 1420 PRINT#K,HI(I),HIN$(I),NW(I),NB(I) 1430 IF NW(I)=0 GOTO1470 1440 FORA=1 TO NW(I) 1450 PRINT#K,WBX1(I,A)+1,WBY1(I,A),WBX2(I,A)-1,WBY2(I,A) 1460 NEXT 1470 IF NB(I)=0 GOTO1510 1480 FORA=1 TO NB(I) 1490 PRINT#K,BBX1(I,A),BBY1(I,A),BBX2(I,A),BBY2(I,A) 1500 NEXT 1510 NEXT 1520 CLOSE#0 1530 ENDPROC