home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 118.DECOUNT.INC < prev    next >
Text File  |  1992-07-15  |  2KB  |  81 lines

  1. procedure DeadEndAnalysis;
  2.  
  3. var 
  4.   len, maxlen : integer;
  5.   distrib     : array [1..8] of integer;
  6.   s           : sector;
  7.   fname       : string;
  8.   f           : text;
  9.   distances   : distanceArray;
  10.   ch          : char;
  11.  
  12. procedure CheckBackDoor( var f : text; base : sector );
  13. { verify no back doors into path }
  14. var
  15.   previous, current, NextUp : sector;
  16. begin
  17.   write(f, 'Tunnel starting at ', base, ' : ');
  18.   previous := base;
  19.   write( f, base );
  20.   if inverses[base].number = space.sectors[base].number then
  21.     write(f, ' ok ')
  22.   else
  23.     write(f, ' back door ');
  24.   current := space.sectors[base].data[1];
  25.   while (space.sectors[current].number = 2) do
  26.     begin
  27.       write( f, current );
  28.       if inverses[current].number = space.sectors[current].number then
  29.         write(f, ' ok ')
  30.       else
  31.         write(f, ' back door ');
  32.       NextUp := space.sectors[current].data[1];
  33.       if NextUp = previous then
  34.         NextUp := space.sectors[current].data[2];
  35.       previous := current;
  36.       current := nextUp;
  37.     end; {while}
  38. end; {Check Back Door}
  39.  
  40. begin
  41.   for len := 1 to 8 do
  42.     distrib[ len ] := 0;
  43.   maxlen := 0;
  44.   SetupInverseArray;
  45.   for s := 1 to MaxSector do
  46.     if (inverses[s].number=1) and (space.sectors[s].number > 0) then
  47.       begin
  48.         len := howfar( s );
  49.         if len > maxlen then
  50.           maxlen := len;
  51.         distrib[ len ] := distrib[ len ] + 1;
  52.       end; {for if}
  53.   writeln('Distributions of tunnel lengths:');
  54.   for len := 1 to 8 do
  55.     write( len : 2, ': ', distrib[len] : 3, '.  ');
  56.   writeln;
  57.   writeln;
  58.   writeln('Maximum length of any tunnel is ', maxlen);
  59.   writeln;
  60.   TwoWayDistances( 1, distances, false, true );
  61.   writeln;
  62.   write('File for storage of results?  (hit return for screen)  ');
  63.   readln( fname );
  64.   assign( f, fname );
  65.   rewrite( f );
  66.   repeat
  67.     write('Which lengths do you want to check for 1-way entrances? (0 to exit) ');
  68.     len := ReadNumberFromTerminal;
  69.     if len > 0 then
  70.       for s := 1 to MaxSector do
  71.         if (space.sectors[s].number <> 0) and (inverses[s].number = 1) then
  72.           if howfar(s) = len then
  73.             begin
  74.               if space.sectors[s].number > 1 then
  75.                 write(f, '(Escape)');
  76.               checkBackDoor( f, s );
  77.               writeln( f, ' at distance ', distances[s].d, ' from terra.' );
  78.             end;
  79.   until len = 0;
  80.   close(f);
  81. end; {dead end stuff}