'===========================================================================
' Subject: Interstate 76                      Date: 04-30-01 (  :  )       
'  Author: Roop Singh                         Code: QB, Qbasic             
'  Origin:                                  Packet: GAMES.ABC
'===========================================================================
DECLARE SUB fpssub ()
DECLARE SUB p1coldet ()
DECLARE SUB aicarsub ()
DECLARE SUB deviders ()
DECLARE SUB variables ()
'Interstate 76 for QBasic
'Roop Singh
'April 30, 2001
'This is my final project.

DECLARE SUB p2coldet ()
DECLARE SUB outputsub ()
DECLARE SUB speedcontroll ()
DECLARE SUB frames ()
DECLARE SUB pedestrian ()
DECLARE SUB help ()
DECLARE SUB showscores ()
DECLARE SUB savescore ()
DECLARE SUB win ()
DECLARE SUB intro ()
DECLARE SUB explosion ()
DECLARE SUB landscape ()
DECLARE SUB datapic ()
DECLARE SUB road ()
DECLARE SUB driver ()

DIM SHARED blood(1 TO 100)
DIM SHARED man(1 TO 100)
DIM SHARED scores(1 TO 10)
DIM SHARED oldname$(1 TO 10)
DIM SHARED oldscore(1 TO 10)
DIM SHARED div1(40)
DIM SHARED div2(40)
DIM SHARED pothole(2300)
DIM SHARED car(140)
DIM SHARED car2(140)
DIM SHARED aicar1(140)
DIM SHARED aicar2(140)
DIM SHARED carx
DIM SHARED cary
DIM SHARED score
DIM SHARED winner$
DIM SHARED score2
DIM SHARED manlive
DIM SHARED manx
DIM SHARED many
DIM SHARED fps
DIM SHARED second
DIM SHARED counter
DIM SHARED start
DIM SHARED speed
DIM SHARED kmh
DIM SHARED slow
DIM SHARED slower
DIM SHARED health
DIM SHARED health2
DIM SHARED bumpfra
DIM SHARED bumpfla
DIM SHARED bumpbra
DIM SHARED bumpbla
DIM SHARED carx2
DIM SHARED cary2
DIM SHARED divy1
DIM SHARED divy2
DIM SHARED divy3
DIM SHARED divy1a
DIM SHARED divy2a
DIM SHARED divy3a
DIM SHARED divy1b
DIM SHARED divy2b
DIM SHARED divy3b
DIM SHARED divy1c
DIM SHARED divy2c
DIM SHARED divy3c
DIM SHARED aicar1x
DIM SHARED aicar1y
DIM SHARED aicarhel
DIM SHARED bumpfrb
DIM SHARED bumpflb
DIM SHARED bumpbrb
DIM SHARED bumpblb
DIM SHARED key$
DIM SHARED bulletx2
DIM SHARED bullety2
DIM SHARED fire2




RANDOMIZE TIMER
SCREEN 13
CALL datapic
CALL intro

'Car
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,04,04,04,04,00,00,00
DATA 00,00,04,04,01,01,04,04,00,00
DATA 00,00,04,01,01,01,01,04,00,00
DATA 00,00,04,01,01,01,01,04,00,00
DATA 00,00,04,04,04,04,04,04,00,00
DATA 00,00,04,04,04,04,04,04,00,00
DATA 00,00,04,04,04,04,04,04,00,00
DATA 00,00,04,04,04,04,04,04,00,00
DATA 00,00,04,04,04,04,04,04,00,00
DATA 00,00,04,01,01,01,01,04,00,00
DATA 00,00,04,04,01,01,04,04,00,00
DATA 00,00,00,04,04,04,04,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00

'Man
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,14,14,00,00,00,00
DATA 00,00,00,14,14,14,14,00,00,00
DATA 00,14,00,00,14,14,00,00,14,00
DATA 00,01,01,00,01,01,00,01,01,00
DATA 00,00,00,01,01,01,01,01,00,00
DATA 00,00,00,00,04,04,00,00,00,00
DATA 00,00,00,04,00,00,04,00,00,00
DATA 00,00,04,04,00,00,04,04,00,00
DATA 00,00,00,00,00,00,00,00,00,00

'Blood Splat!
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,04,00,00,00,00,00
DATA 00,00,00,00,04,04,00,00,00,00
DATA 00,00,00,04,04,04,04,00,00,00
DATA 00,04,04,04,04,04,04,04,00,00
DATA 00,00,04,04,04,04,04,04,00,00
DATA 00,00,04,04,04,04,04,00,00,00
DATA 00,04,04,04,04,04,04,00,00,00
DATA 00,04,04,00,04,04,00,00,00,00
DATA 04,04,00,00,00,04,00,00,00,00

SUB aicarsub
'Artificial Intelligence (AI) car(s)
        PUT (aicar1x, aicar1y), aicar1, PSET
        aicar1y = aicar1y - speed
        IF aicar1y <= 1 THEN
                LINE (aicar1x, 0)-(aicar1x + 10, aicar1y + 14), 8, BF
                aicar1x = INT(RND * 80) + 140
                aicar1y = 180
                LINE (140, 0)-(140 + 10, 40), 8, BF
        END IF

        IF aicar1y >= 180 THEN
                LINE (aicar1x, 180)-(aicar1x + 10, 200), 8, BF
                aicar1y = 180
                speed = speed * -1
              
        END IF
        IF aicar1y >= 219 THEN aicar1y = 219

        IF speed >= 1.9 THEN speed = 1.9

        IF aicarhel <= 0 THEN
                LINE (aicar1x, aircar1y)-(aicar1x + 10, aicar1y + 14), 8, BF
                aicar1x = INT(RND * 70) + 120
                aicar1y = 180
                aicarhel = 99
                score = score + 500
                score2 = score2 + 500
                speed = speed + .1
        END IF


END SUB

SUB datapic



'Deviders for road (yellow)
PSET (1, 1), 8
FOR y = 2 TO 7
        PSET (1, y), 14
NEXT y
GET (1, 1)-(1, 7), div1
PUT (1, 1), div1, XOR
PSET (1, 1), 8
'white devider
FOR y = 2 TO 7
        PSET (1, y), 15
NEXT y
GET (1, 1)-(1, 7), div2
PUT (1, 1), div2, XOR
'Red Car
FOR y = 1 TO 16
        FOR x = 1 TO 10
                READ colours
                IF colours = 0 THEN colours = 8
                PSET (x, y), colours
        NEXT x
NEXT y
GET (1, 1)-(10, 16), car
PUT (1, 1), car, XOR
RESTORE

'Blue player 2 car
FOR y = 1 TO 16
        FOR x = 1 TO 10
                READ colours
                IF colours = 0 THEN colours = 8
                IF colours = 4 THEN colours = 11
                PSET (x, y), colours
        NEXT x
NEXT y
GET (1, 1)-(10, 16), car2
PUT (1, 1), car2, XOR
RESTORE

'pink AI car
FOR y = 1 TO 16
        FOR x = 1 TO 10
                READ colours
                IF colours = 0 THEN colours = 8
                IF colours = 4 THEN colours = 12
                PSET (x, y), colours
        NEXT x
NEXT y
GET (1, 1)-(10, 16), aicar1
PUT (1, 1), aicar1, XOR

'The man
FOR y = 1 TO 10
        FOR x = 1 TO 10
                READ colours
                IF colours = 0 THEN colours = 8
                IF colours = 4 THEN colours = 3
                PSET (x, y), colours

        NEXT x
NEXT y
GET (1, 1)-(10, 10), man
PUT (1, 1), man, XOR

'His remains
FOR y = 1 TO 10
        FOR x = 1 TO 10
                READ colours
                IF colours = 0 THEN colours = 8
                PSET (x, y), colours

        NEXT x
NEXT y
GET (1, 1)-(10, 10), blood
PUT (1, 1), blood, XOR



END SUB

SUB deviders
'This works on moving the deviders
        divy1 = divy1 + 1
        IF divy1 >= 190 THEN
                LINE (160, divy1)-(162, 200), 8, BF
                divy1 = 0
        END IF
        PUT (160, divy1), div1, PSET
     
        divy2 = divy2 + 1
        IF divy2 >= 190 THEN
                LINE (160, divy2)-(162, 200), 8, BF
                divy2 = 0
        END IF
        PUT (160, divy2), div1, PSET

        divy3 = divy3 + 1
        IF divy3 >= 190 THEN
                LINE (160, divy3)-(162, 200), 8, BF
                divy3 = 0
        END IF
        PUT (160, divy3), div1, PSET

'Next set of deviders                 A
        divy1a = divy1a + 1
        IF divy1a >= 190 THEN
                LINE (140, divy1a)-(142, 200), 8, BF
                divy1a = 0
        END IF
        PUT (140, divy1a), div1, PSET
    
        divy2a = divy2a + 1
        IF divy2a >= 190 THEN
                LINE (140, divy2a)-(142, 200), 8, BF
                divy2a = 0
        END IF
        PUT (140, divy2a), div1, PSET

        divy3a = divy3a + 1
        IF divy3a >= 190 THEN
                LINE (140, divy3a)-(142, 200), 8, BF
                divy3a = 0
      
      
        END IF
        PUT (140, divy3a), div1, PSET

'Nexter set of deviders                B
        divy1b = divy1b + 1
        IF divy1b >= 190 THEN
                LINE (180, divy1b)-(182, 200), 8, BF
                divy1b = 0
        END IF
        PUT (180, divy1b), div1, PSET
   
        divy2b = divy2b + 1
        IF divy2b >= 190 THEN
                LINE (180, divy2b)-(182, 200), 8, BF
                divy2b = 0
        END IF
        PUT (180, divy2b), div1, PSET

        divy3b = divy3b + 1
        IF divy3b >= 190 THEN
                LINE (180, divy3b)-(182, 200), 8, BF
                divy3b = 0
        END IF
        PUT (180, divy3b), div1, PSET

'Nexterest set of deviders             C
        divy1c = divy1c + 1
        IF divy1c >= 190 THEN
                LINE (200, divy1c)-(202, 200), 8, BF
                divy1c = 0
        END IF
        PUT (200, divy1c), div1, PSET
  
        divy2c = divy2c + 1
        IF divy2c >= 190 THEN
                LINE (200, divy2c)-(202, 200), 8, BF
                divy2c = 0
        END IF
        PUT (200, divy2c), div1, PSET

        divy3c = divy3c + 1
        IF divy3c >= 190 THEN
                LINE (200, divy3c)-(202, 200), 8, BF
                divy3c = 0
        END IF
        PUT (200, divy3c), div1, PSET

END SUB

SUB driver
CLS

CALL landscape
CALL variables

DO

'Player 1 Move car
        key$ = INKEY$
        key$ = UCASE$(RIGHT$(key$, 1))
        IF key$ = "M" THEN carx = carx + 2
        IF key$ = "K" THEN carx = carx - 2
        IF key$ = "P" THEN
                cary = cary + 2
                slow = slow + 100
                speed = speed + .1
                kmh = kmh - 1
        END IF
        IF key$ = "H" THEN
                cary = cary - 2
                slow = slow - 100
                speed = speed - .1
                kmh = kmh + 1
        END IF
        IF carx >= 230 THEN carx = 230
        IF carx <= 100 THEN carx = 100
        IF cary <= 0 THEN cary = 0
        IF cary >= 184 THEN cary = 184
        PUT (carx, cary), car, PSET

'Player 1 Dual 7.62mm MiniGun
        IF key$ = " " THEN
                fire = 1
                PSET (bulletx + 2, bullety), 8
                PSET (bulletx + 6, bullety), 8
                bullety = cary
                bulletx = carx
        END IF
        bullety = bullety - 1
        IF fire = 1 THEN
                PSET (bulletx + 2, bullety), 15
                PSET (bulletx + 2, bullety + 1), 8
                PSET (bulletx + 6, bullety), 15
                PSET (bulletx + 6, bullety + 1), 8
        END IF
        IF bullety = 0 THEN
                fire = 0
                PSET (bulletx + 2, 0), 8
                PSET (bulletx + 6, 0), 8
        END IF

'Player 1 Bullet bullet colision detections

        bullet1hit = POINT(bulletx, bullety - 1)
        bullet2hit = POINT(bulletx + 6, bullety - 1)
        IF bullet1hit = 12 OR bullet2hit = 12 THEN
                aicarhel = aicarhel - 1
                score = score + INT(RND * 20)
                fire = 0
        END IF
        IF bullet1hit = 3 OR bullet2hit = 3 THEN
                manlive = 0
                score = score + INT(RND * 2000)
                fire = 0
        END IF

        IF bullet1hit = 11 OR bullet2hit = 11 THEN
               
                health2 = health2 - 1
                temp = INT(RND * 3)
                IF temp = 2 THEN
                        carx2 = carx2 - 1
                ELSEIF temp = 1 THEN
                        carx2 = carx2 + 1
                END IF
                score = score + INT(RND * 20)
                fire = 0
        END IF

'Player 2 Dual 7.62mm MiniGun
    
        IF key2$ = "Q" THEN
                fire2 = 1
                PSET (bulletx2 + 2, bullety2), 8
                PSET (bulletx2 + 6, bullety2), 8
                bullety2 = cary2
                bulletx2 = carx2

        END IF
        IF fire2 = 1 THEN
                PSET (bulletx2 + 2, bullety2), 15
                PSET (bulletx2 + 2, bullety2 + 1), 8
                PSET (bulletx2 + 6, bullety2), 15
                PSET (bulletx2 + 6, bullety2 + 1), 8
                bullety2 = bullety2 - 1
        END IF
        IF bullety2 <= 0 THEN
                fire2 = 0
                PSET (bulletx2 + 2, 1), 8
                PSET (bulletx2 + 6, 1), 8
        END IF

'Player 2 Bullet bullet colision detections

        bullet1hit2 = POINT(bulletx2 + 2, bullety2 - 1)
        bullet2hit2 = POINT(bulletx2 + 6, bullety2 - 1)
        IF bullet1hit2 = 12 OR bullet2hit2 = 12 AND fire2 = 1 THEN
                fire2 = 0
                aicarhel = aicarhel - 1
                score2 = score2 + INT(RND * 100)
                PSET (bulletx2 + 2, bullety2 - 1), 8
                PSET (bulletx2 + 6, bullety2 - 1), 8
        END IF
        IF bullet1hit2 = 3 OR bullet2hit2 = 3 AND fire2 = 1 THEN
                fire2 = 0
                manlive = 0
                score2 = score2 + INT(RND * 2000)
                PSET (bulletx2 + 2, bullety2 - 1), 8
                PSET (bulletx2 + 6, bullety2 - 1), 8
        END IF

        IF bullet1hit2 = 4 OR bullet2hit2 = 4 AND fire2 = 1 THEN
                fire2 = 0
                health = health - 1
                temp = INT(RND * 3)
                IF temp = 2 THEN
                        carx = carx - 1
                ELSEIF temp = 1 THEN
                        carx = carx + 1
                END IF
                score2 = score2 + INT(RND * 20)
        END IF

'Player 2 Move car
        key2$ = key$
        key2$ = UCASE$(key2$)
        IF key2$ = "D" THEN carx2 = carx2 + 2
        IF key2$ = "A" THEN carx2 = carx2 - 2
        IF key2$ = "S" THEN
                cary2 = cary2 + 2
                slow = slow + 100
                speed = speed + .1
                kmh = kmh - 1
        END IF
        IF key2$ = "W" THEN
                cary2 = cary2 - 2
                slow = slow - 100
                speed = speed - .1
                kmh = kmh + 1
        END IF
        IF carx2 >= 230 THEN carx2 = 230
        IF carx2 <= 100 THEN carx2 = 100
        IF cary2 <= 0 THEN cary2 = 0
        IF cary2 >= 184 THEN cary2 = 184
        PUT (carx2, cary2), car2, PSET

    
        'Lots of subs inside a sub, inside another sub inside a loop.
        CALL aicarsub
        CALL deviders
        CALL p1coldet
        CALL p2coldet
        CALL speedcontroll
        CALL fpssub
        CALL pedestrian
        CALL outputsub

        'see's who's dead.
        IF health <= 0 THEN EXIT DO
        IF health2 <= 0 THEN EXIT DO
        'end the loop with x
        IF key$ = "X" THEN
                 health = 0
                 health2 = 0
        END IF

LOOP
'Who won?
IF health >= 2 THEN
        winner$ = "Player 1"
        CALL win
ELSEIF health2 >= 2 THEN
        score = score2
        winner$ = "Player 2"
        CALL win
ELSE CALL explosion
END IF

END SUB

SUB explosion
PALETTE 4, 63

FOR radius = 10 TO 210
   
        radius2 = radius - 5
   
        FOR slow = 1 TO 300
        NEXT slow

        CIRCLE (carx, cary), radius2, 0
        CIRCLE (carx, cary), radius, 4

NEXT radius

FOR radius = 10 TO 280
  
        radius2 = radius - 5
  
        FOR slow = 1 TO 300
        NEXT slow

        CIRCLE (carx, cary), radius2, 0, , , .1
        CIRCLE (carx, cary), radius, 4, , , .1

NEXT radius
CIRCLE (160, 100), radius2, 0, , , .1

FOR radius = 10 TO 210
     
        radius2 = radius - 10

        FOR slow = 1 TO 3000
        NEXT slow

        CIRCLE (carx, cary), radius2, 0
        CIRCLE (carx, cary), radius, 4
      
NEXT radius

FOR fade = 0 TO 63
        PALETTE 0, fade
        PALETTE 2, fade
NEXT fade

FOR fade = 63 TO 0 STEP -1
        PALETTE 0, fade
        PALETTE 2, fade
NEXT fade

FOR x = 63 TO 0 STEP -1
        PALETTE 15, x * 256 ^ 2 + x * 256 + x
        PALETTE 4, x * 256 ^ 2 + x * 256 + x
        PALETTE 8, x * 256 ^ 2 + x * 256 + x
        PALETTE 6, x * 256 ^ 2 + x * 256 + x
        PALETTE 1, x * 256 ^ 2 + x * 256 + x
        PALETTE 7, x * 256 ^ 2 + x * 256 + x
        key$ = INKEY$
        IF key$ <> "" THEN EXIT FOR
NEXT x
CLS

LOCATE 10, 10: PRINT "You Are Loser, ha ha ha"
LOCATE 11, 10: PRINT "You Are Loser, ha ha ha"
LOCATE 12, 10: PRINT "Your score was"; score
LOCATE 13, 10: PRINT "You are not worthy. Please Leave"


END SUB

SUB fpssub
'Frame counter (fps)
        second = INT(TIMER - start)
        counter = counter + 1
        IF second = 1 THEN
                fps = counter
                start = INT(TIMER)
                counter = 0
                second = 0
        END IF

END SUB

SUB help
CLS
SCREEN 12
PRINT "Your objective is to destroy other cars and get a high score. You may"
PRINT "then save your score on the harddrive."
PRINT "If a small asian man gets in your way, you'll know what to do."
PRINT "Who ever lives through it, wins."
PRINT
PRINT "Player 1 Controls:"
PRINT
PRINT "Up    "; CHR$(24)
PRINT "Down  "; CHR$(25)
PRINT "Left  "; CHR$(17)
PRINT "Right "; CHR$(16)
PRINT "Shoot Spacebar"
PRINT
PRINT "Player 2 Controls:"
PRINT
PRINT "Up    W"
PRINT "Down  S"
PRINT "Left  A"
PRINT "Right D"
PRINT "Fire  Q"

DO
LOOP UNTIL INKEY$ <> ""
SCREEN 13
CALL intro
END SUB

SUB intro

top:
SCREEN 12
CLS

LOCATE 5, 1: PRINT "A. Start one player game"
LOCATE 5, 1: PRINT "B. Start two player game"
LOCATE 6, 1: PRINT "C. Show scores"
LOCATE 7, 1: PRINT "D. Help me, i'm an idiot."
LOCATE 8, 1: PRINT "X. Exit"

DO
        key$ = INKEY$
LOOP UNTIL key$ <> ""

key$ = UCASE$(key$)
IF key$ = "A" THEN
        SCREEN 13
        r = 63
        g = 63
        B = 63
        y = 1
        LOCATE 10, 15: PRINT "Loading . . ."
        FOR x = 100000 TO 1 STEP -1
              
                PALETTE 15, r * 256 ^ 2 + g * 256 + B
                r = r - y
                IF r = 0 THEN y = y * -1
                IF r = 63 THEN y = y * -1
                g = g - y
                IF g = 0 THEN y = y * -1
                IF g = 63 THEN y = y * -1
                B = B - y
                IF B = 0 THEN y = y * -1
                IF B = 63 THEN y = y * -1
               
                LINE (0, 150)-(size, 160), 15, B
                size = size + 1
                IF size = 320 THEN EXIT FOR
               
               
                IF INKEY$ <> "" THEN EXIT FOR
                SCREEN 13
       
        NEXT x
        PALETTE 15, 63 * 256 ^ 2 + 63 * 256 + 63
        CALL driver
END IF

IF key$ = "B" THEN
        SCREEN 13
        r = 63
        g = 63
        B = 63
        y = 1
        LOCATE 10, 15: PRINT "Loading . . ."
        FOR x = 100000 TO 1 STEP -1
             
                PALETTE 15, r * 256 ^ 2 + g * 256 + B
                r = r - y
                IF r = 0 THEN y = y * -1
                IF r = 63 THEN y = y * -1
                g = g - y
                IF g = 0 THEN y = y * -1
                IF g = 63 THEN y = y * -1
                B = B - y
                IF B = 0 THEN y = y * -1
                IF B = 63 THEN y = y * -1
              
                LINE (0, 150)-(size, 160), 15, B
                size = size + 1
                IF size = 320 THEN EXIT FOR
              
              
                IF INKEY$ <> "" THEN EXIT FOR
                SCREEN 13
      
        NEXT x
        PALETTE 15, 63 * 256 ^ 2 + 63 * 256 + 63
        twoplayer = 1
        CALL driver
END IF
IF key$ = "C" THEN
        CALL showscores
        GOTO top
END IF
IF key$ = "D" THEN CALL help
IF key$ = "X" THEN EXIT SUB

END SUB

SUB landscape

'Draws the basic road
LINE (100, 0)-(100, 200), 8
LINE (240, 0)-(240, 200), 8
PAINT (101, 1), 8

'Adds grass
LINE (99, 0)-(99, 200), 2
LINE (241, 0)-(241, 200), 2
PAINT (319, 199), 2
PAINT (1, 1), 2

END SUB

SUB outputsub
        LOCATE 1, 32: PRINT "P1 Damage"
        LOCATE 2, 35: PRINT INT(health + .5); "% "
        LOCATE 3, 32: PRINT "Score"
        LOCATE 4, 32: PRINT score
        LOCATE 5, 31: PRINT kmh; "KM/h"
        LOCATE 1, 1: PRINT "P2 Damage"
        LOCATE 2, 1: PRINT INT(health2 + .5); "% "
        LOCATE 3, 1: PRINT "Score"
        LOCATE 4, 1: PRINT score2
        LOCATE 5, 1: PRINT "FPS:"; fps

END SUB

SUB p1coldet
'Player 1 Collision Detection
        bumpfrb = POINT(carx + 2, cary + 2)
        bumpflb = POINT(carx + 7, cary + 2)
        bumpbrb = POINT(carx + 2, cary + 13)
        bumpblb = POINT(carx + 7, cary + 13)
        IF bumpfrb = 12 OR bumpfrb = 1 THEN health = health - .33
        IF bumpflb = 12 OR bumpflb = 1 THEN health = health - .33
        IF bumpbrb = 12 OR bumpbrb = 1 THEN health = health - .33
        IF bumpblb = 12 OR bumpblb = 1 THEN health = health - .33
        IF bumpfrb = 11 OR bumpblb = 1 THEN
                 health = health - .33
                 health2 = health2 - .33
        ELSEIF bumpflb = 11 OR bumpblb = 1 THEN
                health = health - .33
                health2 = health2 - .33
        ELSEIF bumpbrb = 11 OR bumpblb = 1 THEN
                health = health - .33
                health2 = health2 - .33
        ELSEIF bumpblb = 11 OR bumpblb = 1 THEN
                health = health - .33
                health2 = health2 - .33
        END IF

END SUB

SUB p2coldet
'Player 2 Collision Detection
        bumpfra = POINT(carx2 + 2, cary2 + 2)
        bumpfla = POINT(carx2 + 7, cary2 + 2)
        bumpbra = POINT(carx2 + 2, cary2 + 13)
        bumpbla = POINT(carx2 + 7, cary2 + 13)
        IF bumpfra = 12 OR bumpfra = 4 OR bumpfra = 1 THEN health2 = health2 - .33
        IF bumpfla = 12 OR bumpfla = 4 OR bumpfla = 1 THEN health2 = health2 - .33
        IF bumpbra = 12 OR bumpbra = 4 OR bumpbra = 1 THEN health2 = health2 - .33
        IF bumpbla = 12 OR bumpbla = 4 OR bumpbla = 1 THEN health2 = health2 - .33

END SUB

SUB pedestrian

'The pedestrian
        IF manlive = 1 THEN
                PUT (manx, many), man, PSET
                walk = INT(RND * 2)
                IF walk = 1 THEN walk = -.5
                IF walk = 0 THEN walk = .5
                manx = manx + walk
                IF manx <= 105 THEN manx = 105
                IF manx >= 229 THEN manx = 229
        END IF
        IF manlive = 0 THEN
                PUT (manx, many), blood, PSET
        END IF
        many = many + 1
        IF many = 190 THEN
                LINE (manx, 189)-(manx + 11, 200), 8, BF
                many = 1
                manx = INT(RND * 125) + 105
                manlive = 1
        END IF
     
        mandol1 = POINT(manx + 4, many + 10)
        mandol2 = POINT(manx + 6, many + 10)

        IF mandol1 = 11 OR mandol2 = 11 THEN
                score2 = score2 + INT(RND * 5000)
                manlive = 0
        END IF
        IF mandol1 = 4 OR mandol2 = 4 THEN
                score = score + INT(RND * 5000)
                manlive = 0
        END IF
        IF mandol1 = 12 OR mandol2 = 12 THEN
                manlive = 0
        END IF

END SUB

SUB savescore
CLS
LOCATE 10, 10: PRINT "Enter your name: ": INPUT "", name$

CLS
PRINT name$, score
PRINT "Press any key to exit..."
DO
LOOP UNTIL INKEY$ <> ""

OPEN "name.dat" FOR INPUT AS #1
OPEN "score.dat" FOR INPUT AS #2

FOR x = 1 TO 10
        INPUT #1, oldname$(x)
        INPUT #2, oldscore(x)
NEXT x
oldname$(10) = name$
oldscore(10) = score

FOR y = 1 TO 10
        FOR x = 1 TO 9
                IF oldscore(x) < oldscore(x + 1) THEN
                        SWAP oldname$(x), oldname$(x + 1)
                        SWAP oldscore(x), oldscore(x + 1)
                END IF
        NEXT x
NEXT y

CLOSE #1, #2

OPEN "name.dat" FOR OUTPUT AS #1
OPEN "score.dat" FOR OUTPUT AS #2

FOR x = 1 TO 10
        PRINT #1, oldname$(x)
        PRINT #2, oldscore(x)
NEXT x

CLOSE #1, #2

CLS
CALL showscores
END SUB

SUB showscores
CLS

DIM name$(1 TO 10)
DIM score(1 TO 10)
OPEN "name.dat" FOR INPUT AS #1
OPEN "score.dat" FOR INPUT AS #2

FOR x = 1 TO 10
        INPUT #1, oldname$(x)
        name$(x) = oldname$(x)
        INPUT #2, oldscore(x)
        score(x) = oldscore(x)
NEXT x

PRINT "Name", "Score"
PRINT
FOR x = 1 TO 10
        PRINT oldname$(x), oldscore(x)
NEXT x

CLOSE #1, #2
FOR y = 1 TO 10
        FOR x = 1 TO 9
                IF name$(x) > name$(x + 1) THEN
                        SWAP name$(x), name$(x + 1)
                        SWAP score(x), score(x + 1)
                END IF
        NEXT x
NEXT y
PRINT
PRINT "Enter a name to search:"
INPUT "", search$
IF search$ = "" THEN EXIT SUB
PRINT
first = 1
last = 10

DO
        mid = INT((first + last) / 2)
       
        c = c + 1
        IF search$ = name$(mid) THEN
                flag = 1
                EXIT DO
        ELSEIF name$(mid) < search$ THEN
                first = mid + 1
        ELSEIF name$(mid) > search$ THEN
                last = mid - 1
        END IF
        IF c >= 10 THEN EXIT DO
LOOP UNTIL flag = 1

IF flag = 1 THEN
        PRINT "Match found"
        PRINT name$(mid), score(mid)
ELSE PRINT "match not found"
END IF



PRINT
PRINT "Press any key to continue..."
DO
LOOP UNTIL INKEY$ <> ""

END SUB

SUB speedcontroll
'speed controller
      
         IF speed >= 1.9 THEN speed = 1.9
         IF speed <= -1.9 THEN speed = -1.9
         IF kmh >= 240 THEN
                kmh = 240
                slow = 0
         END IF
         IF kmh <= 0 THEN
                DO
                        kmh = 1
                        start = INT(TIMER)
                LOOP UNTIL INKEY$ <> ""
         END IF
         FOR slower = 1 TO slow
         NEXT slower

END SUB

SUB variables
start = INT(TIMER)
aicar1x = INT(RND * 70) + 120
potx = INT(RND * 70) + 120
aicar1y = 180
health = 99
health2 = 99

manlive = 1
cary2 = 180
carx = 230
cary = 180
speed = .1
slow = 7000
kmh = 10
'score = -500
manx = INT(RND * 70) + 120

divy1 = 0
divy2 = 60
divy3 = 120
divy1a = 0
divy2a = 60
divy3a = 120
divy1b = 0
divy2b = 60
divy3b = 120
divy1c = 0
divy2c = 60
divy3c = 120

END SUB

SUB win
SCREEN 12

LOCATE 9, 19: PRINT winner$
LOCATE 10, 10: PRINT "You Are Winner, ha ha ha"
LOCATE 11, 10: PRINT "You Are Winner, ha ha ha"
LOCATE 12, 10: PRINT "Your score was"; score
LOCATE 14, 10: PRINT "Press x to quit"
FOR slow = 1 TO 300000
        key$ = INKEY$
        key$ = LCASE$(key$)
        IF key$ = "x" THEN EXIT FOR
NEXT slow

CLS

LOCATE 10, 10: PRINT "Would you like to save your score?":
LOCATE 12, 10: PRINT "y): yes please"
LOCATE 13, 10: PRINT "n): no, it's ok."
DO
        ans$ = INKEY$
        ans$ = LCASE$(ans$)
LOOP UNTIL ans$ <> ""

IF ans$ = "y" OR ans$ = "yes" THEN
        CALL savescore
ELSE CALL showscores
END IF

END SUB

