Default.adb

-- Patternmatching with variable patterns
-- try patterns length 25 downto 5 moves.
-- If no pattern or not 10 moves yet play TitForTat

function TitForTat return Move; -- forward declaration

function Default return Move is
   Pattern: MoveRecord;
   PatternLength: integer;
   I: Integer;
   Foundpattern: Boolean:=False;
   -- Return smallest value.
   function Min(x,y: integer) return Integer is
   begin
      if x > y then return y;
      else
         return x;
      end if;
   end Min;
begin
   if MN > 10 then
      PatternLength:=min(MN-1,50);   -- How long pattern should we start with?
      while (PatternLength > 19) loop
         Pattern(1..PatternLength):=OppMoves(MN-PatternLength..MN-1);
         I:=MN-PatternLength-1;
         while(I > 0) loop             -- Find pattern
            if Pattern(1..PatternLength)=OppMoves(I..I+PatternLength-1) then
               return OppMoves(I+PatternLength);
            end if;
            I:=I-1;
         end loop;
         PatternLength:=PatternLength-5;   -- If no pattern found try shorter pattern
      end loop;
   end if;
   return TitForTat;              -- If no pattern or not enough moves yet play titfortat
end Default;

Tillbaka till huvudsidan