![]() |
primitives mau mau spiel
Liste der Anhänge anzeigen (Anzahl: 1)
moin moin
hab hier ein primitives mau mau spiel programmiert....das problem ist es hängt sich irgendwie auf wenn der stock am ende ist! kann sich das jemand anschauen? ich debugge mich schon tod hier! wäre nett wenn sich jemand findet der etwas zeit hat! |
Re: primitives mau mau spiel
keiner eine idee?
na hättet doich wenigstens schreiben können das der quelltext unübersichtlich ist! :wall: |
Re: primitives mau mau spiel
Hi,
wenn der Stapel leer ist, beibt er in uLogik.KarteGeben hängen... |
Re: primitives mau mau spiel
wie fang ich das denn ab?
so sollte das doch funktionieren oder nicht?
Delphi-Quellcode:
procedure KarteGeben(var KartenName : String;var KartenWert:byte);
begin if Stapel <>[] then begin repeat KartenWert := randomrange(Low(TKarten),High(TKarten)); until KartenWert in Stapel; KartenName := cKartenName[KartenWert]; Stapel := Stapel - [KartenWert]; end; end; |
Re: primitives mau mau spiel
kannst Du mal bitte schreiben, was für ein Typ stapel ist
Ich denke mal ein set of irgendwas aber kann man von einem Set etwas subtrahieren? Stapel := Stapel - [KartenWert]; Vielleicht ist das besser: Zitat:
Klaus |
Re: primitives mau mau spiel
Hi,
Wenn du den Stapel bereits zufällig füllst, dann kannst du in KarteGeben völlig auf random verzichten und nimmst immer die oberste Karte. Das Berechnen einer Zufallszahl im Maximalbereich solange, bis der Wert (zufällig) im Stapel gefunden wird, ist sicher nicht optimal. P.S.: @Klaus01
Delphi-Quellcode:
das ist schon ok. hier wird KartenWert aus dem Set entfernt.
Stapel := Stapel - [KartenWert];
|
Re: primitives mau mau spiel
NormanNG
stapel ist bei eine menge und in einer menge sind alle werte so weit ich mich richtig errinern kann geordnet! desswegen ist ja auch der random! die menge kann ich leider nicht rausnehemen da es in der aufgaben stellung steht! Klaus01
Delphi-Quellcode:
und aus der menge kann man subtrahieren, ich ziehe damit eine karte aus der menge
TKarte = set of 0..KartenAnzahl-1;//32 karten
Stapel : TKarte; |
Re: primitives mau mau spiel
OK, du hast natürlich Recht.
Ich war gedanklich bei einem Array... und im Set ist die Reihenfolge festgelegt. Damit scheidet das "Mischen" beim Initialisieren aus. Warum auch immer, das randomrange scheint den oberen Wert nie zu liefern, obwohl dies in den OH behauptet wird: Zitat:
Delphi-Quellcode:
Aber es bleibt immer noch das Problem, wenn der Stapel leer ist und KarteGeben aufgerufen wird. Du kannst ja die Elemente im Set zählen und ggf. anders reagieren:
KartenWert := randomrange( Low(tKarten), High(TKarten)+1 );
Delphi-Quellcode:
type
TKarten = 0..KartenAnzahl-1; TKarte = set of tKarten; function AnzElemente(ASet: TKarte): Integer; var i: TKarten; begin Result := 0; for i := High(TKarten) downto Low(TKarten) do if i in ASet then Begin Inc(Result); end; end; [edit]Schreibfehler korrigiert :stupid: [/edit] |
Re: primitives mau mau spiel
das komische daran ist wen der spieler dran ist und die karten fast alle sind...dann klappt es wunder bar, und beim pc hackt es
wenn wir das nun so machen Zitat:
|
Re: primitives mau mau spiel
Hi,
Delphi-Quellcode:
Ich hab's nochmal getestet: diese Anweisung liefert (ziemlich gleichverteilt) zufällige Werte zwischen 0 und 15 (inklusive beider Grenzen).
KartenWert := randomrange( Low(tKarten), High(TKarten)+1 );
Damit wird in "kartegeben" solange ein kartenwert erzeugt, bis auch die letzte Karte vom Stapel gezogen wurde. Soweit stimmt es. Die beiden Funktionen SpielerGewonnen und PCGewonnen haben auch noch einen Fehler.
Delphi-Quellcode:
im Else-Fall ist der Funktionswert nicht definiert!
function SpielerGewonnen(computer : boolean) : Boolean;
begin if ((SpielerBlatt = []) or (Stapel = []) and (Computer)) then SpielerGewonnen := true; end; function PCGewonnen(computer : boolean) : Boolean; begin if ((ComputerBlatt = []) or (Stapel = []) and (not Computer)) then PCGewonnen := true; end; Richtiger:
Delphi-Quellcode:
function SpielerGewonnen(computer : boolean) : Boolean;
begin SpielerGewonnen := ((SpielerBlatt = []) or (Stapel = []) and (Computer)) ; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz