(**************************************************************************)
(*                             W A R N I N G                              *)
(*                                                                        *)
(*  This Robot has NOT been designed to take advantage of the advanced    *)
(*  features of P-ROBOTS, such as, Shields, Fuel, Teams or Obstructions.  *)
(**************************************************************************)

  PROCEDURE M1_GO;
    { M1-GO is based on a Japanese 60's TV drama "Ultra-Q"
      Original C-Robot by Hortense Endoh }

  VAR
    deg, dego, dir, doo, dmg : Integer;
    Range, ranrnd, incr, ro, spd : Integer;

    PROCEDURE Go_hell;
    BEGIN
      WHILE (loc_y > 10) DO
        IF (loc_y < 60)
        THEN drive(270, 10)
        ELSE drive(270, 100);
    END; {Go_Hell}

    PROCEDURE shoot;
    BEGIN
      Range := scan(deg, 10);
      drive(dir, spd);
      IF (Range <> 0) THEN BEGIN
        ro := Range-(ro-Range) DIV 2;
        doo := deg-(doo-deg) DIV 2;
        IF (ro > 40) THEN cannon(doo, ro);
        dego := deg;
      END
      ELSE BEGIN
        IF (dego-deg > 0) THEN BEGIN
          incr := 20;
          dego := deg+30;
        END
        ELSE BEGIN
          IF (dego-deg < 0) THEN BEGIN
            incr := -20;
            dego := deg-30;
          END;
        END;
        IF (deg > 180) THEN BEGIN
          deg := 0;
          dego := 30;
        END
        ELSE BEGIN
          IF (deg < 0) THEN BEGIN
            deg := 180;
            dego := 150;
          END
          ELSE deg := deg+incr;
        END;
      END;
    END; {Shoot}


  BEGIN {M1_GO Main}
    deg := 0; dego := 20; incr := 20; spd := 100;
    Go_hell;

    REPEAT
      dir := 0; dmg := damage;
      WHILE (loc_x < 800) DO BEGIN
        shoot;
        IF (dmg <> damage) THEN BEGIN
          dir := 180;
          WHILE (loc_x > 200) DO shoot;
          dir := 0; dmg := damage;
        END;
      END;

      dir := 180; dmg := damage;
      WHILE (loc_x > 200) DO BEGIN
        shoot;
        IF (dmg <> damage) THEN BEGIN
          dir := 0;
          WHILE (loc_x < 800) DO shoot;
          dir := 180; dmg := damage;
        END;
      END;

    UNTIL Dead OR Winner;

  END; { end of M1_GO Main }

