Witam. Wiem, że z sieci można pobrać całkiem fajnie napisaną grę Mega Kości. Jednak ja postanowiłem sam coś
takiego sobie napisać, dla własnej satysfakcji w Delphi. Jednak natrafiłem na problem. W jaki sposób sprawdzać
układ wylosowanych 5 wartości 6 ściennych kości. Zacząłem kombinować z takim układem który wydawał mi się
najprostszy czyli kareta (przynajmniej 4 takie same oczka). I nie wiem jak najlepiej sprawdzić czy wylosowałem
cztery takie same oczka. Póki co założyłem sobie, że wylosowane oczka będą w takiej tablicy jak pokazuję tutaj:
const
Ile_Kostek = 5;
public
OczkaTab : array[1..Ile_Kostek] of Byte;
I teraz jak sprawdzać stany losowań - ja założyłem że zrobię to poprzez dwuwymiarową tablicę prawdy, gdzie
pierwszy wymiar to kolejna kostka (od 1 do 5), a drugi wymiar (od 1 do 6) to wylosowana wartość. Czyli np dla
kombinacji 1 1 1 1 4 (bo wcześniej sortuję tablicę OczkaTab rosnąco) moja tablica prawy będzie wyglądała tak:
Kostka numer 1: prawda fałsz fałsz fałsz fałsz fałsz
Kostka numer 2: prawda fałsz fałsz fałsz fałsz fałsz
Kostka numer 3: prawda fałsz fałsz fałsz fałsz fałsz
Kostka numer 4: prawda fałsz fałsz fałsz fałsz fałsz
Kostka numer 5: fałsz fałsz fałsz prawda fałsz fałsz
I teraz jak ktoś ma pomysł jak prawidłowo zliczyć czy prawda w kolejnych kostkach dla jednej liczby wystąpiła
przynajmniej cztery razy? Może źle się za to zabrałem. Może powinienem użyć innych typów lub metody. Być
może ktoś z Was pisał kiedyś podobną grę jak kości czy poker i ma jakieś przykładowe funkcje sprawdzające
układ kości? Poniżej wklejam póki co zaczętą funkcję przygotowania tablic jakich użyłem i ich sprawdzenie.
Z góry dziękuję za wszelkie sugestie i przykładowe kodu. No i wybaczcie, że znowu się trochę rozpisałem
function WypadlaKareta: boolean;
var
SL : TStringList;
I, J : Byte;
PrawdaTab : array[1..Ile_Kostek, 1..6] of boolean;
begin
Result := False;
for I := Low(PrawdaTab) to High(PrawdaTab) do
for J := Low(PrawdaTab[I]) to High(PrawdaTab[I]) do
begin
PrawdaTab[I][J] := False;
end;
with MainForm do
begin
Sort_Shell(OczkaTab);
for I := Low(PrawdaTab) to High(PrawdaTab) do
for J := Low(PrawdaTab[I]) to High(PrawdaTab[I]) do
begin
if (OczkaTab[I] = J) then
begin
PrawdaTab[I][J] := True;
end
else
begin
PrawdaTab[I][J] := False;
end;
end;
// ------ sprawdzenie tablicy ------
SL := TStringList.Create;
for I := Low(PrawdaTab) to High(OczkaTab) do
begin
SL.Add('Kostka numer ' + IntToStr(I) + ':');
for J := 1 to 6 do
begin
if PrawdaTab[I][J] = True then
begin
SL[I - 1] := SL[I - 1] +#32+ 'prawda';
end
else
begin
SL[I - 1] := SL[I - 1] +#32+ 'fałsz';
end;
end;
end;
ShowMessage(SL.Text);
SL.Free;
//----------------------------------
end;
end;