Coś dużo tych case
ci wyszło a różnią się tylko ilością bądź położeniem true
/false
w wywoływanej funkcji, a co za tym idzie można to skrócić do jednej funkcji/procedury. Albo zmienić procedurę SelectedCards
by zamiast pięciu oddzielnych parametrów przyjmowała jeden w postaci tablicy o pięciu elementach następnie stworzyć dwuwymiarową tablicę [TCardLayer,0..4]
wypełnić ją odpowiednio wartościami true
/false
i wtedy funkcja CpuSearchCardsToDiscard
będzie wyglądała mniej więcej tak
function CpuSearchCardsToDiscard(AHand : THand) : TChangeCard;
begin
result := SelectedCards(tablica[HandStrength(AHand), FindFourOfAKindPos(AHand)]);
end;
No i trzeba by z tego:
procedure SelectedCards(var AHand : TChangeCard; A0Card, A1Card, A2Card, A3Card, A4Card : Boolean);
begin
AHand[0] := A0Card;
AHand[1] := A1Card;
AHand[2] := A2Card;
AHand[3] := A3Card;
AHand[4] := A4Card;
end;
zrobić to
function SelectedCards(ACard : array[0..4] of Boolean) : TChangeCard;
var
i : integer;
begin
for i := 0 to 4 do
result[i] := ACard[i];
end;
Takie moje luźne przemyślenia - mogą zawierać błędy. Kody powyżej potraktuj jako wskazówkę a nie gotowe rozwiązanie.