Thursday, December 16, 2004
DONKEY.BAS
DIM CAR%(900)
940 REM The IBM Personal Computer Donkey
950 REM Version 1.10 (C)Copyright IBM Corp 1981, 1982
960 REM Licensed Material - Program Property of IBM
975 DEF SEG : POKE 106, 0
980 SAMPLES$ = "NO"
990 GOTO 1010
1000 SAMPLES$ = "YES"
1010 KEY OFF: SCREEN 0, 1: COLOR 15, 0, 0: WIDTH 40: CLS : LOCATE 5, 19: PRINT "IBM"
1020 LOCATE 7, 12, 0: PRINT "Personal Computer"
1030 COLOR 10, 0: LOCATE 10, 9, 0: PRINT CHR$(213) + STRING$(21, 205) + CHR$(184)
1040 LOCATE 11, 9, 0: PRINT CHR$(179) + " DONKEY " + CHR$(179)
1050 LOCATE 12, 9, 0: PRINT CHR$(179) + STRING$(21, 32) + CHR$(179)
1060 LOCATE 13, 9, 0: PRINT CHR$(179) + " Version 1.10 " + CHR$(179)
1070 LOCATE 14, 9, 0: PRINT CHR$(212) + STRING$(21, 205) + CHR$(190)
1080 COLOR 15, 0: LOCATE 17, 4, 0: PRINT "(C) Copyright IBM Corp 1981, 1982"
1090 COLOR 14, 0: LOCATE 23, 7, 0: PRINT "Press space bar to continue"
1100 IF INKEY$ <> "" THEN GOTO 1100
1110 CMD$ = INKEY$
1120 IF CMD$ = "" THEN GOTO 1110
1130 IF CMD$ = CHR$(27) THEN GOTO 1298
1140 IF CMD$ = " " THEN GOTO 1160
1150 GOTO 1110
1160 DEF SEG = 0
1170 IF (PEEK(&H410) AND &H30) <> &H30 THEN DEF SEG : GOTO 1291
1180 WIDTH 80: CLS : LOCATE 3, 1
1190 PRINT "HOLD IT!"
1200 PRINT "YOU'RE NOT USING THE COLOR/GRAPHICS MONITOR ADAPTER!"
1210 PRINT "THIS PROGRAM USES GRAPHICS AND REQUIRES THAT ADAPTER."
1220 PRINT "PRESS THE SPACE BAR TO CONTINUE."
1230 DEF SEG
1240 IF INKEY$ <> "" THEN GOTO 1240
1250 CMD$ = INKEY$
1260 IF CMD$ = "" THEN GOTO 1250
1270 IF CMD$ = CHR$(27) THEN GOTO 1298
1280 IF CMD$ = " " THEN GOTO 1298
1290 GOTO 1250
1291 KEY OFF
1292 ON ERROR GOTO 1295
1293 PLAY "p16"
1294 GOTO 1300
1295 COLOR 31, 0, 0
1296 PRINT "THIS PROGRAM REQUIRES ADVANCED BASIC -- USE COMMAND 'BASICA'": COLOR 15, 0, 0: FOR I = 1 TO 9000: NEXT: RESUME 1298
1298 ON ERROR GOTO 0
1299 SCREEN 0, 1: IF SAMPLES$ = "YES" THEN CHAIN "samples": ELSE COLOR 7, 0, 0: CLS : END
1300 REM
1410 COLOR 0
1420 DEFINT A-Y
1440 SCREEN 1, 0: COLOR 8, 1
1450 DIM Q%(500)
1460 DIM D1%(150), D2%(150), C1%(200), C2%(200)
1470 DIM DNK%(300)
1480 GOSUB 1940
1490 GOSUB 1780
1500 CLS
1510 DIM B%(300)
1520 FOR I = 2 TO 300: B%(I) = -16384 + 192: NEXT
1530 B%(0) = 2: B%(1) = 193
1540 REM
1550 CX = 110: CLS
1590 LINE (0, 0)-(305, 199), , B
1600 LINE (6, 6)-(97, 195), 1, BF
1610 LINE (183, 6)-(305, 195), 1, BF
1620 LOCATE 3, 5: PRINT "Donkey"
1630 LOCATE 3, 29: PRINT "Driver"
1631 LOCATE 19, 25: PRINT "Press Space ";
1632 LOCATE 20, 25: PRINT "Bar to switch";
1633 LOCATE 21, 25: PRINT "lanes ";
1635 LOCATE 23, 25: PRINT "Press ESC ";
1636 LOCATE 24, 25: PRINT "to exit ";
1640 FOR Y = 4 TO 199 STEP 20: LINE (140, Y)-(140, Y + 10): NEXT
1650 CY = 105: CX = 105
1660 LINE (100, 0)-(100, 199): LINE (180, 0)-(180, 199)
1670 LOCATE 5, 6: PRINT SD: LOCATE 5, 31: PRINT SM
1680 CY = CY - 4: IF CY < 60 THEN 2230
1690 PUT (CX, CY), CAR%, PRESET
1700 DX = 105 + 42 * INT(RND * 2)
1710 FOR Y = (RND * -4) * 8 TO 124 STEP 6
1720 SOUND 20000, 1
1730 A$ = INKEY$: IF A$ = CHR$(27) THEN 1298 ELSE POKE 106, 0: IF LEN(A$) > 0 THEN LINE (CX, CY)-(CX + 28, CY + 44), 0, BF: CX = 252 - CX: PUT (CX, CY), CAR%, PRESET: SOUND 200, 1
1740 IF Y >= 3 THEN PUT (DX, Y), DNK%, PSET
1750 IF CX = DX AND Y + 25 >= CY THEN 2060
1760 IF Y AND 3 THEN PUT (140, 6), B%
1770 NEXT: LINE (DX, 124)-(DX + 32, 149), 0, BF: GOTO 1670
1780 CLS
1790 DRAW "S8C3"
1800 DRAW "BM12,1r3m+1,3d2R1ND2u1r2d4l2u1l1"
1810 DRAW "d7R1nd2u2r3d6l3u2l1d3m-1,1l3"
1820 DRAW "m-1,-1u3l1d2l3u6r3d2nd2r1u7l1d1l2"
1830 DRAW "u4r2d1nd2R1U2"
1840 DRAW "M+1,-3"
1850 DRAW "BD10D2R3U2M-1,-1L1M-1,1"
1860 DRAW "BD3D1R1U1L1BR2R1D1L1U1"
1870 DRAW "BD2BL2D1R1U1L1BR2R1D1L1U1"
1880 DRAW "BD2BL2D1R1U1L1BR2R1D1L1U1"
1890 LINE (0, 0)-(40, 60), , B
1900 PAINT (1, 1)
1920 GET (1, 1)-(29, 45), CAR%
1930 RETURN
1940 CLS
1950 DRAW "S08"
1960 DRAW "BM14,18"
1970 DRAW "M+2,-4R8M+1,-1U1M+1,+1M+2,-1"
1980 DRAW "M-1,1M+1,3M-1,1M-1,-2M-1,2"
1990 DRAW "D3L1U3M-1,1D2L1U2L3D2L1U2M-1,-1"
2000 DRAW "D3L1U5M-2,3U1"
2010 PAINT (21, 14), 3
2020 PRESET (37, 10): PRESET (40, 10)
2030 PRESET (37, 11): PRESET (40, 11)
2040 GET (13, 0)-(45, 25), DNK%
2050 RETURN
2060 SD = SD + 1: LOCATE 14, 6: PRINT "BOOM!"
2070 GET (DX, Y)-(DX + 16, Y + 25), D1%
2080 D1X = DX: D1Y = Y: D2X = DX + 17
2090 GET (DX + 17, Y)-(DX + 31, Y + 25), D2%
2100 GET (CX, CY)-(CX + 14, CY + 44), C1%
2110 GET (CX + 15, CY)-(CX + 28, CY + 44), C2%
2120 C1X = CX: C1Y = CY: C2X = CX + 15
2130 FOR P = 6 TO 0 STEP -1: Z = 1 / (2 ^ P): Z1 = 1 - Z
2140 PUT (C1X, C1Y), C1%: PUT (C2X, C1Y), C2%
2150 PUT (D1X, D1Y), D1%: PUT (D2X, D1Y), D2%
2160 C1X = CX * Z1: D1Y = Y * Z1: C2X = C2X + (291 - C2X) * Z
2170 D1X = DX * Z1: C1Y = C1Y + (155 - C1Y) * Z: D2X = D2X + (294 - D2X) * Z
2180 PUT (C1X, C1Y), C1%: PUT (C2X, C1Y), C2%
2190 PUT (D1X, D1Y), D1%: PUT (D2X, D1Y), D2%
2200 SOUND 37 + RND * 200, 4: NEXT
2210 FOR Y = 1 TO 2000: NEXT
2220 CLS : GOTO 1540
2230 SM = SM + 1: LOCATE 7, 25: PRINT "Donkey loses!"
2240 FOR Y = 1 TO 1000: NEXT
2250 CLS : GOTO 1540
940 REM The IBM Personal Computer Donkey
950 REM Version 1.10 (C)Copyright IBM Corp 1981, 1982
960 REM Licensed Material - Program Property of IBM
975 DEF SEG : POKE 106, 0
980 SAMPLES$ = "NO"
990 GOTO 1010
1000 SAMPLES$ = "YES"
1010 KEY OFF: SCREEN 0, 1: COLOR 15, 0, 0: WIDTH 40: CLS : LOCATE 5, 19: PRINT "IBM"
1020 LOCATE 7, 12, 0: PRINT "Personal Computer"
1030 COLOR 10, 0: LOCATE 10, 9, 0: PRINT CHR$(213) + STRING$(21, 205) + CHR$(184)
1040 LOCATE 11, 9, 0: PRINT CHR$(179) + " DONKEY " + CHR$(179)
1050 LOCATE 12, 9, 0: PRINT CHR$(179) + STRING$(21, 32) + CHR$(179)
1060 LOCATE 13, 9, 0: PRINT CHR$(179) + " Version 1.10 " + CHR$(179)
1070 LOCATE 14, 9, 0: PRINT CHR$(212) + STRING$(21, 205) + CHR$(190)
1080 COLOR 15, 0: LOCATE 17, 4, 0: PRINT "(C) Copyright IBM Corp 1981, 1982"
1090 COLOR 14, 0: LOCATE 23, 7, 0: PRINT "Press space bar to continue"
1100 IF INKEY$ <> "" THEN GOTO 1100
1110 CMD$ = INKEY$
1120 IF CMD$ = "" THEN GOTO 1110
1130 IF CMD$ = CHR$(27) THEN GOTO 1298
1140 IF CMD$ = " " THEN GOTO 1160
1150 GOTO 1110
1160 DEF SEG = 0
1170 IF (PEEK(&H410) AND &H30) <> &H30 THEN DEF SEG : GOTO 1291
1180 WIDTH 80: CLS : LOCATE 3, 1
1190 PRINT "HOLD IT!"
1200 PRINT "YOU'RE NOT USING THE COLOR/GRAPHICS MONITOR ADAPTER!"
1210 PRINT "THIS PROGRAM USES GRAPHICS AND REQUIRES THAT ADAPTER."
1220 PRINT "PRESS THE SPACE BAR TO CONTINUE."
1230 DEF SEG
1240 IF INKEY$ <> "" THEN GOTO 1240
1250 CMD$ = INKEY$
1260 IF CMD$ = "" THEN GOTO 1250
1270 IF CMD$ = CHR$(27) THEN GOTO 1298
1280 IF CMD$ = " " THEN GOTO 1298
1290 GOTO 1250
1291 KEY OFF
1292 ON ERROR GOTO 1295
1293 PLAY "p16"
1294 GOTO 1300
1295 COLOR 31, 0, 0
1296 PRINT "THIS PROGRAM REQUIRES ADVANCED BASIC -- USE COMMAND 'BASICA'": COLOR 15, 0, 0: FOR I = 1 TO 9000: NEXT: RESUME 1298
1298 ON ERROR GOTO 0
1299 SCREEN 0, 1: IF SAMPLES$ = "YES" THEN CHAIN "samples": ELSE COLOR 7, 0, 0: CLS : END
1300 REM
1410 COLOR 0
1420 DEFINT A-Y
1440 SCREEN 1, 0: COLOR 8, 1
1450 DIM Q%(500)
1460 DIM D1%(150), D2%(150), C1%(200), C2%(200)
1470 DIM DNK%(300)
1480 GOSUB 1940
1490 GOSUB 1780
1500 CLS
1510 DIM B%(300)
1520 FOR I = 2 TO 300: B%(I) = -16384 + 192: NEXT
1530 B%(0) = 2: B%(1) = 193
1540 REM
1550 CX = 110: CLS
1590 LINE (0, 0)-(305, 199), , B
1600 LINE (6, 6)-(97, 195), 1, BF
1610 LINE (183, 6)-(305, 195), 1, BF
1620 LOCATE 3, 5: PRINT "Donkey"
1630 LOCATE 3, 29: PRINT "Driver"
1631 LOCATE 19, 25: PRINT "Press Space ";
1632 LOCATE 20, 25: PRINT "Bar to switch";
1633 LOCATE 21, 25: PRINT "lanes ";
1635 LOCATE 23, 25: PRINT "Press ESC ";
1636 LOCATE 24, 25: PRINT "to exit ";
1640 FOR Y = 4 TO 199 STEP 20: LINE (140, Y)-(140, Y + 10): NEXT
1650 CY = 105: CX = 105
1660 LINE (100, 0)-(100, 199): LINE (180, 0)-(180, 199)
1670 LOCATE 5, 6: PRINT SD: LOCATE 5, 31: PRINT SM
1680 CY = CY - 4: IF CY < 60 THEN 2230
1690 PUT (CX, CY), CAR%, PRESET
1700 DX = 105 + 42 * INT(RND * 2)
1710 FOR Y = (RND * -4) * 8 TO 124 STEP 6
1720 SOUND 20000, 1
1730 A$ = INKEY$: IF A$ = CHR$(27) THEN 1298 ELSE POKE 106, 0: IF LEN(A$) > 0 THEN LINE (CX, CY)-(CX + 28, CY + 44), 0, BF: CX = 252 - CX: PUT (CX, CY), CAR%, PRESET: SOUND 200, 1
1740 IF Y >= 3 THEN PUT (DX, Y), DNK%, PSET
1750 IF CX = DX AND Y + 25 >= CY THEN 2060
1760 IF Y AND 3 THEN PUT (140, 6), B%
1770 NEXT: LINE (DX, 124)-(DX + 32, 149), 0, BF: GOTO 1670
1780 CLS
1790 DRAW "S8C3"
1800 DRAW "BM12,1r3m+1,3d2R1ND2u1r2d4l2u1l1"
1810 DRAW "d7R1nd2u2r3d6l3u2l1d3m-1,1l3"
1820 DRAW "m-1,-1u3l1d2l3u6r3d2nd2r1u7l1d1l2"
1830 DRAW "u4r2d1nd2R1U2"
1840 DRAW "M+1,-3"
1850 DRAW "BD10D2R3U2M-1,-1L1M-1,1"
1860 DRAW "BD3D1R1U1L1BR2R1D1L1U1"
1870 DRAW "BD2BL2D1R1U1L1BR2R1D1L1U1"
1880 DRAW "BD2BL2D1R1U1L1BR2R1D1L1U1"
1890 LINE (0, 0)-(40, 60), , B
1900 PAINT (1, 1)
1920 GET (1, 1)-(29, 45), CAR%
1930 RETURN
1940 CLS
1950 DRAW "S08"
1960 DRAW "BM14,18"
1970 DRAW "M+2,-4R8M+1,-1U1M+1,+1M+2,-1"
1980 DRAW "M-1,1M+1,3M-1,1M-1,-2M-1,2"
1990 DRAW "D3L1U3M-1,1D2L1U2L3D2L1U2M-1,-1"
2000 DRAW "D3L1U5M-2,3U1"
2010 PAINT (21, 14), 3
2020 PRESET (37, 10): PRESET (40, 10)
2030 PRESET (37, 11): PRESET (40, 11)
2040 GET (13, 0)-(45, 25), DNK%
2050 RETURN
2060 SD = SD + 1: LOCATE 14, 6: PRINT "BOOM!"
2070 GET (DX, Y)-(DX + 16, Y + 25), D1%
2080 D1X = DX: D1Y = Y: D2X = DX + 17
2090 GET (DX + 17, Y)-(DX + 31, Y + 25), D2%
2100 GET (CX, CY)-(CX + 14, CY + 44), C1%
2110 GET (CX + 15, CY)-(CX + 28, CY + 44), C2%
2120 C1X = CX: C1Y = CY: C2X = CX + 15
2130 FOR P = 6 TO 0 STEP -1: Z = 1 / (2 ^ P): Z1 = 1 - Z
2140 PUT (C1X, C1Y), C1%: PUT (C2X, C1Y), C2%
2150 PUT (D1X, D1Y), D1%: PUT (D2X, D1Y), D2%
2160 C1X = CX * Z1: D1Y = Y * Z1: C2X = C2X + (291 - C2X) * Z
2170 D1X = DX * Z1: C1Y = C1Y + (155 - C1Y) * Z: D2X = D2X + (294 - D2X) * Z
2180 PUT (C1X, C1Y), C1%: PUT (C2X, C1Y), C2%
2190 PUT (D1X, D1Y), D1%: PUT (D2X, D1Y), D2%
2200 SOUND 37 + RND * 200, 4: NEXT
2210 FOR Y = 1 TO 2000: NEXT
2220 CLS : GOTO 1540
2230 SM = SM + 1: LOCATE 7, 25: PRINT "Donkey loses!"
2240 FOR Y = 1 TO 1000: NEXT
2250 CLS : GOTO 1540