mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2026-06-24 07:27:59 -07:00
d26dbf036a
Spaces tend to cause annoyances in a Unix-style shell environment. This change fixes that.
166 lines
4.5 KiB
QBasic
166 lines
4.5 KiB
QBasic
10 PRINT TAB(33);"SLALOM"
|
|
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
|
30 PRINT:PRINT:PRINT
|
|
310 PRINT "HOW MANY GATES DOES THIS COURSE HAVE (1 TO 25)";
|
|
320 INPUT V
|
|
330 IF V>25 THEN 360
|
|
340 IF V<1 THEN 390
|
|
350 GOTO 1440
|
|
360 PRINT "25 IS THE LIMIT."
|
|
370 LET V=25
|
|
380 GOTO 1440
|
|
390 PRINT "TRY AGAIN,"
|
|
400 GOTO 310
|
|
410 PRINT "RATE YOURSELF AS A SKIER, (1=WORST, 3=BEST)";
|
|
420 INPUT A
|
|
430 IF A<1 THEN 460
|
|
440 IF A>3 THEN 460
|
|
450 GOTO 480
|
|
460 PRINT "THE BOUNDS ARE 1-3"
|
|
470 GOTO 410
|
|
480 PRINT"THE STARTER COUNTS DOWN...5...4...3...2...1...GO!";
|
|
490 REM
|
|
500 LET T=0
|
|
510 LET S=INT(RND(1)*(18-9)+9)
|
|
520 PRINT
|
|
525 PRINT "YOU'RE OFF!"
|
|
530 FOR O=1 TO V
|
|
540 READ Q
|
|
550 PRINT
|
|
555 PRINT "HERE COMES GATE #";STR$(O);":"
|
|
560 PRINT S;"M.P.H."
|
|
570 LET S1=S
|
|
580 PRINT "OPTION";
|
|
590 INPUT O1
|
|
600 IF O1=0 THEN 970
|
|
610 IF O1>8 THEN 1420
|
|
620 IF O1<1 THEN 1420
|
|
630 GOSUB 990
|
|
640 IF S<7 THEN 1390
|
|
650 LET T=T+(Q-S+1)
|
|
660 IF S>Q THEN 1630
|
|
670 NEXT O
|
|
680 PRINT:PRINT "YOU TOOK";(T+RND(1));"SECONDS."
|
|
690 LET M=T
|
|
700 LET M=M/V
|
|
710 IF M<1.5-(A*.1) THEN 1650
|
|
720 IF M<2.9-(A*.1) THEN 1680
|
|
730 IF M<4.4-(A*.01) THEN 1710
|
|
740 PRINT:PRINT "DO YOU WANT TO RACE AGAIN";
|
|
750 INPUT B$
|
|
760 REM
|
|
770 IF B$="NO" THEN 1740
|
|
780 IF B$="YES" THEN 480
|
|
790 PRINT "PLEASE TYPE 'YES' OR 'NO'"
|
|
800 GOTO 740
|
|
810 STOP
|
|
820 PRINT
|
|
825 PRINT "*** SLALOM: THIS IS THE 1976 WINTER OLYMPIC GIANT SLALOM. YOU ARE"
|
|
830 PRINT " THE AMERICAN TEAM'S ONLY HOPE OF A GOLD MEDAL."
|
|
840 PRINT
|
|
845 PRINT " 0 -- TYPE THIS IS YOU WANT TO SEE HOW LONG YOU'VE TAKEN."
|
|
850 PRINT " 1 -- TYPE THIS IF YOU WANT TO SPEED UP A LOT."
|
|
860 PRINT " 2 -- TYPE THIS IF YOU WANT TO SPEED UP A LITTLE."
|
|
870 PRINT " 3 -- TYPE THIS IF YOU WANT TO SPEED UP A TEENSY."
|
|
880 PRINT " 4 -- TYPE THIS IF YOU WANT TO KEEP GOING THE SAME SPEED."
|
|
890 PRINT " 5 -- TYPE THIS IF YOU WANT TO CHECK A TEENSY."
|
|
900 PRINT " 6 -- TYPE THIS IF YOU WANT TO CHECK A LITTLE."
|
|
910 PRINT " 7 -- TYPE THIS IF YOU WANT TO CHECK A LOT."
|
|
920 PRINT " 8 -- TYPE THIS IF YOU WANT TO CHEAT AND TRY TO SKIP A GATE."
|
|
930 PRINT
|
|
935 PRINT " THE PLACE TO USE THESE OPTIONS IS WHEN THE COMPUTER ASKS:"
|
|
940 PRINT
|
|
945 PRINT "OPTION?"
|
|
950 PRINT
|
|
955 PRINT " GOOD LUCK!"
|
|
957 PRINT
|
|
960 GOTO 1470
|
|
970 PRINT "YOU'VE TAKEN";(T+RND(1));"SECONDS."
|
|
980 GOTO 580
|
|
990 ON O1 GOTO 1130,1010,1170,1080,1190,1100,1150,1210
|
|
1000 STOP
|
|
1010 LET S=S+INT(RND(1)*(5-3)+3)
|
|
1020 PRINT S;"M.P.H."
|
|
1030 IF S>Q THEN 1290
|
|
1040 IF S>Q-1 THEN 1060
|
|
1050 RETURN
|
|
1060 PRINT "CLOSE ONE!"
|
|
1070 RETURN
|
|
1080 PRINT S;"M.P.H."
|
|
1090 GOTO 1030
|
|
1100 LET S=S-INT(RND(1)*(5-3)+3)
|
|
1110 PRINT S;"M.P.H."
|
|
1120 GOTO 1030
|
|
1130 LET S=S+INT(RND(1)*(10-5)+5)
|
|
1140 GOTO 1080
|
|
1150 LET S=S-INT(RND(1)*(10-5)+5)
|
|
1160 GOTO 1110
|
|
1170 LET S=S+INT(RND(1)*(4-1)+1)
|
|
1180 GOTO 1110
|
|
1190 LET S=S-INT(RND(1)*(4-1)+1)
|
|
1200 GOTO 1110
|
|
1210 PRINT "***CHEAT"
|
|
1220 IF RND(1)<.7 THEN 1260
|
|
1230 PRINT "YOU MADE IT!"
|
|
1240 LET T=T+1.5
|
|
1250 RETURN
|
|
1260 PRINT "AN OFFICIAL CAUGHT YOU!"
|
|
1270 PRINT "YOU TOOK";(T+RND(1));"SECONDS."
|
|
1280 GOTO 740
|
|
1290 IF RND(1)<((S-Q)*.1)+.2 THEN 1320
|
|
1300 PRINT "YOU WENT OVER THE NAXIMUM SPEED AND MADE IT!"
|
|
1310 RETURN
|
|
1320 PRINT "YOU WENT OVER THE MAXIMUM SPEED AND ";
|
|
1330 IF RND(1)<.5 THEN 1370
|
|
1340 PRINT "WIPED OUT!"
|
|
1350 PRINT "YOU TOOK";(T+RND(1));"SECONDS"
|
|
1360 GOTO 740
|
|
1370 PRINT "SNAGGED A FLAG!"
|
|
1380 GOTO 1350
|
|
1390 PRINT "LET'S BE REALISTIC, OK? LET'S GO BACK AND TRY AGAIN..."
|
|
1400 LET S=S1
|
|
1410 GOTO 550
|
|
1420 PRINT "WHAT?"
|
|
1430 GOTO 580
|
|
1440 PRINT
|
|
1445 PRINT "TYPE ";CHR$(34);"INS";CHR$(34);" FOR INSTRUCTIONS"
|
|
1450 PRINT "TYPE ";CHR$(34);"MAX";CHR$(34);" FOR APPROXIMATE MAXIMUM SPEEDS"
|
|
1460 PRINT "TYPE ";CHR$(34);"RUN";CHR$(34);" FOR THE BEGINNING OF THE RACE"
|
|
1470 PRINT "COMMAND--";
|
|
1480 INPUT A$
|
|
1490 REM
|
|
1500 IF A$="INS" THEN 820
|
|
1510 IF A$="MAX" THEN 1550
|
|
1520 IF A$="RUN" THEN 410
|
|
1530 PRINT CHR$(34);A$;CHR$(34);" IS AN ILLEGAL COMMAND--RETRY";
|
|
1540 GOTO 1480
|
|
1550 PRINT "GATE MAX"
|
|
1560 PRINT " # M.P.H."
|
|
1570 PRINT"----------"
|
|
1580 FOR B=1 TO V
|
|
1590 READ Q
|
|
1600 PRINT B;" ";Q
|
|
1610 NEXT B
|
|
1620 GOTO 1470
|
|
1630 LET T=T+.5
|
|
1640 GOTO 670
|
|
1650 PRINT "YOU WON A GOLD MEDAL!"
|
|
1660 LET G(1)=G(1)+1
|
|
1670 GOTO 1730
|
|
1680 PRINT "YOU WON A SILVER MEDAL"
|
|
1690 LET S(1)=S(1)+1
|
|
1700 GOTO 1730
|
|
1710 PRINT "YOU WON A BRONZE MEDAL"
|
|
1720 LET B(1)=B(1)+1
|
|
1730 GOTO 740
|
|
1740 PRINT "THANKS FOR THE RACE"
|
|
1750 IF G(1)<1 THEN 1770
|
|
1760 PRINT "GOLD MEDALS:";G(1)
|
|
1770 IF S(1)<1 THEN 1790
|
|
1780 PRINT "SILVER MEDALS:";S(1)
|
|
1790 IF B(1)<1 THEN 1830
|
|
1800 PRINT "BRONZE MEDALS:";B(1)
|
|
1810 DATA 14,18,26,29,18,25,28,32,29,20,29,29,25,21,26,29,20,21,20
|
|
1820 DATA 18,26,25,33,31,22
|
|
1830 END
|