Ik ben bezig met het maken van een kaartspel in Delphi. Het spel heet bluffen zoals sommige wel zullen kennen onder misschien een andere naam.
Ik ben nu bezig met een kaarten deel functie maar het wil niet echt goed lukken.
Het is de bedoeling dat 4 speler 2 kaarten krijgen. De kaarten die mee doen zijn 7,8,9,10,boer,vrouw,koning,aas.
Eerst krijgt speler 1 , 1 kaart van de stapel, dan speler 2, 1, dan speler 3, 1 en dan krijgt speler 4 nog een kaart. Dan weer speler 1, dan 2, dan 3, en dan 4.
Hoe kan ik dit voor elkaar krijgen zodat er random kaarten worden gekozen en dat kaarten niet meerdere keren voorkomen. Ik heb zelf al een ini bestand toegewezen met de kaart namen onder de strings 1,2,3,4,5......31,32
Nu moet ik dus een functie vinden die als je op een button drukt dat ie speler 1 een random kaart geeft, speler 2 een random kaart,etc... en dan ook nog eens zo dat de kaarten maar een maal voorkomen.
De volgende functie heb ik zelf gemaakt hievoor maar die geeft 2 problemen:
procedure TForm1.Button1Click(Sender: TObject);
var DelphiIni : TInifile;
q : string;
nloop : integer;
begin
q := IntToStr(Random (32));
listbox2.clear;
begin
for nloop := 0 to pred( listbox1.items.count ) do
if q = listbox1.items[ nloop ]
then
listbox2.Items.Add ('bla');
end;
if listbox2.items.count < 1 then
begin
Listbox1.Items.Add (q);
DelphiIni := TIniFile.Create('c:\windows\Kaarten.ini');
Edit1.text := DelphiIni.ReadString ('Kaarten', q, 'BlaBla');
DelphiIni.Free;
end;
Hierbij staat listbox1 voor de gebruikte getalen en listbox2 word bla toegevoegd als het getal al is gebruikt zodat de functie opnieuw zoekt naar een nieuw getal.
Het probleem is dat hoe minder kaarten er nog over zijn hoe langer het gaat duren totdat de random functie dat getal heeft gevonden. De kans dat hij dit getal van de laatste kaart die ngo over is vindt is per keer dus 3% en niet te doen. Er moet dus een andere functie worden bedacht.
Ik dacht zelf aan een aray van de nummers 1 tot 32 die ieder voor een apparte kaart in het ini bestand staan. maar voor zover ik weet is het niet mogelijk om een nummer uit een aray te verwijderen dus zal dit niet lukken.
Wie kan mij hieruit helpen. Het moet namelijk een zeer doordachte functie wezen een echte uitdaging dus!
Ik ben nu bezig met een kaarten deel functie maar het wil niet echt goed lukken.
Het is de bedoeling dat 4 speler 2 kaarten krijgen. De kaarten die mee doen zijn 7,8,9,10,boer,vrouw,koning,aas.
Eerst krijgt speler 1 , 1 kaart van de stapel, dan speler 2, 1, dan speler 3, 1 en dan krijgt speler 4 nog een kaart. Dan weer speler 1, dan 2, dan 3, en dan 4.
Hoe kan ik dit voor elkaar krijgen zodat er random kaarten worden gekozen en dat kaarten niet meerdere keren voorkomen. Ik heb zelf al een ini bestand toegewezen met de kaart namen onder de strings 1,2,3,4,5......31,32
Nu moet ik dus een functie vinden die als je op een button drukt dat ie speler 1 een random kaart geeft, speler 2 een random kaart,etc... en dan ook nog eens zo dat de kaarten maar een maal voorkomen.
De volgende functie heb ik zelf gemaakt hievoor maar die geeft 2 problemen:
procedure TForm1.Button1Click(Sender: TObject);
var DelphiIni : TInifile;
q : string;
nloop : integer;
begin
q := IntToStr(Random (32));
listbox2.clear;
begin
for nloop := 0 to pred( listbox1.items.count ) do
if q = listbox1.items[ nloop ]
then
listbox2.Items.Add ('bla');
end;
if listbox2.items.count < 1 then
begin
Listbox1.Items.Add (q);
DelphiIni := TIniFile.Create('c:\windows\Kaarten.ini');
Edit1.text := DelphiIni.ReadString ('Kaarten', q, 'BlaBla');
DelphiIni.Free;
end;
Hierbij staat listbox1 voor de gebruikte getalen en listbox2 word bla toegevoegd als het getal al is gebruikt zodat de functie opnieuw zoekt naar een nieuw getal.
Het probleem is dat hoe minder kaarten er nog over zijn hoe langer het gaat duren totdat de random functie dat getal heeft gevonden. De kans dat hij dit getal van de laatste kaart die ngo over is vindt is per keer dus 3% en niet te doen. Er moet dus een andere functie worden bedacht.
Ik dacht zelf aan een aray van de nummers 1 tot 32 die ieder voor een apparte kaart in het ini bestand staan. maar voor zover ik weet is het niet mogelijk om een nummer uit een aray te verwijderen dus zal dit niet lukken.
Wie kan mij hieruit helpen. Het moet namelijk een zeer doordachte functie wezen een echte uitdaging dus!