Witam...
Mam taki mały problem, robie gre karcianą i zastanawiam sie jaki jest najlepszy sposób aby wymieszac [potasowac] karty,na razie mam sposób z dwiema tablicami jedna trzyma nazwe a druga numer i tak sie mieszaja... moze ktos ma lepszy pomysł??? Byłbym wdzieczny za kazda odpowiedz...
Kiedyś miałem gdzies jakiś przykład tasujący karty i to bardzo szybko... tylko musze poszukać:D i te karty się NIE powtarzały
//DOPISANE: NIE ZNALAZŁEM:/
imho niepotrzebne Ci są 2 tablice - starczy tasowanie jednej z kartami.. - tasowanie to tasowanie...
Hmm... Moze i racja wystarczy jedna tablica... A własnie znacie moze jakies strony/linki gdzie mozna znaleŹĆ jakies przykłady gier karcianych, chodzi tez aby tam były tez jakies artykuły i kody wiem, niektórzy mogą pomyśleć że chce sobie znaleŹĆ gotowce, ale to nie tak jestem początkujacym "delphiarzem" [Bo nie powiem że programistą bo to zaduzo jak dla mnie :) ] i chciałbym widziec jak to robią inni.... Z góry dzieki i pozdrawiam was....
Kiedyś miałem gdzies jakiś przykład tasujący karty i to bardzo szybko... tylko musze poszukać:D i te karty się NIE powtarzały
//DOPISANE: NIE ZNALAZŁEM:/
deklaracja globalna
var
talia: array[0..24]of string;
{talia skalada sie z 24 kart + 0 czyli tyl}
stos : byte;
{Reprezentuje ktora aktualnie karta jest na stosie}
Kkompa : boolean; {odkryte czy zakryte}
Kkarty: array[1..5,1..2] of byte;
Gkarty: array[1..5,1..3] of byte;
{[a,1] wartosc karty
[a,2] kolor karty
[a,3] 0 zakryta 1 odkryta
}
procedure TForm1.wczytanie;
var a,b: byte; // zmienne potrzebne do petli
c: byte; // licznik kart
begin
c:=0;
for a:=1 to 6 do // petla wartosci kart;
for b:=1 to 4 do // petla koloru kart;
begin
inc(c); // zwiekszenie c
talia[c]:=inttostr(a)+inttostr(b);// przypisanie karcie wartosci
end;
talia[0]:='tlo'; // wczytanie tla :)
end;
procedure tform1.Tasowanie;
var a: integer;// zmienna petlowa
str : string; // zmienna przenoszoca
b : byte;
begin
// procedura proste bez kometazy
// po prostu tasowanie
for a:=1 to 1240 do
begin
b:=random(23)+1;
str:=talia[b];
talia[b]:=talia[b+1];
talia[b+1]:=str;
end;
stos:=1;
end;
procedure tform1.Rozdanie;
var a: byte;// zmienna petlowa
begin
for a:=1 to 5 do //rozdanie kart
begin
Gkarty[a,1]:=strtoint((talia[stos])[1]);
Gkarty[a,2]:=strtoint(talia[stos][2]);
inc(stos);
Kkarty[a,1]:=strtoint((talia[stos])[1]);
Kkarty[a,2]:=strtoint(talia[stos][2]);
inc(stos)
end;
end;
procedure tform1.Wyswietlaniekart;
var a: byte;// zmienna petlowa
begin
Kkompa:=false; //pokazuje karty kompa do usuniecia
if gkarty[1,3]=0 then kg1.Picture.LoadFromFile('karty\'+inttostr(Gkarty[1,1])+inttostr(Gkarty[1,2])+'.jpg')
else kg1.Picture.LoadFromFile('karty\0.jpg');
if gkarty[2,3]=0 then kg2.Picture.LoadFromFile('karty\'+inttostr(Gkarty[2,1])+inttostr(Gkarty[2,2])+'.jpg')
else kg2.Picture.LoadFromFile('karty\0.jpg');
if gkarty[3,3]=0 then kg3.Picture.LoadFromFile('karty\'+inttostr(Gkarty[3,1])+inttostr(Gkarty[3,2])+'.jpg')
else kg3.Picture.LoadFromFile('karty\0.jpg');
if gkarty[4,3]=0 then kg4.Picture.LoadFromFile('karty\'+inttostr(Gkarty[4,1])+inttostr(Gkarty[4,2])+'.jpg')
else kg4.Picture.LoadFromFile('karty\0.jpg');
if gkarty[5,3]=0 then kg5.Picture.LoadFromFile('karty\'+inttostr(Gkarty[5,1])+inttostr(Gkarty[5,2])+'.jpg')
else kg5.Picture.LoadFromFile('karty\0.jpg');
if Kkompa then
begin
kk1.Picture.LoadFromFile('karty\'+inttostr(kkarty[1,1])+inttostr(kkarty[1,2])+'.jpg');
kk2.Picture.LoadFromFile('karty\'+inttostr(kkarty[2,1])+inttostr(kkarty[2,2])+'.jpg');
kk3.Picture.LoadFromFile('karty\'+inttostr(kkarty[3,1])+inttostr(kkarty[3,2])+'.jpg');
kk4.Picture.LoadFromFile('karty\'+inttostr(kkarty[4,1])+inttostr(kkarty[4,2])+'.jpg');
kk5.Picture.LoadFromFile('karty\'+inttostr(kkarty[5,1])+inttostr(kkarty[5,2])+'.jpg');
end
else
begin
kk1.Picture.LoadFromFile('karty\0.jpg');
kk2.Picture.LoadFromFile('karty\0.jpg');
kk3.Picture.LoadFromFile('karty\0.jpg');
kk4.Picture.LoadFromFile('karty\0.jpg');
kk5.Picture.LoadFromFile('karty\0.jpg');
end;
end;
Może nie najlepszy sposób ale karty się nie powtarzają kiedyś chciałem napisac pokera ale jak doszedłem do sprawdzania warunków co kto ma to mi sie odechciało
Znowu nieśmiertelne w moich postach Delphi 4. VP. Trochę zmodyfikowany kod:
var
Talia: TTaliaKart; // jakiś dowolny typ reprezentujący talię kart (po prostu tablica :) )
procedure Shuffle;
var
i: Integer;
RandNum: Integer;
RandCard: TCard; // dowolny typ reprezentujący kartę (typ bazowy tablicy Talia)
begin
for i := Low(Talia) to High(Talia) do
begin
RandNum := Random(High(Talia));
RandCard := Talia[RandNum];
Talia[RandNum] := Talia[i];
Talia[i] := RandCard;
end;
end;