home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / basic / library / gwbasic / designer / demo.bas next >
Encoding:
BASIC Source File  |  1994-05-24  |  7.8 KB  |  156 lines

  1. 10000 REM *******************************************************************
  2. 10010 REM **         DEMO - Program to Demonstrate Animation               **
  3. 10020 REM **          Using Files Created by "The Designer"                **
  4. 10030 REM **  Copyright 1983, by Jan B. Young.  Permission is granted to   **
  5. 10040 REM **  all purchasers to copy and modify this program for non-      **
  6. 10050 REM **  commercial uses, providing the copyright notice is retained. **
  7. 10060 REM *******************************************************************
  8. 10070 KEY OFF
  9. 10080 REM *******************************************************************
  10. 10090 REM **              Put Introduction Panel on Screen                 **
  11. 10100 REM *******************************************************************
  12. 10110 SCREEN 1: COLOR 1, 1                'Clear screen
  13. 10120 LOCATE 6, 18: PRINT "T H E"
  14. 10130 LOCATE 8, 16: PRINT "M O U S E"
  15. 10140 LOCATE 16, 8: PRINT "An Animation Demonstration"
  16. 10150 LOCATE 18, 6: PRINT "Copyright 1983 by Jan B. Young"
  17. 10160 LOCATE 23, 8: PRINT "Press Any Key to Continue"
  18. 10170 X$ = INPUT$(1)
  19. 10180 REM *******************************************************************
  20. 10190 REM **              Get Sprite and Load in Matrix                    **
  21. 10200 REM *******************************************************************
  22. 10210 OPEN "MOUSE.SPR" FOR INPUT AS #1
  23. 10220 INPUT #1, RES, PAL, ARR, WID, HGHT   'Defines parameters for the mouse
  24. 10230 DIM MOUSE(ARR)
  25. 10240 FOR I = 0 TO ARR                     'Load mouse into array
  26. 10250 INPUT #1, J(0), J(1), J(2), J(3)
  27. 10260 P = VARPTR(MOUSE(I))
  28. 10270 FOR N = 0 TO 3
  29. 10280 POKE P + N, J(N)
  30. 10290 NEXT N
  31. 10300 NEXT I
  32. 10310 CLOSE #1
  33. 10320 REM *******************************************************************
  34. 10330 REM **               Put background on Screen                        **
  35. 10340 REM *******************************************************************
  36. 10350 OPEN "MAZE.RES" FOR INPUT AS #1
  37. 10360 INPUT #1, RES, BAK, PAL              'Defines parameters for maze
  38. 10370 CLOSE #1
  39. 10380 SCREEN RES: COLOR BAK, PAL: CLS      'Clear screen
  40. 10390 DEF SEG = &HB800                     'Locate screen buffer
  41. 10400 BLOAD "MAZE", 0                    'Put maze on screen
  42. 10410 DEF SEG
  43. 10420 REM *******************************************************************
  44. 10430 REM **                      Animate                                  **
  45. 10440 REM *******************************************************************
  46. 10450 HPOS = 7: VPOS = 4: HNEW = 7: VNEW = 4: DIR$ = "E"'Initial values
  47. 10460 T = VAL(MID$(TIME$, 4, 2)) * 100 + VAL(MID$(TIME$, 7, 2))
  48. 10470 RANDOMIZE T
  49. 10480 PUT (HPOS, VPOS), MOUSE                           'Put mouse on screen
  50. 10490 REM LINE (HPOS-5,VPOS-3)-(HPOS+18,VPOS+14),1,B    'Debugging only
  51. 10500 GOSUB 11250                               'Determines freedom to move
  52. 10510 REM LOCATE 20,20:PRINT NORTH:LOCATE 21,21:PRINT EAST:LOCATE 22,20:PRINT SOUTH:LOCATE 21,19:PRINT WEST:LOCATE 21,30:PRINT DIR$  'Delete REM for debugging
  53. 10520 IF DIR$ = "E" THEN GOTO 10570
  54. 10530 IF DIR$ = "N" THEN GOTO 10720           'DIR$ is direction of motion
  55. 10540 IF DIR$ = "S" THEN GOTO 10860
  56. 10550 IF DIR$ = "W" THEN GOTO 11020
  57. 10560 REM *** Now going east - logic selects next move ***
  58. 10570 IF EAST = 1 THEN GOTO 10630
  59. 10580 IF SOUTH = 1 THEN GOTO 10610       'Value East=1 means OK to go east
  60. 10590 IF NORTH = 1 THEN GOTO 11180      'Value East=0 means path east is blocked
  61. 10600 GOTO 11170                        'See GOTO line for direction chosen
  62. 10610 IF NORTH = 0 THEN 11200
  63. 10620 I = RND: IF I > .5 THEN 11200 ELSE 11180
  64. 10630 IF SOUTH = 1 THEN GOTO 10670
  65. 10640 IF NORTH = 1 THEN GOTO 10660
  66. 10650 GOTO 11190
  67. 10660 I = RND: IF I > .4 THEN 11190 ELSE 11180
  68. 10670 IF NORTH = 1 THEN GOTO 10690
  69. 10680 I = RND: IF I > .4 THEN 11190 ELSE 11200
  70. 10690 I = RND: IF I > .7 THEN 11200
  71. 10700 IF I > .4 THEN 11180 ELSE 11190
  72. 10710 REM *** Now going north- logic selects next move ***
  73. 10720 IF NORTH = 1 THEN GOTO 10780
  74. 10730 IF WEST = 1 THEN GOTO 10760
  75. 10740 IF EAST = 1 THEN GOTO 11190
  76. 10750 GOTO 11200
  77. 10760 IF EAST = 0 THEN 11170
  78. 10770 I = RND: IF I > .5 THEN 11190 ELSE 11170
  79. 10780 IF WEST = 1 THEN GOTO 10820
  80. 10790 IF EAST = 1 THEN GOTO 10810
  81. 10800 GOTO 11180
  82. 10810 I = RND: IF I > .4 THEN 11180 ELSE 11190
  83. 10820 IF EAST = 1 THEN GOTO 10840
  84. 10830 IF I > .4 THEN 11180 ELSE 11170
  85. 10840 I = RND: IF I > .6 THEN 11180
  86. 10850 I = RND: IF I > .3 THEN 11170 ELSE 11190
  87. 10860 REM *** Now going south- logic selects next move ***
  88. 10870 IF SOUTH = 1 THEN GOTO 10940
  89. 10880 IF WEST = 1 THEN GOTO 10910
  90. 10890 IF EAST = 1 THEN GOTO 11190
  91. 10900 GOTO 11180
  92. 10910 IF EAST = 0 THEN 11170
  93. 10920 I = RND: IF I > .5 THEN 11170 ELSE 11190
  94. 10930 IF I > .2 THEN 11170 ELSE 11180
  95. 10940 IF WEST = 1 THEN GOTO 10980
  96. 10950 IF EAST = 1 THEN GOTO 10970
  97. 10960 GOTO 11200
  98. 10970 I = RND: IF I > .4 THEN 11200 ELSE 11190
  99. 10980 IF EAST = 1 THEN GOTO 11000
  100. 10990 I = RND: IF I > .4 THEN 11200 ELSE 11170
  101. 11000 I = RND: IF I > .7 THEN 11190
  102. 11010 IF I > .4 THEN 11170 ELSE 11200
  103. 11020 REM *** Now going west- logic selects next move ***
  104. 11030 IF WEST = 1 THEN GOTO 11090
  105. 11040 IF NORTH = 1 THEN GOTO 11070
  106. 11050 IF SOUTH = 1 THEN GOTO 11200
  107. 11060 GOTO 11180
  108. 11070 IF SOUTH = 0 THEN 11180
  109. 11080 I = RND: IF I > .5 THEN 11200 ELSE 11180
  110. 11090 IF NORTH = 1 THEN GOTO 11130
  111. 11100 IF SOUTH = 1 THEN GOTO 11120
  112. 11110 GOTO 11170
  113. 11120 I = RND: IF I > .4 THEN 11170 ELSE 11200
  114. 11130 IF SOUTH = 1 THEN GOTO 11150
  115. 11140 I = RND: IF I > .4 THEN 11170 ELSE 11180
  116. 11150 I = RND: IF I > .7 THEN 11180
  117. 11160 IF I > .4 THEN 11200 ELSE 11170
  118. 11170 DIR$ = "W": HNEW = HNEW - 1: GOTO 11210'4 statements calculate next position
  119. 11180 DIR$ = "N": VNEW = VPOS - 1: GOTO 11210
  120. 11190 DIR$ = "E": HNEW = HPOS + 1: GOTO 11210
  121. 11200 DIR$ = "S": VNEW = VPOS + 1: GOTO 11210
  122. 11210 PUT (HPOS, VPOS), MOUSE            'remove mouse from old position
  123. 11220 REM LINE (HPOS-5,VPOS-3)-(HPOS+18,VPOS+14),0,B   'Debugging only
  124. 11230 HPOS = HNEW: VPOS = VNEW           'Change position
  125. 11240 GOTO 10480                           'Go back to start
  126. 11250 REM *******************************************************************
  127. 11260 REM **                 "Feel" for open paths                         **
  128. 11270 REM ** Note: Mouse occupies a box extending horizontally from        **
  129. 11280 REM ** HPOS-6 to HPOS+19 and vertically from VPOS-4 to VPOS+15       **
  130. 11290 REM *******************************************************************
  131. 11300 WHILE DIR$ = "E"
  132. 11310    IF POINT(HPOS + 18, VPOS - 4) = 0 AND POINT(HPOS + 19, VPOS - 4) <> 0 THEN NORTH = 1 ELSE NORTH = 0
  133. 11320    IF POINT(HPOS + 18, VPOS + 15) = 0 AND POINT(HPOS + 19, VPOS + 15) <> 0 THEN SOUTH = 1 ELSE SOUTH = 0
  134. 11330    IF POINT(HPOS + 19, VPOS + 6) = 0 THEN EAST = 1 ELSE EAST = 0
  135. 11340    RETURN
  136. 11350 WEND
  137. 11360 WHILE DIR$ = "W"
  138. 11370    IF POINT(HPOS - 5, VPOS - 4) = 0 AND POINT(HPOS - 6, VPOS - 4) <> 0 THEN NORTH = 1 ELSE NORTH = 0
  139. 11380    IF POINT(HPOS - 5, VPOS + 15) = 0 AND POINT(HPOS - 6, VPOS + 15) <> 0 THEN SOUTH = 1 ELSE SOUTH = 0
  140. 11390    IF POINT(HPOS - 6, VPOS + 6) = 0 THEN WEST = 1 ELSE WEST = 0
  141. 11400    RETURN
  142. 11410 WEND
  143. 11420 WHILE DIR$ = "N"
  144. 11430    IF POINT(HPOS - 6, VPOS - 3) = 0 AND POINT(HPOS - 6, VPOS - 4) <> 0 THEN WEST = 1 ELSE WEST = 0
  145. 11440    IF POINT(HPOS + 19, VPOS - 3) = 0 AND POINT(HPOS + 19, VPOS - 4) <> 0 THEN EAST = 1 ELSE EAST = 0
  146. 11450    IF POINT(HPOS + 6, VPOS - 4) = 0 THEN NORTH = 1 ELSE NORTH = 0
  147. 11460    RETURN
  148. 11470 WEND
  149. 11480 WHILE DIR$ = "S"
  150. 11490    IF POINT(HPOS - 6, VPOS + 14) = 0 AND POINT(HPOS - 6, VPOS + 15) <> 0 THEN WEST = 1 ELSE WEST = 0
  151. 11500    IF POINT(HPOS + 19, VPOS + 14) = 0 AND POINT(HPOS + 19, VPOS + 15) <> 0 THEN EAST = 1 ELSE EAST = 0
  152. 11510    IF POINT(HPOS + 5, VPOS + 15) = 0 THEN SOUTH = 1 ELSE SOUTH = 0
  153. 11520    RETURN
  154. 11530 WEND
  155.  
  156.