home *** CD-ROM | disk | FTP | other *** search
/ 300 Favorite Games / 300GAMES.iso / 204 / side.prg < prev    next >
Text File  |  1995-08-14  |  5KB  |  209 lines

  1. #############################################################################
  2. #                                 SIDE LINER                                #
  3. #                                                                           #
  4. # This is a general purpose robot that demonstrates may basic techniques.   #
  5. # It also demonstractes an advanced technique using the Blocking() command. #
  6. # This robot moves up and down the right wall. Its main goal it to never    #
  7. # stop moving.                                                              #
  8. #                                                                           #
  9. #############################################################################
  10.  
  11.  
  12. Init
  13. {
  14.     name( "Side Liner" )
  15.     
  16.     # Move slowly so we miss less while scanning
  17.     SetAccel( 1 )
  18.  
  19.     # Register the events this robot will respond to
  20.     RegCore( Core )
  21.  
  22.     # Register the robot detection handler for "travel mode"
  23.     RegDtcRobot( TrvFoundRobot, 1 )
  24.     RegDtcCookie( FoundCookie, 3 )
  25.     RegDtcMine( FoundMine, 4 )
  26.     RegAScan( AutoScan, 5 )
  27.     
  28.     # Turn everything together
  29.     LockAll( ON )
  30.     BodyRight( 90 )
  31.     
  32.     # Move to the wall (hitting walls causes no damage)
  33.     Ahead( 400 )
  34.     
  35.     # Prepare for Core execution
  36.     BodyLeft( 90 )
  37.     
  38.     # From now on, just move the gun and radar together
  39.     LockAll( OFF )
  40.     LockGun( ON )
  41.  
  42.     # Didn't want to respond to damage until we are along the wall
  43.     RegCldMissile( Damage, 2 )
  44.     RegCldRobot( Damage, 2 )
  45.  
  46.     # Register the robot detection handler for "side mode"
  47.     RegDtcRobot( SideFoundRobot, 1 )
  48. }
  49.  
  50. Core
  51. {
  52.     # At this point we should be on right wall facing up
  53.     # The movedist variable is set during call to ScanPath
  54.  
  55.     Gosub( ScanPath )
  56.     GunLeft( 90 )
  57.     MovingUp = TRUE
  58.     Ahead( movedist )
  59.     
  60.     # Reached top, turn around
  61.     # The movedist variable is set during call to ScanPath
  62.  
  63.     GunLeft( 90 )
  64.     Gosub( ScanPath )
  65.     GunRight( 90 )
  66.     MovingUp = FALSE
  67.     Back( movedist )
  68.     
  69.     # Reached bottom, turn around
  70.     GunRight( 90 )
  71. }  
  72.  
  73. # This section handles scans in the direction
  74. # we will soon be traveling (i.e. our path)
  75.  
  76. ScanPath
  77. {
  78.     # Turn off cookie-events because our handler section shots them
  79.     # Turn on our mine-events because our handle section shots them
  80.  
  81.     DtcCookieEvents( OFF )
  82.     DtcMineEvents( ON )
  83.     
  84.     Scan( )
  85.     
  86.     # We don't really need a new event handler, just check if we detected
  87.     # a cookie. If so, we want to move a little further than its distance.
  88.  
  89.     if( dtccookie )
  90.         movedist = scandist + 5
  91.     else
  92.         movedist = scandist    
  93.     endif
  94.     
  95.  
  96.     # Switch the event handlers for normal scanning. Normal scanning
  97.     # is when scan into parts of the field not in our path.
  98.  
  99.     DtcMineEvents( OFF )
  100.     DtcCookieEvents( ON )
  101. }
  102.  
  103. AutoScan
  104. {
  105.     Scan()
  106. }
  107.  
  108. Damage
  109. {    
  110.     # The MovingUp variable is set in 'Core'. This allows us to
  111.     # keep track of the direct we were traveling (i.e. our state)
  112.  
  113.     if( MovingUp )
  114.         Back( 70 )
  115.     else
  116.         Ahead( 70 )
  117.     endif
  118. }
  119.  
  120. SideFoundRobot
  121. {
  122.     Gosub( fire )
  123.         
  124.     # Many robots will call scan here, but we want to 
  125.     # keep moving. Just fire once, then move along.
  126. }
  127.  
  128. # This section is used while traveling to the side
  129. # If another is detected, stop, fire until gone,
  130. # then finish moving to the wall
  131.  
  132. TrvFoundRobot
  133. {
  134.     stop( )
  135.     Gosub( Fire )
  136.     Scan( )
  137.     
  138.     if( dtcrobot == 0 )
  139.         # See the description of Blocking() in the FoundCookie section below
  140.         Blocking( OFF )
  141.         Continue( )
  142.         Blocking( ON )
  143.     endif
  144. }
  145.  
  146. # Adjust energy based on how sure we are of hitting something
  147.  
  148. Fire
  149. {
  150.     if( scandist > 200 || energy < 10 )
  151.         fire( 1 )
  152.     elseif( scandist > 100 )
  153.         fire( 3 )
  154.     elseif( scandist > 50 )
  155.         fire( 5 )
  156.     else( )
  157.         fire( 7 )
  158.     endif
  159. }
  160.  
  161. FoundMine
  162. {
  163.     # Don't want to run into a mine!!
  164.     fire( 1 )
  165. }
  166.  
  167. FoundCookie
  168. {
  169.     # Our goal here it to shot the cookie so no one else can get it.
  170.     # We don't want to leave our wall. Since we were most likely be
  171.     # zooming along when we detected the cookie we'll probably overshot
  172.     # it. This section backs up a little, fires, then continue on.
  173.     
  174.     Stop( )
  175.  
  176.     # Use the 'MovingUp' state variable to determine which
  177.     # direction we were going when we detected the cookie
  178.  
  179.     if( MovingUp )
  180.         Back(4)
  181.     else
  182.         Ahead(4)
  183.     endif
  184.  
  185.     # NUKE THE COOKIE
  186.     fire( 1 )
  187.     
  188.     if( MovingUp )
  189.         Ahead(4)
  190.     else
  191.         Back(4)
  192.     endif
  193.  
  194.     # The following use of the Blocking() function is relatively advanced.
  195.     # If blocking were left on, this section would remain active until
  196.     # Continue() ended. Since autoscanning is a lower priority event, we
  197.     # would be moving blind! Turning blocking off prevents this section
  198.     # from blocking on Continue(). This ends this section allowing autoscan
  199.     # to be called normally. The orignial call to Ahead() or Back() in 
  200.     # 'Core' will be blocked since blocking was on when they were called.
  201.     
  202.     # There are other alternatives, but each has at least one major problem.
  203.     # Play around with other alternatives and you will see what I mean.
  204.         
  205.     Blocking( OFF )
  206.     Continue( )
  207.     Blocking( ON )
  208. }
  209.