Autor Beitrag
Girgl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 281


D6 Enterprise
BeitragVerfasst: So 24.10.04 15:09 
Servus,
ich bin grad dabei ein Kartenspiel zu machen.Ich brauch eine Routine,die mir alle 32 Karten zufällig auf 4 Mann verteilt.Jetz weiss ich aber nich,wie ich dem Programm sage,dass er die Karten,die schon vergeben wurden,nicht weiter mit einberechnen soll.Ich habe den karten nummern von 1-32 gegeben(es gibt ja auch 32 karten :wink: ) und hab mir gedacht,ich mach mir ein neues Array,in das ich reinschreibe,welche nummern schon weg sind.Ist das aber nicht ein wenig zu umständlich,jedesmal per schleife zu testen,ob die nummer schon vergeben ist?

Hoffe ihr könnt helfen

mfg Girgl
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 24.10.04 15:17 
ich würde ne Integerliste nehmen, sie mit 1-32 bestücken und dann folgendes machen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
 loop,
 i: integer;
...
for loop := 0 to 31 do
begin
  i := random(IntegerList.Count)
  SetKarte(IntegerList[i]);
  IntegerList.Delete(i);
end;


Es wird also immer zufällig ein Eintrag aus den noch vorhandenen rausgepickt und dann rausgelöscht.
*ungetestet*
Girgl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 281


D6 Enterprise
BeitragVerfasst: So 24.10.04 16:00 
Also ich habs jetz mal auf eigene Weise probiert,aber klappen tuts irgendwie noch nicht.
So sieht die Funktion aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var KartenNr,Count:Byte;
begin
 KartenNr:=Random(32)+1;
  For Count:=1 to 32 do begin
   If(VergebeneKarten[Count]=KartenNr) Then begin
    KartenGeben;
   end
   else begin
    VergebeneKarten[nKartenVergeben]:=KartenNr;
    Inc(nKartenVergeben);
    result:=KartenNr;
   end;
  end;

nKartenVergeben ist die Anzahl bereits vergebener Karten
VergebeneKarten ist ein Array,welches die bereits vergebenen Kartennummern enthlanten soll.Leider kommen immernoch öfters die gleichen Karten vor.Was stimmt an der funktion nicht?
sourcehunter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 482

Win XP | Suse 10.1
Delphi 2005 Pers.
BeitragVerfasst: Do 28.10.04 11:36 
Du hast etwas grundlegendes vergessen. Du musst vorm Kartengeben überprüfen, ob die Karte in denem Array noch nitch vorhanden ist und dann eine neue Karte geben (so bei Zeile 5). Aber ich hab hier mal nen anderen Vorschlag für dich:
Misch doch einfach die Karten vorher und gib dann jeweils 8 Karten an die Spieler aus. Das Mischen machst du, indem du zufällig zwei Karten auswählst un deren Position im Stapel vertauscht, das so ungefähr 100-1000 mal wiederholen und fertig gegeben!

_________________
Linux und OpenSource rulez!