'===========================================================================
' Subject: GNOME WALK                         Date: 07-25-99 (11:59)       
'  Author: Neil Marshall                      Code: QB, QBasic, PDS        
'  Origin: santa@tir.com                    Packet: DEMOS.ABC
'===========================================================================
          '*********************************************
          '* Gnome Walk                                *
          '* Programmed by Neil Marshall               *
          '*********************************************
          
          DECLARE SUB drawlevel ()
          DEFINT A-Z
          'Change to screen 9 (640x480x16 Colors, 2 Flip Screens)
          SCREEN 9

          'Define the Graphical arrays
          DIM gnome4(900), gnome3(900), gnome2(900), gnome1(900) 'Gnome
          DIM mask4(900), mask3(900), mask2(900), mask1(900)     'Masks

          GOSUB getgnomes 'Draw and Grab the gnomes and masks from the end of this file

          LOCATE 25, 1: PRINT "Press a key to start...";
          WHILE INKEY$ = "": WEND 'Wait for a key press

          y = 100 'Set the Y Co-ord
          x = 10  'Set the X Co-ord
          d$ = "Right" 'Set the direction

     DO  'The main loop
      a$ = INKEY$ 'Get any key presses
      IF a$ = "6" THEN d$ = "Right" 'If they pressed 6 then change the direction
      IF a$ = "4" THEN d$ = "Left"  'If they pressed 4 then change the direction
      IF UCASE$(a$) = "Q" THEN END  'End the program
      IF d$ = "Right" THEN x = x + 10 'if the direction is Right than move the character 10 pixels to the right
      IF d$ = "Left" THEN x = x - 10 'if the direction is Left than move the character 10 pixels to the Left
      IF x < 1 THEN x = 1 'If they hit the wall then keep them there
      IF x > 600 THEN x = 600 'If they hit the wall then keep them there

      fm = 1 - fm 'Change the frame (0 or 1)

      IF d$ = "Right" THEN
       IF fm = 1 THEN

        pg = 1 - pg            'Change the screen #
        SCREEN 9, , pg, 1 - pg 'Flip the screens
        WAIT &H3DA, 8 'Wait for the electron beam :)
        CLS
        drawlevel 'Draw the bars for the background

        PUT (x, y), mask4, AND  'paint the mask
        PUT (x, y), gnome4, XOR 'paint paint the gnome onto the mask

        GOSUB waitt           'Wait for .1 of a second


       ELSE

        pg = 1 - pg
        SCREEN 9, , pg, 1 - pg
        WAIT &H3DA, 8
        CLS
        drawlevel

        PUT (x + 1, y), mask3, AND
        PUT (x + 1, y), gnome3, XOR

        GOSUB waitt

       END IF

      ELSE

       IF fm = 1 THEN

        pg = 1 - pg
        SCREEN 9, , pg, 1 - pg
        WAIT &H3DA, 8
        CLS
        drawlevel


        PUT (x, y), mask2, AND
        PUT (x, y), gnome2, XOR


        GOSUB waitt

       ELSE

        pg = 1 - pg
        SCREEN 9, , pg, 1 - pg
        WAIT &H3DA, 8
        CLS
        drawlevel

        PUT (x + 1, y), mask1, AND
        PUT (x + 1, y), gnome1, XOR

        GOSUB waitt
       END IF

      END IF

     LOOP

     END

     ''''''''''''''''''''''''
getgnomes:

     'GOSUB background
     'gnome1


       x = 100: y = 200
       CIRCLE (x + 5, y + 3), 5, 7: PAINT (x + 5, y + 3), 7, 7
       PSET (x + 2, y + 3), 0
       LINE (x + 12, y + 2)-(x + 3, y - 2), 12
       LINE -(x + 12, y - 10), 12: LINE -(x + 12, y + 2), 12
       PAINT (x + 8, y - 2), 12, 12
       CIRCLE (x + 5, y + 16), 9, 14, , , 5 / 3
       PAINT (x + 5, y + 16), 14, 14
       LINE (x + 9, y + 10)-(x + 14, y + 14), 14
       LINE -(x + 15, y + 19), 14
       LINE -(x + 13, y + 19), 14
       LINE -(x + 11, y + 14), 14
       PAINT (x + 13, y + 17), 14, 14

       LINE (x + 2, y + 11)-(x - 1, y + 15), 14
       LINE -(x - 5, y + 19), 14
       LINE -(x - 6, y + 17), 14
       LINE -(x - 4, y + 15), 14
       LINE -(x, y + 11), 14
       PAINT (x - 2, y + 14), 14, 14
       LINE (x + 11, y + 19)-(x, y + 19), 9
       LINE -(x - 3, y + 30), 9
       LINE -(x - 4, y + 33), 9
       LINE -(x - 2, y + 33), 9
       LINE -(x + 3, y + 28), 9
       LINE -(x, y + 25), 9
       LINE -(x + 7, y + 28), 9
       LINE -(x + 12, y + 33), 9
       LINE -(x + 14, y + 30), 9
       LINE -(x + 9, y + 25), 9
       LINE -(x + 11, y + 19), 9
       PAINT (x + 2, y + 21), 9, 9
       PAINT (x, y + 28), 9, 9
       LINE (x - 3, y + 33)-(x - 5, y + 35), 6, BF
       LINE (x - 5, y + 33)-(x - 7, y + 31), 6, BF
       LINE (x + 17, y + 31)-(x + 15, y + 33), 6, BF
       LINE (x + 15, y + 34)-(x + 9, y + 35), 6, BF
       GET (x - 8, y - 10)-(x + 17, y + 37), gnome1
       'LINE (x - 9, y - 11)-(x + 18, y + 38), 7, B

     'gnome2
       x = 200
       CIRCLE (x + 5, y + 3), 5, 7: PAINT (x + 5, y + 3), 7, 7
       PSET (x + 2, y + 3), 0
       LINE (x + 12, y + 2)-(x + 3, y - 2), 12
       LINE -(x + 12, y - 10), 12: LINE -(x + 12, y + 2), 12
       PAINT (x + 8, y - 2), 12, 12
       CIRCLE (x + 5, y + 16), 9, 14, , , 5 / 3
       PAINT (x + 5, y + 16), 14, 14
       LINE (x + 10, y + 19)-(x - 1, y + 19), 9
       LINE -(x + 1, y + 25), 9: LINE -(x + 4, y + 25), 9
       LINE -(x + 3, y + 30), 9
       LINE -(x + 4, y + 35), 9
       LINE -(x + 6, y + 35), 9
       LINE -(x + 6, y + 30), 9
       LINE -(x + 7, y + 25), 9
       LINE -(x + 10, y + 22), 9
       LINE -(x + 10, y + 19), 9
       PAINT (x + 5, y + 21), 9, 9
       LINE (x + 5, y + 11)-(x + 7, y + 21), 14, BF
       LINE (x + 7, y + 35)-(x + 2, y + 37), 6, BF
       GET (x - 7, y - 10)-(x + 17, y + 37), gnome2
     '  LINE (x - 8, y - 11)-(x + 18, y + 38), 7, B

     'third gnome
       x = 300: y = 200
       CIRCLE (x + 5, y + 3), 5, 7: PAINT (x + 5, y + 3), 7, 7
       PSET (x + 8, y + 3), 0
       LINE (x - 2, y + 2)-(x + 7, y - 2), 12
       LINE -(x - 2, y - 10), 12: LINE -(x - 2, y + 2), 12
       PAINT (x + 2, y - 2), 12, 12
       CIRCLE (x + 5, y + 16), 9, 14, , , 5 / 3
       PAINT (x + 5, y + 16), 14, 14
       LINE (x, y + 19)-(x + 10, y + 19), 9
       LINE -(x + 8, y + 25), 9: LINE -(x + 7, y + 25), 9
       LINE -(x + 8, y + 30), 9
       LINE -(x + 7, y + 35), 9
       LINE -(x + 4, y + 35), 9
       LINE -(x + 5, y + 30), 9
       LINE -(x + 3, y + 25), 9
       LINE -(x + 0, y + 22), 9
       LINE -(x + 0, y + 19), 9
       PAINT (x + 5, y + 21), 9, 9
       LINE (x + 5, y + 11)-(x + 7, y + 21), 14, BF
       LINE (x + 3, y + 35)-(x + 8, y + 37), 6, BF
       GET (x - 7, y - 10)-(x + 17, y + 37), gnome3

     'gnome4
       x = 400: y = 200
       CIRCLE (x + 5, y + 3), 5, 7: PAINT (x + 5, y + 3), 7, 7
       PSET (x + 8, y + 3), 0
       LINE (x - 2, y + 2)-(x + 7, y - 2), 12
       LINE -(x - 2, y - 10), 12: LINE -(x - 2, y + 2), 12
       PAINT (x + 2, y - 2), 12, 12
       CIRCLE (x + 5, y + 16), 9, 14, , , 5 / 3
       PAINT (x + 5, y + 16), 14, 14
       LINE (x + 1, y + 10)-(x - 4, y + 14), 14
       LINE -(x - 5, y + 19), 14
       LINE -(x - 3, y + 19), 14
       LINE -(x - 1, y + 14), 14
       PAINT (x - 1, y + 12), 14, 14
       LINE (x + 8, y + 11)-(x + 11, y + 15), 14
       LINE -(x + 15, y + 19), 14
       LINE -(x + 16, y + 17), 14
       LINE -(x + 14, y + 15), 14
       LINE -(x + 10, y + 11), 14
       PAINT (x + 12, y + 14), 14, 14
       LINE (x - 1, y + 19)-(x + 10, y + 19), 9
       LINE -(x + 13, y + 30), 9
       LINE -(x + 14, y + 33), 9
       LINE -(x + 12, y + 33), 9
       LINE -(x + 7, y + 28), 9
       LINE -(x + 5, y + 25), 9
       LINE -(x + 3, y + 28), 9
       LINE -(x - 2, y + 33), 9
       LINE -(x - 4, y + 30), 9
       LINE -(x + 1, y + 25), 9
       LINE -(x - 1, y + 19), 9
       PAINT (x + 5, y + 21), 9, 9
       LINE (x + 13, y + 33)-(x + 15, y + 35), 6, BF
       LINE (x + 15, y + 33)-(x + 17, y + 31), 6, BF
       LINE (x - 7, y + 31)-(x - 5, y + 33), 6, BF
       LINE (x - 5, y + 34)-(x + 1, y + 35), 6, BF
       GET (x - 8, y - 10)-(x + 17, y + 37), gnome4

     'fifth gnome
       x = 500: y = 200
       CIRCLE (x + 5, y + 3), 5, 7: PAINT (x + 5, y + 3), 7, 7
       PSET (x + 4, y + 3), 0: PSET (x + 8, y + 3), 0
       LINE (x + 2, y + 0)-(x + 8, y), 12
       LINE -(x + 5, y - 10), 12: LINE -(x + 0, y), 12
       PAINT (x + 5, y - 2), 12, 12
       CIRCLE (x + 5, y + 16), 9, 14, , , 3 / 2
       PAINT (x + 5, y + 16), 14, 14
       LINE (x, y + 19)-(x + 10, y + 19), 9
       LINE -(x + 12, y + 35), 9: LINE -(x + 6, y + 25), 9
       LINE -(x + 4, y + 25), 9: LINE -(x - 2, y + 35), 9
       LINE -(x, y + 19), 9: PAINT (x + 5, y + 20), 9, 9
       LINE (x + 11, y + 35)-(x + 16, y + 37), 6, BF
       LINE (x - 1, y + 35)-(x - 6, y + 37), 6, BF
       LINE (x - 1, y + 8)-(x + 11, y + 8), 14
       LINE -(x + 16, y + 14), 14: LINE -(x + 12, y + 20), 14
       LINE (x + 11, y + 11)-(x + 13, y + 14), 14
       LINE -(x + 12, y + 20), 14
       PAINT (x + 15, y + 14), 14
       LINE (x - 2, y + 8)-(x - 7, y + 14), 14: LINE -(x - 3, y + 20), 14
       LINE -(x - 2, y + 18), 14
       LINE -(x - 4, y + 14), 14' LINE -(x-3, y+14), 14
       LINE -(x + 1, y + 12), 14: LINE -(x - 2, y + 8), 14
       PAINT (x - 3, y + 11), 14, 14
       LINE (x - 5, y + 14)-(x - 2, y + 20), 14
       LINE (x - 6, y + 14)-(x - 3, y + 20), 14
       PSET (x - 5, y + 13), 14
       LINE (x + 2, y + 19)-(x + 1, y + 8), 9: LINE (x + 8, y + 19)-(x + 9, y + 8), 9
     ' GET (x - 7, y - 10)-(x + 17, y + 37), gnome5

     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''



       x = 100: y = 100
       LINE (x - 8, y - 10)-(x + 17, y + 37), 15, BF
       CIRCLE (x + 5, y + 3), 5, 0: PAINT (x + 7, y + 5), 0, 0
       PSET (x + 2, y + 3), 0
       LINE (x + 12, y + 2)-(x + 3, y - 2), 0
       LINE -(x + 12, y - 10), 0: LINE -(x + 12, y + 2), 0
       PAINT (x + 8, y - 2), 0, 0
       CIRCLE (x + 5, y + 16), 9, 0, , , 5 / 3
       PAINT (x + 5, y + 16), 0, 0
       LINE (x + 9, y + 10)-(x + 14, y + 14), 0
       LINE -(x + 15, y + 19), 0
       LINE -(x + 13, y + 19), 0
       LINE -(x + 11, y + 14), 0
       PAINT (x + 13, y + 17), 0, 0

       LINE (x + 2, y + 11)-(x - 1, y + 15), 0
       LINE -(x - 5, y + 19), 0
       LINE -(x - 6, y + 17), 0
       LINE -(x - 4, y + 15), 0
       LINE -(x, y + 11), 0
       PAINT (x - 2, y + 14), 0, 0
       LINE (x + 11, y + 19)-(x, y + 19), 0
       LINE -(x - 3, y + 30), 0
       LINE -(x - 4, y + 33), 0
       LINE -(x - 2, y + 33), 0
       LINE -(x + 3, y + 28), 0
       LINE -(x, y + 25), 0
       LINE -(x + 7, y + 28), 0
       LINE -(x + 12, y + 33), 0
       LINE -(x + 14, y + 30), 0
       LINE -(x + 9, y + 25), 0
       LINE -(x + 11, y + 19), 0
       PAINT (x + 3, y + 25), 0, 0
       PAINT (x, y + 26), 0, 0
       LINE (x - 3, y + 33)-(x - 5, y + 35), 0, BF
       LINE (x - 5, y + 33)-(x - 7, y + 31), 0, BF
       LINE (x + 17, y + 31)-(x + 15, y + 33), 0, BF
       LINE (x + 15, y + 34)-(x + 9, y + 35), 0, BF
       GET (x - 8, y - 10)-(x + 17, y + 37), mask1


     'gnome2
       x = 200
       LINE (x - 7, y - 10)-(x + 17, y + 37), 15, BF
       CIRCLE (x + 5, y + 3), 5, 0: PAINT (x + 5, y + 3), 0, 0
       PSET (x + 2, y + 3), 0
       LINE (x + 12, y + 2)-(x + 3, y - 2), 0
       LINE -(x + 12, y - 10), 0: LINE -(x + 12, y + 2), 0
       PAINT (x + 8, y - 2), 0, 0
       CIRCLE (x + 5, y + 16), 9, 0, , , 5 / 3
       PAINT (x + 5, y + 16), 0, 0
       LINE (x + 10, y + 19)-(x - 1, y + 19), 0
       LINE -(x + 1, y + 25), 0: LINE -(x + 4, y + 25), 0
       LINE -(x + 3, y + 30), 0
       LINE -(x + 4, y + 35), 0
       LINE -(x + 6, y + 35), 0
       LINE -(x + 6, y + 30), 0
       LINE -(x + 7, y + 25), 0
       LINE -(x + 10, y + 22), 0
       LINE -(x + 10, y + 19), 0
       PAINT (x + 4, y + 30), 0, 0
       LINE (x + 5, y + 11)-(x + 7, y + 21), 0, BF
       LINE (x + 7, y + 35)-(x + 2, y + 37), 0, BF
       GET (x - 7, y - 10)-(x + 17, y + 37), mask2

     'third gnome
       x = 300
       LINE (x - 7, y - 10)-(x + 17, y + 37), 15, BF

       CIRCLE (x + 5, y + 3), 5, 0: PAINT (x + 5, y + 3), 0, 0

       PSET (x + 8, y + 3), 0
       LINE (x - 2, y + 2)-(x + 7, y - 2), 0
       LINE -(x - 2, y - 10), 0: LINE -(x - 2, y + 2), 0
       PAINT (x + 2, y - 2), 0, 0

       CIRCLE (x + 5, y + 16), 9, 0, , , 5 / 3

       PAINT (x + 5, y + 16), 0, 0
       LINE (x, y + 19)-(x + 10, y + 19), 0
       LINE -(x + 8, y + 25), 0: LINE -(x + 7, y + 25), 0
       LINE -(x + 8, y + 30), 0
       LINE -(x + 7, y + 35), 0
       LINE -(x + 4, y + 35), 0
       LINE -(x + 5, y + 30), 0
       LINE -(x + 3, y + 25), 0
       LINE -(x + 0, y + 22), 0
       LINE -(x + 0, y + 19), 0
       PAINT (x + 6, y + 30), 0, 0
       LINE (x + 5, y + 11)-(x + 7, y + 21), 0, BF
       LINE (x + 3, y + 35)-(x + 8, y + 37), 0, BF
       GET (x - 7, y - 10)-(x + 17, y + 37), mask3

     'gnome4
       x = 400
       LINE (x - 8, y - 10)-(x + 17, y + 37), 15, BF
       CIRCLE (x + 5, y + 3), 5, 0: PAINT (x + 5, y + 3), 0, 0
       PSET (x + 8, y + 3), 0
       LINE (x - 2, y + 2)-(x + 7, y - 2), 0
       LINE -(x - 2, y - 10), 0: LINE -(x - 2, y + 2), 0
       PAINT (x + 2, y - 2), 0, 0
       CIRCLE (x + 5, y + 16), 9, 0, , , 5 / 3
       PAINT (x + 5, y + 16), 0, 0
       LINE (x + 1, y + 10)-(x - 4, y + 14), 0
       LINE -(x - 5, y + 19), 0
       LINE -(x - 3, y + 19), 0
       LINE -(x - 1, y + 14), 0
       PAINT (x - 1, y + 12), 0, 0
       LINE (x + 8, y + 11)-(x + 11, y + 15), 0
       LINE -(x + 15, y + 19), 0
       LINE -(x + 16, y + 17), 0
       LINE -(x + 14, y + 15), 0
       LINE -(x + 10, y + 11), 0
       PAINT (x + 12, y + 14), 0, 0
       LINE (x - 1, y + 19)-(x + 10, y + 19), 0
       LINE -(x + 13, y + 30), 0
       LINE -(x + 14, y + 33), 0
       LINE -(x + 12, y + 33), 0
       LINE -(x + 7, y + 28), 0
       LINE -(x + 5, y + 25), 0
       LINE -(x + 3, y + 28), 0
       LINE -(x - 2, y + 33), 0
       LINE -(x - 4, y + 30), 0
       LINE -(x + 1, y + 25), 0
       LINE -(x - 1, y + 19), 0
       PAINT (x + 8, y + 24), 0, 0
       PAINT (x + 2, y + 24), 0, 0
       LINE (x + 13, y + 33)-(x + 15, y + 35), 0, BF
       LINE (x + 15, y + 33)-(x + 17, y + 31), 0, BF
       LINE (x - 7, y + 31)-(x - 5, y + 33), 0, BF
       LINE (x - 5, y + 34)-(x + 1, y + 35), 0, BF
       GET (x - 8, y - 10)-(x + 17, y + 37), mask4

     RETURN
waitt:
       T! = TIMER
       DO UNTIL TIMER > T! + .1
       LOOP
       RETURN


'[Image]
'| Back |

     SUB drawlevel
       LINE (1, 100)-(649, 100), 2
       LINE (1, 147)-(649, 147), 2
       FOR i = 1 TO 640 STEP 25
         LINE (i, 1)-(i + 2, 200), 3, BF
       NEXT
     END SUB

