home *** CD-ROM | disk | FTP | other *** search
/ Aztec Shareware Collection / SIMULATION.ISO / skiing / ski.bas < prev    next >
BASIC Source File  |  1988-08-03  |  4KB  |  126 lines

  1. 'Tree Masacre - Copyright 1988 by Mark Botta
  2. 'Written 6/88 using Microsoft QuickBASIC v4.00
  3. '
  4. 'Requires EGA adapter
  5. '
  6. 'Level is the number of trees on the screen at once (The higer Level is the
  7. 'more difficult the game).  This number cannot exceed Tree.max.  Level can be
  8. 'modified durring game play, but Tree.max should not be.
  9.  
  10.  
  11. SCREEN 9                                           'Change to EGA high-res
  12.  
  13. CONST Size = 1000                                  'Size of graphics arrays
  14. CONST Left = 1                                     'Graphic array
  15. CONST Strt = Size + 1                              '   position of
  16. CONST Right = 2 * Size + 1                         '      skiier images
  17. CONST Tree.max = 7                                 'Max number of trees
  18.  
  19. Level = Tree.max                                   'Max num of trees on screen
  20.                                                    '   at once
  21. High = 0                                           'Init high score
  22.  
  23.  
  24. DIM Tree(1 TO Size), Man(1 TO Size * 3), Blank(1 TO Size)
  25. DIM Tree.pos(Tree.max), Down(Tree.max)
  26.  
  27.  
  28. '-- LOAD FROM FILES TO THE ARRAYS --
  29.  
  30. DEF SEG = VARSEG(Blank(1))
  31. BLOAD "BLANK.IMG", VARPTR(Blank(1))
  32.  
  33. DEF SEG = VARSEG(Tree(1))
  34. BLOAD "TREE.IMG", VARPTR(Tree(1))
  35.  
  36. DEF SEG = VARSEG(Man(Left))
  37. BLOAD "GUYL.IMG", VARPTR(Man(Left))
  38.  
  39. DEF SEG = VARSEG(Man(Strt))
  40. BLOAD "GUY.IMG", VARPTR(Man(Strt))
  41.  
  42. DEF SEG = VARSEG(Man(Right))
  43. BLOAD "GUYR.IMG", VARPTR(Man(Right))
  44. DEF SEG
  45.  
  46.  
  47.  
  48. START:
  49.  
  50. CLS
  51. LINE (0, 0)-(205, 349), 1, BF
  52. LINE (445, 0)-(639, 349), 1, BF
  53.  
  54. LOCATE 1, 3: PRINT "(C) 1988 By Mark Botta"
  55. LOCATE 13, 5: PRINT "TREE MASACRE"
  56. LOCATE 14, 5: PRINT "By Mark Botta"
  57. LOCATE 23, 5: PRINT "ESC to Quit"
  58.  
  59.  
  60. '-- Initialize variables --
  61.  
  62. dX = 0                                             'Initial distance incrament
  63. X = 320                                            'Initial man position
  64. Dir = Strt                                         'Initial dir (straight)
  65. Score = 0                                          'Current game score
  66.  
  67. FOR Trees = 1 TO Tree.max
  68.    Down(Trees) = -1
  69. NEXT Trees
  70.  
  71.  
  72. '-- Main loop --
  73.  
  74. DO
  75.    LOCATE 13, 60: PRINT "Score: "; Score
  76.    LOCATE 1, 60: PRINT "High Score: "; High
  77.  
  78.    PUT (X, 270), Man(Dir), PSET                    'Put man in new loc.
  79.  
  80.    FOR Trees = 1 TO Level
  81.       IF Down(Trees) > -1 THEN                     'If tree is on screen
  82.          Down(Trees) = Down(Trees) + 10            'Incrament tree movement
  83.          PUT (Tree.pos(Trees), Down(Trees)), Tree, PSET
  84.  
  85.          IF Down(Trees) = 310 THEN                 'End of screen
  86.             PUT (Tree.pos(Trees), Down(Trees)), Blank, PSET
  87.             Down(Trees) = -1                       'Toggle to off-screen
  88.  
  89.          ELSEIF (Down(Trees) = 250) THEN           'Check for impact or score
  90.             IF (X > Tree.pos(Trees) - 17) AND (X < Tree.pos(Trees) + 20) THEN
  91.                Score = 0
  92.                LOCATE 2, 37: PRINT "BLAMMO!"
  93.                SOUND 37, 5
  94.                FOR Delay = 1 TO 1000: NEXT Delay
  95.                GOTO START
  96.  
  97.             ELSE
  98.                Score = Score + 1
  99.                IF Score > High THEN High = Score
  100.             END IF
  101.          END IF
  102.  
  103.       ELSEIF (INT(RND * 10) < 2) THEN
  104.          Down(Trees) = 0                           'Toggle to on-screen status
  105.          Tree.pos(Trees) = INT(191 * RND) + 210    'Random pos. within bounds
  106.       END IF
  107.    NEXT Trees
  108.  
  109.    Pressed$ = INKEY$
  110.    SELECT CASE Pressed$
  111.       CASE "4":                                    'Left
  112.          Dir = Left: dX = -5
  113.       CASE "5":                                    'Straight
  114.          Dir = Strt: dX = 0
  115.       CASE "6":                                    'Right
  116.          Dir = Right: dX = 5
  117.       CASE ELSE
  118.    END SELECT
  119.  
  120.    X = X + dX                                      'Incrament man's location
  121.    IF X = 205 THEN X = 210                         'Limit left border
  122.    IF X = 405 THEN X = 400                         'Limit right border
  123.  
  124. LOOP UNTIL Pressed$ = CHR$(27)                     'Exit when ESC is pressed
  125.  
  126.