[Delphi] Jak najlepiej wymieszac???

0

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...

0

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:/

0

imho niepotrzebne Ci są 2 tablice - starczy tasowanie jednej z kartami.. - tasowanie to tasowanie...

0

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....

0

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

0

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;

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