home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 125.CONTROL.INC < prev    next >
Text File  |  1992-06-30  |  3KB  |  102 lines

  1. procedure control;
  2. { You specify border sectors and an internal sector, and it determines which
  3. sectors you really control.  Yet another in the interminable timewastes of
  4. TWViewer stuff.
  5.    Written 3/21/91 by woody.
  6. }
  7.  
  8. type
  9.   controltype = ( unk, border, unexp, controlled );
  10.   
  11. var
  12.   dominion : array [sector] of controltype;
  13.   t, s : sector;
  14.   sinp : sectorindex;
  15.   count : integer;
  16.   KeepGoing : boolean;
  17.   
  18.  
  19. var
  20.   empire : queue;
  21.  
  22. procedure EnqueueInto( s : sector; var q : queue );
  23. { add to the queue everything that has unknown status that can enter s }
  24. var
  25.   t : sector;
  26. begin
  27.   for t := 1 to maxSector do
  28.     if IsWarp( t, s ) then
  29.       if dominion[ t ] = unk then
  30.         enqueue( q, t, s );
  31. end; {enqueueinto}
  32.  
  33. procedure CheckUnexps;
  34. { look for unexplored sectors on boundary of controlled regions }
  35. var
  36.   warn : boolean;
  37.   s : sector;
  38.   i : warpindex;
  39. begin
  40.   warn := true;
  41.   for s := 1 to MaxSector do
  42.     if dominion[s] = controlled then
  43.       for i := 1 to space.sectors[s].number do
  44.         if dominion[ space.sectors[s].data[i] ] = unexp then
  45.           begin
  46.             if warn then
  47.               writeln('Warning: the following sectors are unexplored on the border');
  48.             warn := false;
  49.             write( space.sectors[s].data[i] : 5 );
  50.           end; {for if for if}
  51.   if not warn then writeln;
  52. end; {CheckUnexps}
  53.  
  54. begin {control}
  55.   writeln;
  56.   writeln;
  57.   writeln('Border sectors are your militarized zones that you are');
  58.   writeln('certain you control (by force).');
  59.   repeat
  60.     for s := 1 to maxSector do
  61.       if space.sectors[s].number = UnExplored then
  62.         dominion[s] := unexp
  63.       else
  64.         dominion[s] := unk;
  65.     writeln;
  66.     writeln('Please enter border sectors.  Enter 0 to finish.');
  67.     sinp := GetSector;
  68.     repeat
  69.       dominion[ s ] := border;
  70.       sinp := GetSector;
  71.     until sinp = 0;
  72.     write('One sector that is inside your domain? ');
  73.     empire.front := 0;
  74.     sinp := GetSector;
  75.     if sinp = 0 then
  76.       halt;
  77.     s := sinp;
  78.     Enqueue( empire, s, s );
  79.     writeln('Controlled sectors:');
  80.     count := 0;
  81.     KeepGoing := true;
  82.     while (empire.front <> 0) and KeepGoing do
  83.       begin
  84.         serve( empire, s, t );
  85.         EnqueueInto( s, empire );      { add everything that can enter }
  86.         dominion[ s ] := controlled;
  87.         write( s : 9, '->', t:5 );
  88.         count := count + 1;
  89.         if space.sectors[s].etc and SpaceLane <> Nothing then
  90.           begin
  91.             writeln;
  92.             writeln('error: sector ', s, ' is a major space lane and uncontrollable.');
  93.             Keepgoing := false;
  94.           end
  95.         else if count mod 10 = 0 then
  96.           keepGoing := not prompt('     Stop? ');
  97.       end; {while}
  98.     writeln;
  99.     writeln('Total of ', count, ' controlled sectors.');
  100.     checkUnexps;
  101.   until not prompt('Again? ');
  102. end;