'===========================================================================
' Subject: 3D-LIKE GAME (DEMO ONLY)           Date: 07-25-99 (11:59)       
'  Author: Marc Santa                         Code: QB, QBasic, PDS        
'  Origin: santa@tir.com                    Packet: DEMOS.ABC
'===========================================================================
'  Here's the 3D corridor.  See if you can make it into a proper maze.
'
'                            
'                           Ŀ     
'                                      
'                                      
'                              Ŀ       
'                                     
'       TH                  
'                                  HiT <F5> NOW
'         DiGiTiZ                     
'                                               KS
'                                              Q = Quit
'                                             Arrow keys = Move
'                                    \                 A = Look up
'                                                      Z = Look down
'                                                         C = Center view
'                                Q  A S I C              + = run faster
'                                                         - = run slower

                     '   *** initilize variables ***

SCREEN 13 'screen mode

  j = -10
  speed = 5   'start speed
  sector = 1  'start sector
  '             *** start position ***
                      x = 141   ' facing right/left
                      y = 75    ' looking up/down
                      B = 22    ' distance along corridoor

  VIEW (0, 0)-(300, 150)   ' setup screen coordinates



        '                   *************
GO:     '                   *** start ***
        '                   *************
  vario = INT(speed / 2)
  IF a$ <> "" THEN CLS 'clear screen.   smaller = faster
  a$ = INKEY$                                      '********** keys ********
  IF a$ = CHR$(0) + "K" THEN x = x + speed         '** left               **
  IF a$ = CHR$(0) + "M" THEN x = x - speed         '** right              **
  IF a$ = "a" OR a$ = "A" THEN y = y + speed       '** look up            **
  IF a$ = "z" OR a$ = "Z" THEN y = y - speed       '** look down          **
  IF a$ = "s" OR a$ = "S" THEN j = j + 1           '** look up            **
  IF a$ = "x" OR a$ = "X" THEN j = j - 1           '** look down          **
  IF a$ = "=" THEN speed = speed + 1               '** run faster         **
  IF a$ = "-" THEN speed = speed - 1               '** run slower         **
  IF a$ = "c" OR a$ = "C" THEN y = 75              '** center view        **
  IF a$ = CHR$(0) + "H" THEN B = B + vario         '** walk forward       **
  IF a$ = CHR$(0) + "P" THEN B = B - vario         '** walk backward      **
  IF a$ = "q" OR a$ = "Q" THEN END                 '** quit               **
  t = y - B             'debug line                '************************
  IF t < 1 THEN t = 1   'ditto
  IF B < 1 THEN B = 1   'ditto
  IF B > 60 THEN B = 60  ' distance of corridoor
 
  IF speed < 2 THEN speed = 2   'debug line
  IF speed > 100 THEN speed = 100
  IF vario < 1 THEN vario = 1

  IF x > 410 AND sector = 1 THEN x = -52: B = 60 - B: sector = 2 'code to make
  IF x > 410 AND sector = 2 THEN x = -52: B = 60 - B: sector = 1 'you turn
                                                                 'round +
  IF x < -53 AND sector = 1 THEN x = 409: B = 60 - B: sector = 2 'change
  IF x < -53 AND sector = 2 THEN x = 409: B = 60 - B: sector = 1 'sector.

  IF j > 15 THEN j = 15
  IF j < -14 THEN j = -14

 
GOSUB DR       'goto draw screen and come back after
GOTO GO        'goto start

        '                 *******************
DR:     '                 *** draw screen ***
        '                 *******************

  IF sector = 1 THEN endwall = 6
  IF sector = 2 THEN endwall = 1

  LINE (x - B + 1, y - B + 1)-(x + B - 1, y + B - 1), endwall, BF'draw end wall
  LINE (x - B, y - B)-(x + B, y + B), 15, B  'draw end wall

  LINE (1, j)-(x - B, y - B), 15             'draw walls
  LINE (1, 149 + j)-(x - B, y + B), 15
  LINE (299, j)-(x + B, y - B), 15
  LINE (299, 149 + j)-(x + B, y + B), 15

                                               

  LINE (0, 0)-(300, 150), 15, B            'draw border
                                                  
'  IF y <= 127 THEN PAINT (148, 149), 25, 15  'floor colour
'  IF y >= 26 THEN PAINT (148, 1), 8, 15      'ceiling colour

  LOCATE 20, 2                   ' print variables
  COLOR 32
  PRINT "x"; x; "y"; y; "dist"; B; "SECTOR"; sector; "speed"; speed
  LOCATE 21, 2
  PRINT " j"; j

  RETURN  ' go back
