'=========================================================================== ' Subject: POINT A TO POINT B Date: 05-05-96 (10:46) ' Author: John Wantland Code: QB, QBasic, PDS ' Origin: kwantlan@coffey.com Packet: GAMES.ABC '=========================================================================== 1 REM PROGRAM TITLE: POINT A TO POINT B 2 XSONG$ = "ML T200 A B C D E F G F E D C B A A A CCC L4 E L8 D" 3 PLAY XSONG$ 5 CLEAR 300 6 C = INT(RND * 14 + 1) 7 B = INT(RND * 14 + 1) 8 O = INT(RND * 14 + 1) 10 V$ = RIGHT$(TIME$, 2) 15 V = VAL(V$) 20 RANDOMIZE V: DIM SONG$(13) 30 COLOR C, B, O: CLS : KEY OFF: WIDTH 40: DEF SEG = &HB800 40 PRINT TAB(15); "": SOUND 500, 3 50 PRINT TAB(15); "": SOUND 600, 3 60 PRINT : DIM D$(50), S(50) 70 SOUND 700, 3: INPUT "INSTRUCTIONS (Y/N)"; W$ 80 IF W$ = "N" OR W$ = "NO" THEN G = 1 90 SOUND 500, 3: INPUT "NUMBER TO PLAY (1-10)"; A 100 IF A < 1 OR A > 10 THEN 90 110 IF G = 1 THEN G = 0: GOTO 410 120 PLAY "MB L8 F E F A C": LOCATE 3, 1: PRINT "ARE YOU CONFUSED BY THE MANY" 130 PRINT "DIFFERENT MAZE GAMES THAT ARE" 140 PRINT "CURRENTLY ON THE MARKET? HAVE" 150 PRINT "NO FEAR!! IS HERE!!" 170 PRINT : PRINT "ACTUALLY, THIS IS NOT YOUR" 180 PRINT "RUN-OF-THE-MILL MAZE GAME." 190 PRINT "IT IS ONE THAT WILL PROBABLY" 200 PRINT "CONFUSE YOU MORE THAN EVER!" 210 PRINT "YOU SEE, YOU WILL NOT BE" 220 PRINT "CONSTANTLY PRESSING DIFFERENT" 230 PRINT "KEYS FOR DIFFERENT DIRECTIONS;" 240 PRINT "INSTEAD, YOU'LL INPUT ALL" 250 PRINT : INPUT "PRESS ENTER TO CONTINUE"; W 260 CLS 270 PLAY "MB L8 C C+ D E F": PRINT "OF THE INSTRUCTIONS BEFORE YOU" 280 PRINT "MOVE AT ALL: UP SO MANY" 290 PRINT "SPACES, RIGHT SO MANY SPACES," 300 PRINT "LEFT, SO MANY, ETC., ETC." 310 PRINT "AFTER YOU HAVE ENTERED ALL" 320 PRINT "OF YOUR DIRECTION INSTRUCTIONS" 330 PRINT "YOU WILL INPUT . AT THAT" 340 PRINT "POINT YOUR PIECE WILL BEGIN" 350 PRINT "TO MOVE FOLLOWING THE INSTRUCTIONS" 360 PRINT "YOU GAVE. IF AT ANY POINT YOU" 370 PRINT "COLLIDE WITH ANYTHING OTHER" 380 PRINT "THAN A BLANK SPACE--END OF TURN..." 390 PRINT 400 INPUT "PRESS ENTER, AGAIN"; W 410 CLS 420 REM PLAYERS 430 REM PLAY IN ORDER OF ENTRY 440 SOUND 500, 3: PRINT "ENTER THE FIRST NAMES OF" 450 PRINT "THE"; A; "PLAYERS, PLEASE" 460 FOR I = 1 TO A: INPUT A$(I): SOUND 100 + 25 * I, 3 470 NEXT: L = 1: MX = 0 480 PRINT 490 PRINT "TO BEGIN, "; A$(L); ", PRESS ENTER"; 500 INPUT W 510 REM GRAPHICS AND MUSIC 515 FOR I = 1 TO 13: NEXT 520 CLS : SNG = 1: PLAY XSONG$: GOTO 580 560 LOCATE 1, 1: PRINT STRING$(40, 32); : RETURN 565 DC = INT(RND * 6 + 25): DR = 2 570 LOCATE DR, DC: PRINT STRING$(2, 32); : RETURN 580 GOSUB 560: LOCATE 8, 2: PRINT STRING$(9, 219) 590 LOCATE 8, 18: PRINT STRING$(9, 219); : GOSUB 620 600 LOCATE 8, 22: PRINT STRING$(14, 219) 605 DC = INT(RND * 7 + 30): DR = 6 610 LOCATE DR, DC: PRINT STRING$(2, 32); : RETURN 620 GOSUB 700: M = 10: M1 = 20: M2 = 6: M3 = 12: GOTO 670 630 SNG = SNG + 1: IF SNG <= 13 THEN PLAY XSONG$ 631 IF M2 <= 0 THEN M2 = INT(RND * 4 + 2) 632 IF M2 >= 32 THEN M2 = INT(RND * 10 + 13) 633 IF M1 <= 0 THEN M1 = INT(RND * 10 + 1) 634 IF M1 >= 40 THEN M1 = 38 635 FOR X = M TO M1: LOCATE M2, X: PRINT CHR$(219) 637 DR = 8: DC = INT(RND * 10 + 10): FR = 11: FC = INT(RND * 10 + 20) 638 LOCATE DR, DC: PRINT STRING$(10, 219): LOCATE FR, FC: PRINT STRING$(10, 219) 639 FOR ROW = 12 TO 14: COL = INT(RND * 25 + 1): GAP = INT(RND * 15 + 1): LOCATE ROW, COL: PRINT STRING$(GAP, 32): NEXT: LOCATE 8, COL: PRINT STRING$(GAP, 32) 640 LOCATE M3, X: PRINT CHR$(219): NEXT: FOR X = M2 + 1 TO M3 - 2 650 LOCATE X, M: PRINT CHR$(219): LOCATE X, (M + 1): PRINT CHR$(219): LOCATE X, (M1 - 1): PRINT CHR$(219) 660 LOCATE X, M1: PRINT CHR$(219): NEXT: RETURN 670 GOSUB 630 680 M = 1: M1 = 5: M2 = 12: M3 = 16: GOSUB 630 690 M = 6: M1 = 9: GOSUB 630 700 M = M1 + 1: M1 = M1 + 22: M2 = M3 - 2: M3 = M3 + 6 710 GOSUB 630 720 M = M1 + 1: M1 = M1 + 9: M2 = M2 + 6: M3 = M3 + 6 730 GOSUB 630 740 M = 1: M1 = 9: GOSUB 630: GOTO 770 750 LOCATE 20, 10: PRINT STRING$(25, 219) 752 LOCATE 12, 30: PRINT STRING$(8, 219) 755 DC = INT(22 * RND + 10): DR = 20 758 FC = INT(6 * RND + 31): FR = 12 760 LOCATE DR, DC: PRINT STRING$(2, 32) 765 LOCATE FR, FC: PRINT STRING$(2, 32); : RETURN 770 GOSUB 750: M1 = M1 - 3: M2 = M3 + 2: M3 = M3 + 6 775 GOSUB 630 780 M = M1 + 1: M1 = M1 + 4 790 GOSUB 630 800 IF M >= 38 THEN 880 810 GOTO 780 820 M = M - 5: M1 = M + 3: M2 = 2: M3 = 10 830 GOSUB 630 840 M = M - 4: M1 = M + 1: M2 = M3 + 2: M3 = M3 + 8 850 GOSUB 630 860 M = M - 5: M1 = M1 + 1: M2 = 4: M3 = 6 870 GOSUB 630: RETURN 880 REM START/STOP LOCATIONS 890 GOSUB 820: Y = 21: X2 = 40 900 X1 = INT(RND * (X2 - 1) + 2) 1000 IF G = 1 THEN 1110 1010 COLOR 11: LOCATE 23, 5: PRINT "THIS IS POINT A (START)." 1020 LOCATE Y, X1: PRINT CHR$(32): LOCATE Y, (X1 - 1): PRINT CHR$(32) 1030 FOR T = 1 TO 50: NEXT 1040 COLOR 27: LOCATE Y, X1: PRINT CHR$(219) 1050 FOR T = 1 TO 50000: NEXT T 1060 COLOR 11: LOCATE Y, X1: PRINT CHR$(219) 1070 IF G = 1 THEN 1150 ELSE JJ = X1 1080 G = 1 1090 LOCATE 23, 5: PRINT "LOOK AT THE TOP (POINT B)" 1100 Y = 1: X2 = 30: GOTO 900 1110 LOCATE 23, 5: PRINT STRING$(35, 32) 1130 LOCATE 23, 5: PRINT "THIS IS POINT B (STOPPING ZONE)." 1140 R = X1: GOTO 1020 1150 LOCATE 23, 5: PRINT STRING$(35, 32) 1160 GOTO 1210 1170 LOCATE 23, 5: PRINT STRING$(35, 32): LOCATE 23, 5 1180 RETURN 1190 FOR T = 1 TO 2000: NEXT 1200 GOSUB 1170: RETURN 1210 GOSUB 1170 1220 PRINT "YOU WILL NOW GIVE INSTRUCTIONS:" 1225 FOR T = 1 TO 1000: NEXT T 1230 GOSUB 1190: GOSUB 1170 1240 PRINT "TO ENTER THE STOP ZONE..." 1245 FOR T = 1 TO 10000: NEXT T 1250 GOSUB 1190: GOSUB 1170 1260 PRINT "STOP BLOCK MUST BE HIT:" 1270 GOSUB 1190: GOSUB 1170 1280 PRINT "HEAD ON TO COMPLETE A RUN." 1290 GOSUB 1190: GOSUB 1170 1300 I = 1 1310 INPUT "DIRECTION (L,R,U,D)"; D$: SOUND 500, 3 1320 IF D$ = "XX" THEN 1380 1325 IF D$ = "Q" THEN 2350 1330 D$(I) = D$: GOSUB 1170 1340 INPUT "FOR HOW MANY SPACES"; S: SOUND 500, 3 1350 S(I) = S: I = I + 1: GOSUB 1170 1360 IF I >= 51 THEN 1430 1370 GOSUB 1200: GOSUB 1170: GOTO 1310 1380 GOSUB 1170 1390 PRINT "THE COMPUTER WILL NOW CARRY" 1395 FOR T = 1 TO 10000: NEXT T 1400 GOSUB 1190: GOSUB 1170 1410 PRINT "OUT ALL OF YOUR INSTRUCTIONS." 1420 I = I - 1: H = I: I = 1: X = JJ: Y = 21: G = 0 1425 GOSUB 1190: GOTO 1480 1430 GOSUB 1170 1440 PRINT "THAT IS THE LIMIT OF THE" 1450 GOSUB 1190: GOSUB 1170 1460 PRINT "INSTRUCTIONS YOU CAN ENTER." 1470 GOSUB 1190: GOTO 1380 1480 D$ = D$(I): S = S(I): J = 1: IF I <= 12 THEN PLAY XSONG$(I) 1490 IF D$ = "L" THEN 1540 1500 IF D$ = "R" THEN 1580 1510 IF D$ = "U" THEN 1620 1520 IF D$ = "D" THEN 1660 1530 GOTO 1760 'BAD DIRECT 1540 IF PEEK((X - 2) * 2 + (Y - 1) * 80) = 219 THEN 1760 1550 X = X - 1: LOCATE Y, X + 1: PRINT CHR$(32) 1560 IF X <= 0 THEN 1760 1570 GOTO 1690 1580 IF PEEK(X * 2 + (Y - 1) * 80) = 219 THEN 1760 1590 X = X + 1: LOCATE Y, (X - 1): PRINT CHR$(32) 1600 IF X >= 40 THEN 1760 1610 GOTO 1690 1620 IF PEEK((X - 1) * 2 + (Y - 2) * 80) = 219 THEN 1760 1630 Y = Y - 1: LOCATE (Y + 1), X: PRINT CHR$(32) 1640 IF Y <= 0 THEN 1760 1650 GOTO 1690 1660 IF PEEK((X - 1) * 2 + Y * 80) = 219 THEN 1760 1670 Y = Y + 1: LOCATE (Y - 1), X: PRINT CHR$(32) 1680 IF Y >= 20 THEN 1760 1690 COLOR 11: LOCATE Y, X: PRINT CHR$(2) 'MAKE CARACTER 1700 IF S > J THEN 1720 1710 GOTO 1730 1720 J = J + 1: GOTO 1490 1730 I = I + 1 1740 IF I > H THEN HH = 1: GOTO 1900 1750 GOTO 1480 1760 GOSUB 1170: IF ABS(X - R) <= 1 THEN 2060 1770 PRINT "SORRY...YOU HAVE ATTEMPTED" 1780 GOSUB 1190: GOSUB 1170 1790 PRINT "A SHORT-CUT THAT DIDN'T WORK." 1800 REM ANOTHER PLAY? 1810 GOSUB 1190 1820 GOTO 1950 1830 GOSUB 1190: GOSUB 1170 1840 PRINT "READY TO TRY AGAIN (Y/N)"; 1850 INPUT W$ 1860 IF W$ = "Y" THEN 1880 1870 GOTO 2300 1880 LOCATE Y, X: PRINT CHR$(32): LOCATE 1, R: PRINT CHR$(32) 1890 GOTO 1960 1900 GOSUB 1170 1910 PRINT "THAT WASN'T ENOUGH TO GET " 1920 GOSUB 1190: GOSUB 1170 1930 PRINT "TO GET YOU TO THE STOP ZONE, "; A$(L) 1940 GOTO 1800 1950 REM PLAYER ADVANCE 1960 IF L >= A THEN 2020 ELSE L = L + 1 1970 GOSUB 1170 1980 PRINT A$(L); " WILL NOW ATTEMPT THE" 1990 GOSUB 1190: GOSUB 1170 2000 PRINT "VENTURE FROM POINT A TO POINT B." 2005 LOCATE Y, X: PRINT CHR$(32) 2010 GOSUB 600: GOSUB 750: M = 35: M1 = 38 2015 GOSUB 1190: GOTO 880 2020 REM START OVER 2030 L = 1: GOSUB 1170 2040 PRINT "ALL HAVE PLAYED..." 2050 GOSUB 2160: MX = 0: GOTO 1830 2060 IF ABS(Y - 1) >= 1 THEN 1900 2070 GOSUB 1190: GOSUB 1170: REM COMPLETE 2080 PRINT "VERY WELL DONE, "; A$(L); "!!" 2090 GOSUB 1190: GOSUB 1170 2100 PRINT "YOU HAVE MADE A COMPLETE " 2110 GOSUB 1190: GOSUB 1170 2120 PRINT "PASSAGE TO POINT B..." 2130 GOSUB 1190 2140 M(L) = 1: MX = 1 2150 GOTO 1950 2160 REM PLAYERS MADE TO POINT B 2170 IF MX = 0 THEN RETURN 2180 GOSUB 1190: GOSUB 1170 2190 PRINT "THE FOLLOWING HAVE EASILY MADE" 2200 GOSUB 1190: GOSUB 1170 2210 PRINT "TO POINT B...." 2220 GOSUB 1190: GOSUB 1170 2230 FOR U = 1 TO A 2240 IF M(U) = 1 THEN 2260 2250 NEXT: RETURN 2260 PRINT A$(U); "....." 2270 GOSUB 1190: GOSUB 1170 2280 M(U) = 0: GOTO 2250 2290 REM END 2300 GOSUB 1190: GOSUB 1170 2310 PRINT "POINT A TO POINT B" 2320 GOSUB 1190: GOSUB 1170 2330 PRINT "TERMINATED...." 2340 GOSUB 1190: GOSUB 1170 2350 END