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