home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 275.CONTROL.INC < prev    next >
Text File  |  1991-07-08  |  3KB  |  100 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.   count : integer;
  15.   KeepGoing : boolean;
  16.   
  17.  
  18. var
  19.   empire : queue;
  20.  
  21. procedure EnqueueInto( s : sector; var q : queue );
  22. { add to the queue everything that has unknown status that can enter s }
  23. var
  24.   t : sector;
  25. begin
  26.   for t := 1 to maxSector do
  27.     if IsWarp( t, s ) then
  28.       if dominion[ t ] = unk then
  29.         enqueue( q, t, s );
  30. end; {enqueueinto}
  31.  
  32. procedure CheckUnexps;
  33. { look for unexplored sectors on boundary of controlled regions }
  34. var
  35.   warn : boolean;
  36.   s : sector;
  37.   i : warpindex;
  38. begin
  39.   warn := true;
  40.   for s := 1 to MaxSector do
  41.     if dominion[s] = controlled then
  42.       for i := 1 to space.sectors[s].number do
  43.         if dominion[ space.sectors[s].data[i] ] = unexp then
  44.           begin
  45.             if warn then
  46.               writeln('Warning: the following sectors are unexplored on the border');
  47.             warn := false;
  48.             write( space.sectors[s].data[i] : 5 );
  49.           end; {for if for if}
  50.   if not warn then writeln;
  51. end; {CheckUnexps}
  52.  
  53. begin {control}
  54.   writeln;
  55.   writeln;
  56.   writeln('Border sectors are your militarized zones that you are');
  57.   writeln('certain you control (by force).');
  58.   repeat
  59.     for s := 1 to maxSector do
  60.       if space.sectors[s].number = UnExplored then
  61.         dominion[s] := unexp
  62.       else
  63.         dominion[s] := unk;
  64.     writeln;
  65.     writeln('Please enter border sectors.  Enter 0 to finish.');
  66.     s := GetSector;
  67.     repeat
  68.       dominion[ s ] := border;
  69.       s := GetSector;
  70.     until s = 0;
  71.     write('One sector that is inside your domain? ');
  72.     empire.front := 0;
  73.     s := GetSector;
  74.     if s = 0 then 
  75.       halt;
  76.     Enqueue( empire, s, s );
  77.     writeln('Controlled sectors:');
  78.     count := 0;
  79.     KeepGoing := true;
  80.     while (empire.front <> 0) and KeepGoing do
  81.       begin
  82.         serve( empire, s, t );
  83.         EnqueueInto( s, empire );      { add everything that can enter }
  84.         dominion[ s ] := controlled;
  85.         write( s : 9, '->', t:5 );
  86.         count := count + 1;
  87.         if space.sectors[s].etc and SpaceLane <> Nothing then
  88.           begin
  89.             writeln;
  90.             writeln('error: sector ', s, ' is a major space lane and uncontrollable.');
  91.             Keepgoing := false;
  92.           end
  93.         else if count mod 10 = 0 then
  94.           keepGoing := not prompt('     Stop? ');
  95.       end; {while}
  96.     writeln;
  97.     writeln('Total of ', count, ' controlled sectors.');
  98.     checkUnexps;
  99.   until not prompt('Again? ');
  100. end;