Witam. W temacie pod adresem: http://4programmers.net/Forum/549141 poruszyłem
kwestię rozróżniania układów pięciu 6 ściennych kostek do gry. Ilości wylosowanych oczek zapisuję w
tablicy, ale pojawił się problem. Myślałem, że mój kod działa poprawnie, ale jednak nie, gdyż mam
problem ze stwierdzeniem czy wypadł mały strit czyli na przykład układ oczek 1 2 3 4 4, a poniższy
kod (pochodzący z modułu compos, który wkleiłem w pośtcie pod powyższtm linkiem) za poprawnego
małego strita bierze również np kombinację 1 4 5 6 6, ktora jak widać małym stritem nie jest, bo mały strit
to cztery takie same kolejne oczka. Masz ktoś z Was może jakiś pomysł jak poprawić poniższa funkcję
aby działała poprawnie? Procedura o nazwie ZliczanieKosci; jak nazwa wskazuje zlicza ilości wystąpienia
poszczegółnych oczek, wcześniej sortując tablicę bajtów zawierającą oczka - rosnąco. Pozostałe układy
oczek sprawdzam raczej ok - przynajmniej tak wynika z moich testów, problem jest tylko z małym stritem.
function CzyWypadlMalyStrit: boolean;
const
Przynajmniej = 4;
var
I, Cnt : Byte;
begin
Result := False;
ZliczanieKosci;
Cnt := 0;
for I := Low(IlosciTab) to High(IlosciTab) do
begin
if (IlosciTab[I] > 0) then
begin
Cnt := Cnt + 1;
end;
end;
if (Cnt = Przynajmniej) or (CzyWypadlDuzyStrit = True) then
begin
Result := True;
end;
end;
EDIT: Już sobie poradziłem. Mianowicie w google wpisując delphi yahtzee game trafiamy na stronę
http://www.blueorbsoft.com/yahtzee/index.html która aktualnie nie działa. Ale od czego jest przecież
web.archive.org i tam pod poniższym adresem znajdujemy źródło gry Yahtzee w Delphi, mi się ono
nie kompiluje, bo nie znajduje zasobów i nie chciałem się w to bawić, bo potrzebny jest mi tylko kod
sprawdzający czy mamy "Small Straight". No i znalazłem. Kod jest dosyć prosty, ale nie mogłem na to
wpaść. Poniżej wklejam rozwiązanie oraz link do źródeł tamtej gry. Przy okazji dodam, że algorytm
zaliczy także mały strit kiedy mamy dużego, czyli dokładnie tak jak powinno być. A oto link do źrodeł
http://web.archive.org/web/20080131184159/...tzee/index.html w innym temacie też poprawiłem kod.
function CzyWypadlMalyStrit: boolean;
var
I : Byte;
A, B, C, D, E, F : Byte;
begin
Result := False;
ZliczanieKosci;
for I := Low(OczkaTab) to High(OczkaTab) do
begin
if OczkaTab[I] = 1 then A := 0;
if OczkaTab[I] = 2 then B := 1;
if OczkaTab[I] = 3 then C := 2;
if OczkaTab[I] = 4 then D := 3;
if OczkaTab[I] = 5 then E := 4;
if OczkaTab[I] = 6 then F := 5;
end;
if ((A = 0) and (B = 1) and (C = 2) and (D = 3)) or
((B = 1) and (C = 2) and (D = 3) and (E = 4)) or
((C = 2) and (D = 3) and (E = 4) and (F = 5)) then
Result := True;
end;