Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Roulette (https://www.delphipraxis.net/174187-roulette.html)

Medium 8. Apr 2013 21:19

AW: Roulette
 
Hierbei:
Delphi-Quellcode:
If Edit3.text=IntTostr(1 or 3 or 5 or 7 or 9 or 12 or 14 or 16 or 18 or 19 or 21 or 23 or 25 or 27 or 30 or 32 or 34 or 36) then
arbeitet das "or" nicht wie du aus dem sprachlichen Gebrauch her vermutest. Es wird hier ein Bei Google suchenlogisches Oder auf Zahlen angewendet, und du hast dort im Grunde eigentlich dieses hier stehen:
Delphi-Quellcode:
If Edit3.text=IntTostr(63) then
. (63 ist das Ergebnis von 1 or 3 or 5 or...)

Wenn du anders herum umwandelst wird es deutlich einfacher, vorausgesetzt ihr dürft ein sogenanntes "Set" benutzen:
Delphi-Quellcode:
if StrToInt(Edit3.Text) in [1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36] then
Das wäre die bei weitem einfachste Variante. Der lange und hässliche Weg könnte (angedeutet) so aussehen:
Delphi-Quellcode:
var
  geworfen: Integer;
begin
// würfel code hier, Ergebnis in "geworfen" speichern
if (geworfen = 1)
  or (geworfen = 3)
  or (geworfen = 5)
  or (geworfen = 7)
  or ...
  ...
  ...
then

galoru 8. Apr 2013 21:26

AW: Roulette
 
Ich habe es mit deiner Variante gemacht und es klappt wunderbar, danke dafür! Wenn ich nun einmal gewinne zeigt er mir den richtigen Kontostand an, aber wenn ich direkt danach nochmal gewinne ändert sich nichts.Der alte Kontostand bleibt erhalten. Warum ?

sx2008 9. Apr 2013 00:14

AW: Roulette
 
Ein ganz heisser Tipp:
beim Roulette gibt es verschiedene Gewinnchancen (Zahl, rot/schwarz, pair/impair, mangue/passe, 1-3 Douzaines, ...)

Für jede dieser Gewinnchancen solltest du eine eigene Funktion schreiben:
Delphi-Quellcode:
function IstManque(zahl:integer):Boolean;
begin
  if (zahl >= 1) and (zahl <= 18) then
    result := True
  else
    result := False;

  // Verdichtet kann man das auch so schreiben
  Result := ((zahl >= 1) and (zahl <= 18));
end;

function IstPasse(zahl:integer):Boolean;
begin
  if (zahl >= 19) and (zahl <= 36) then
    result := True
  else
    result := False;
end;

function IstRot(zahl:integer):Boolean;
begin
  // selbermachen
end;
Mit diesen kleinen netten Funktionen wird die Auswertung viel leichter!

galoru 9. Apr 2013 05:48

AW: Roulette
 
Irgendjemand der mir weiterhelfen kann? Oder soll ich mein Problem nochmal erklären? Ich habe ja verschiedene Buttons für die unterschiedlichen Spielmöglichkeiten. Ich habe z.B den Button Rouge, ich setze also auf eine rote Zahl. Wenn ich nun auf den Button tippe und eine Zahl generiert die rot ist, gewinne ich ja und mein Konto erhöht sich. Tippe ich danach nochmal auf den Button und gewinne, bleibt das Konto unverändert.

Bummi 9. Apr 2013 06:46

AW: Roulette
 
Wenn der Code noch der ist der er war trägst Du das Ergebnis ein statt es zu addieren.

Jumpy 9. Apr 2013 08:43

AW: Roulette
 
Vielleicht wäre es auch sinnvoll das "Konto" als variable zu speichern.
Vor einem Spiel wird der Einsatz davon abgezogen, passiert derzeit nicht, und es könnte auch geprüft werden, ob überhaupt noch genug Geld zum Einsetzen vorhanden ist.
Nach dem Spiel wird dann der evtl. Gewinn dem Konto zugerchnet und der aktualisierte Wert der variablen im entsprechenden Edit angezeigt.

Ansonsten solltest du vllt. über den Ansatz von sx2008 nachdenken und die Aufgabe in viele kleine Funktionen zerteilen.

galoru 9. Apr 2013 13:35

AW: Roulette
 
Sorry für den Doppelpost, bin zu blöd :-D

galoru 9. Apr 2013 13:36

AW: Roulette
 
Danke für die Tipps; die einzelnen Funktionen mit den Editfenstern klappen alle, d.h. wenn gewinne ändert sich der wert,gewinne ich nochmal, ändert sich der wert nochmal. Jetzt habe ich versucht die Editfenster durch Labelfenster zu ersetzen; das Edit in dem die zufällige Zahl ausgegeben wird zu einem Label und der aktuelle Kontostand auch. Wenn ich dann mehrmals nacheinander gewinne, verändert sich am Konto nichts.
Mit Edit:
Code:
x:= strtoint(Edit1.text);
y:= strtoint(Edit2.text);
randomize;
Edit3.text:=IntToStr(random(37));

If strtoint(Edit3.text)in[0,1, 3, 5, 7, 9, 12, 14, 16, 18, 19,
21, 23, 25, 27, 30, 32, 34, 36] then
Edit2.Text:=inttostr(y+x)else
Edit2.text:=inttostr(0);

If Edit3.text=IntTostr(0) then
Edit2.Text:=inttostr(x div 2);
Mit Label:
Code:
x:= strtoint(Edit1.text);
Label41.caption:=inttostr(y);
randomize;
Label47.caption:=IntToStr(random(37));

If strtoint(Label47.caption)in[1, 3, 5, 7, 9, 12, 14, 16, 18, 19,
21, 23, 25, 27, 30, 32, 34, 36] then
Label41.caption:=inttostr(y+x)else
Label41.caption:=inttostr(0);

If Label47.caption=IntTostr(0) then
Label41.caption:=inttostr(x div 2);
Wieso bleibt das Labelfenster unverändert?

DeddyH 9. Apr 2013 13:44

AW: Roulette
 
Steigst Du da noch durch? Hast Du auch das richtige Label erwischt, oder sollte es eher Label63 oder gar Label74 sein? Was ich meine: benenne Deine Komponenten ordentlich, so dass man aus dem Bezeichner schon schließen kann, was sie darstellen. Apropos darstellen: noch besser wäre es, die Komponenten tatsächlich zur reinen Darstellung zu benutzen und nicht als Datenspeicher. Mal ein Beispiel zur Gegenüberstellung:
Delphi-Quellcode:
procedure TDeinForm.Division;
begin
  lblErgebnis.Caption := IntToStr(StrToInt(lblZahl1.Caption) div StrToInt(lblZahl2.Caption));
end;

procedure TDeinForm.Division2;
var
  Ergebnis: integer;
begin
  Ergebnis := FZahl1 div FZahl2; //private Integer-Felder des Formulars
  lblErgebnis.Caption := IntToStr(Ergebnis);
end;

p80286 9. Apr 2013 14:53

AW: Roulette
 
Ich würde das ganze mit einem Record erschlagen
Delphi-Quellcode:
  tRouletteRec = record
     Zahl : word;
     PI  : TPairImpair;
     RN  : TRougeNoir { Grün nicht vergessen }
     ...
  end;

var
  ra: array [0..36] of tRouletteRec;
Im Initialisierungsteil werden alle Werte gesetzt und nach dem Würfeln wird dann ausgelesen was geworfen wurde.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 Uhr.
Seite 2 von 3     12 3      

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