![]() |
Full House - Wie effizient programmieren?
Hallo,
beim Herumspielen mit Delphi kam mir die Idee, das Würfelspiel Kniffel zu programmieren. Man muss dazu sagen, dass ich sicherlich kein Experte bin, dieses Programm zu erstellen gelingt mir jedoch bis jetzt recht gut. Auf Knopfdruck werden 5 Zufallszahlen erstellt.
Code:
Wenn der Spieler sich nun entscheidet, dass er gerne die Einser eintragen lassen möchte, geschieht das mit einem weiteren Button.
z1 := random(6)+1;
Code:
Nun stehe ich aber vor dem Problem, dass das Programm einen Full House (also drei gleiche Zahlen sowie zwei gleiche, andere Zahlen) erkennen soll. Natürlich kann ich mich mit if durch jede Kombination durchfragen, dies ist aber sehr mühselig, ineffizient und unübersichtlich.
var
einser1 : integer; begin einser1 := 0; if z1 = 1 then einser1 := einser1 + 1; if z2 = 1 then einser1 := einser1 + 1; if z3 = 1 then einser1 := einser1 + 1; if z4 = 1 then einser1 := einser1 + 1; if z5 = 1 then einser1 := einser1 + 1; Button3.Caption := inttostr(einser1);
Code:
Hat ein schlauer Mensch eine Idee, wie ich das einfacher und ohne so viel Schreibarbeit lösen kann?
if (z1 = 1) and (z2 = 1) and (z3 = 1) and (z4 = 2) and (z5 = 2) then begin
[...] if (z1 = 1) and (z2 = 1) and (z3 = 1) and (z4 = 3) and (z5 = 3) then begin |
AW: Full House - Wie effizient programmieren?
Schreibe doch alle Werte in ein Array und gehe dann mit einer For Schleife durch. Dann merkst du dir, wie oft jeder Wert kam.
|
AW: Full House - Wie effizient programmieren?
So habe ich das damals in meiner Version auch gemacht. Da habe ich mir ein Byte-Array der Länge 6 (für die Würfelseiten) erstellt und mit Nullen gefüllt. Anschließend bin ich meine 5 Würfel in einer Schleife durchlaufen und habe den Array-Werte an Index Punktzahl des aktuellen Würfels um 1 erhöht. Für die weiteren Auswertungen musste dann nur noch das Punkte-Array analysiert werden (im Fall Full House bedeutet dies: es dürfen im Array nur die Werte 0, 2 und 3 vorkommen).
[edit] Nach nochmaligem Durchlesen bin ich zu dem Schluss gekommen, dass das vielleicht etwas schwer zu verstehen ist, daher eine anschaulichere Erläuterung: Stellen wir uns das genannte Array einfach als 6 Kartons vor, die von mit Zahlen von 1 bis 6 beschriftet sind. Am Anfang leeren wir alle Kartons, dann würfeln wir. Jeden Würfel legen wir nun in den Karton, dessen Beschriftung dem Würfelwert entspricht. Haben wir also z.B. die Folge 2, 3, 3, 5, 6 gewürfelt, so enthalten anschließend die Kartons 2, 5, und 6 je 1 Würfel, der Karton 3 2 Würfel, die übrigen Kartons (also 1 und 4) sind leer. Mit diesen Kartons können wir nun alle möglichen Punktzahlen errechnen, die Punktzahlen der einzelnen Würfel interessieren uns hier nicht mehr. Will der Spieler also das "3er"-Feld ausfüllen, ergibt sich die Punktzahl aus Kartonbeschriftung (also 3) multipliziert mit Inhalt (im Beispielwurf 2, das Ergebnis beträgt dann also 6). Für ein Full House muss ein Karton 2 und einer 3 Würfel enthalten, für eine kleine Straße müssen 4 aufeinanderfolgende Kartons befüllt sein, etc. [/edit] |
AW: Full House - Wie effizient programmieren?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallöle...:P
Das ich auf meine alten Tage mein allererstes Programm hervorholen muß... :P Zu Friedenszeiten im Osten habe ich das Programm auf einem IBM (KSchießMichTot) Ersatz gesehen. Da mit Sicherheit keine Lizengebühren abgedrückt wurden hieß es damals JAZZY. Das habe ich als Übung, ich weiß nicht wieviele Wochen das gedauert hat, programmiert. :P So hat es noch einen Sinn. @TE: Für die Berechnung gibt es mehrere Varianten. Wichtig ist das du sie verstehst. :thumb: PS: Damit es nicht so häßlich wird, habe ich noch mal den Formatter drüberlaufen lassen. :thumb: - mit with sollte man nicht mehr machen - keine vernüftigen Komponentenbezeichnungen ... also seit nett. :P |
AW: Full House - Wie effizient programmieren?
So würde ich vorgehen:
Also etwa so:
Die Zwischenergebnisse kannst du dann auch verwenden, um festzustellen, wer bei Ergebnis gewonnen hat: zum Beispiel das höhere Pärchen. EDIT: Kniffel! ... wie bin ich denn bei Poker gelandet :roll: Der Trick mit dem Einteilen der Würfelwerte in Kategorien (zweier, dreier, ...) klappt trotzdem. Sortieren macht bestimmt auch vieles leichter. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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