Poker klasyczny - uporządkowanie kodu

1

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.

0

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

Właśnie te położenia true/false są istotne - wskazują, którą kartę należy wymienić (true - wymienia kartę, false - pozostawia).

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. No można by, ale jakoś trzeba wypełnić tę Twoją tablica odpowiednimi danymi - a to wymagałoby znowu szukania wszystkich wariantów, w poszczególnych układach - czyli trochę ifów, case.

0

Po to robisz tablice ze wszystkimi możliwymi wariantami by ich nie szukać za pomocą ifów a tylko wybierać odpowiedni wariant z tablicy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1