Kartenspiel Algorithmus
Tag!
Ich habe ein ziemliches Problem einen Algorithmus zum sortieren eines Kartenspiel zu entwerfen! Es geht in dem Programm darum, dass 10 zufällige Zahlen aus einem Kartenstapel (54 Karten) gezogen werden. Diese Karten müssen nun in der hand des Spielers sortiert werden. Frage: Wie sieht der Algorithmus aus, wenn ich ein Arrayfeld von 54 habe??? :?: :!: :gruebel: MFG Ömmel |
Re: Kartenspiel Algorithmus
Hi!
Geht es dir drum, die 54 Karten zu sortieren, oder nur die 10 gezogenen? Willst du das Ganze mit Delphi machen? (Wenn ja ==> Falsche Kategorie). Ciao fkerber |
Re: Kartenspiel Algorithmus
Delphi-Quellcode:
Sortieralgos gibt's in der CodeLib.
randomize;
... for i := 1 to 10 do Karte := array[random(54)+1]; |
Re: Kartenspiel Algorithmus
Du könntest jeder Karte eine Art ID verpassen (Vielleicht mit einem Type und dann eine Eigenschaft "ID" und damit ein Array). Dann könntest du anhand dieser ID die Karten sortieren.
Man liest sich, Stanlay :hi: |
Re: Kartenspiel Algorithmus
HI
Ich würde es so machen wie Stanley Hanks es beschrieben hat. Alle Karten bekommen eine Nummer wobei die niedrigste Karte die niedrigste Nummer bekommt und die höchste Karte die höchste Nummer. Wenn du nun die Nummern sortierst(Sortierverfahren stehen in der Cod.lib.), dann sind die Karten in aufsteigender Reihenfolge sortiert. |
Re: Kartenspiel Algorithmus
Zitat:
Gruß, Tom |
Re: Kartenspiel Algorithmus
Zitat:
Delphi-Quellcode:
[edit]Zum Sortieren kannst du das Sortier-Tutorial hier aus dem Forum zu Rate ziehen.[/edit]
function PickCards(): String;
var Picked, i: Integer; Cards: set of 1..54; s: String; begin Cards := []; for i := 1 to 10 do begin Picked := Randomize(54) + 1; if (not (Picked in Cards)) then Cards := Cards + [Picked]; end; Result := ''; for i := 1 to 54 if (i in Cards) then begin case (i div 13) of 0: Result := 'Kreuz '; 1: Result := 'Pik '; 2: Result := 'Herz '; 3: Result := 'Karo '; end; case (i mod 13) of 1: Result := Result + 'As'; 2..10: Result := Result + IntToStr(i mod 13); 11: Result := Result + 'Bube'; 12: Result := Result + 'Dame'; 0: Result := Result + 'König'; end; end; end; |
Re: Kartenspiel Algorithmus
Zitat:
[Edit]Cool, ich bin ja Gold-Member :)[/Edit] |
Re: Kartenspiel Algorithmus
Hallo ich will ja jetzt nicht als altklug klingen aber
Picked := Randomize(54) + 1; --> sollte nach meiner meinungnach random(54) heißen oder täusche ich mich :chat: // edit Aja : for i := 1 to 54 --> sollte for i := 1 to 54 do // edit noch was : das s : String kannste auch weglassen :mrgreen: mfg Nico |
Re: Kartenspiel Algorithmus
Zitat:
|
Re: Kartenspiel Algorithmus
Zitat:
Zitat:
|
Re: Kartenspiel Algorithmus
Eine Frage noch(bin nur so interresiert weil ich auch grad das brauche) aber warum kommt bei mir bis auf eine Herzausnahme NUR KARO?
|
Re: Kartenspiel Algorithmus
Zitat:
Ich meinte eigentlich das es RANDOM und nicht RANDOMIZE heißt :lol: Noch was : Karo 9As sollte eigentlich nicht vorkommen (ich sah halt noch nie eien As 0 :mrgreen: ) Tschuldigung das ich mit solche sachen komme aber wie ich schon oben erwähnt habe brauch ich den Code für so eine Funktion und bin dir deshalb sehr dankbar! :oops: /Edit sorry Moderatoren wegen den Doppelpost war ein Versehen! |
Re: Kartenspiel Algorithmus
Zitat:
Zitat:
Zitat:
|
Re: Kartenspiel Algorithmus
Zitat:
|
Re: Kartenspiel Algorithmus
Das hab ich aber es geht trotzdem nicht
Aber ich kann sonst nichts finden! :( oder bin ich jetzt zu vertrottelt? :roll: :wall: :gruebel: |
Re: Kartenspiel Algorithmus
Zitat:
Ich hab übrigens noch einen Fehler gefunden... :roll: Mit 0 zu zählen zu beginnen ist ja doch besser. Jetzt tötet mich, ihr Pascal-Only-Jedis! :wink:
Delphi-Quellcode:
function PickCards(): String;
var Picked, i: Integer; Cards: set of 1..54; s: String; begin Cards := []; for i := 1 to 10 do begin Picked := Random(54) + 1; if (not (Picked in Cards)) then Cards := Cards + [Picked]; end; Result := ''; for i := 1 to 54 if (i in Cards) then begin case ((i - 1) div 13) of 0: Result := 'Kreuz '; 1: Result := 'Pik '; 2: Result := 'Herz '; 3: Result := 'Karo '; end; case ((i - 1) mod 13) of 1: Result := Result + 'As'; 2..10: Result := Result + IntToStr(i mod 13); 11: Result := Result + 'Bube'; 12: Result := Result + 'Dame'; 0: Result := Result + 'König'; end; end; end; |
Re: Kartenspiel Algorithmus
Zitat:
|
Re: Kartenspiel Algorithmus
deine funktion sieht gut aus aber was machst du für den fall das
(i-1) div 13 = 4 (i-1) mod 13 = 0 und (i-1) div 13 = 4 (i-1) mod 13 = 1 dafür hast du keine auswertung! 53/13 = 4,... 52/13 = 4,0; |
Re: Kartenspiel Algorithmus
Ich weiss jetzt wieso immer nur KARO ausgegeben wird! :lol:
Der höchste werd im Set "Cards" ist mit grosser Wahrscheinlich keit immer eine Zahl die x div 13 = 3 geben wird. Da die schleife ja 54 mal ausgefürd wird und eben x div 13 mit gorsser Wahrscheinlichkeit 3 gibt, wird auch immer als Schlussresultat Karo asugegebn. Ich hoffe man versteht was ich meine. |
Re: Kartenspiel Algorithmus
Zitat:
Delphi-Quellcode:
Immerhin braucht jetzt nicht mehr hinterher sortiert zu werden.
type
TStrArray = array[1..10] of String; function PickCards(): TStrArray; var Picked, i, count: Integer; Cards: set of 1..54; s: String; begin Cards := []; for i := 1 to 10 do begin Picked := Random(54) + 1; if (not (Picked in Cards)) then Cards := Cards + [Picked]; end; Result := ''; count := 1; for i := 1 to 54 do begin if (i in Cards) then begin if (i - 1 >= 13 * 4) then Result[count] := 'Joker' else case ((i - 1) div 13) of 0: Result[count] := 'Kreuz '; 1: Result[count] := 'Pik '; 2: Result[count] := 'Herz '; 3: Result[count] := 'Karo '; end; case ((i - 1) mod 13) of 0..8: Result[count] := Result[count] + IntToStr((i + 1) mod 13); 9: Result[count] := Result[count] + 'Bube'; 10: Result[count] := Result[count] + 'Dame'; 11: Result[count] := Result[count] + 'König'; 12: Result[count] := Result[count] + 'As'; end; count := count + 1; end; end; [edit]Das war der Fehler, den ich meinte, the_master.[/quote] [edit]Und schon wieder so ein dummer In-Pascal-fängt-man-mit-1-an-zu-zählen-nicht-konsequent-durchgeführt-Fehler[/edit] |
Re: Kartenspiel Algorithmus
Eure Beiträge sind echt genial!! Besten Dank, Problem gelöst, Mission erfüllt!!! :dancer:
MFG Ömmel :hi: |
Re: Kartenspiel Algorithmus
Hallo zusammen,
ich glaube da ist noch ein Fehler in dem Code von d3g. Soweit ich das richtig sehe passiert folgendes: Der Computer zieht 10 mal hintereinander eine Karte. Wenn er sie noch nicht hat, dann nimmt er sie dazu, ansonsten nicht. Was passiert nun, wenn er zweimal die gleiche Karte zieht? Dann müsste er doch eigentlich hinterher nur 9 Karten auf der Hand haben. Oder sehe ich das falsch? Deswegen würde ich eher eine Repeat-Until-Schleife statt einer for-Schleife einbauen. Grüße Seniman |
Re: Kartenspiel Algorithmus
Du siehst das richtig. Ich sollte als Strafe aufhören müssen zu programmieren und bis zum Ende meines Lebens dazu verdammt sein, meine Wachphasen im Kunstunterricht zu verfristen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz