![]() |
Es ist so einfach komme aber nich drauf - Wert addieren ...
Hi, mache gerade ein Delphi Programm (Roulette).
Jetzt hab ich ein Edit Fenster wo ich die Summe eingebe die auf mein "Konto" geladen werden soll. Dann hab ich ein Panel wo mein Kontostand angzeigt wird. Nun wenn ich einen Gewinn erziele (g1 ist also >0) dann soll dies zum eingelesen Edit Wert addiert werden (dieser Wert heißt "einsatz"). Jedoch hab ich immer das Problem, sobald ich den Button drücke, das meine Panel wieder den Wert von Edit1 einliest d.h. wenn ich am anfang 500 eingebe addiert er nich den Gewinn (z.B. 15) hinzu sondern zeigt wieder 500 an. Also wo liegt der Fehler ? [edit=Phoenix].NET -> Win32 geändert. Mfg, Phoenix[/edit] |
Re: Es ist so einfach komme aber nich drauf - Wert addieren
Wenn du uns mal den Codeschnipsel reinstellst, mit dem du die genannte Aktion ausführtst, könnten wir dir evtl helfen. :wiejetzt:
|
Re: Es ist so einfach komme aber nich drauf - Wert addieren
Hi
Nun, es geht auch ohne Codeschnipsel, glaub ich. Zuerst muß dir klar sein, was dein Konto und was dein Einsatz ist. ok, also Einsatz wird vom Konto abgebucht und in Feld Einsat geschrieben. Da die Felder mit Text, also Strings gefüllt sind, du aber mit Zahlen (Real ) rechnest, mußt du umwandeln. Von String nach Real => StrToFloat(String) Von Real nach String=>FormatFloat('#0.00',Float) Hinweise dazu findest du in der Hilfe. Vorgehensweise für Einsatz: Konto = Konto - Einsatz bei Verloren ist einsatz weg und du setzt neuen Einsatz bei Gewinn Konto = konto +(Einsatz*Gewinnfaktor) Ich hab hier keine Delphi-Codes geschrieben und auf Wandlung jeglicher Art verzichtet. Dies dürfte aber kein Problem sein, oder ? Gruß oldmax |
Re: Es ist so einfach komme aber nich drauf - Wert addieren
Delphi-Quellcode:
So das ist hier Zufallszahl+Zuordnung zu jeweiligen Gewinnfeld . Zuvor wird das Konto mit einem Betrag aufgeladen.
procedure TForm1.Button1Click(Sender: TObject);
var kkeinsatz1, kkeinsatz2, keinsatz1, keinsatz2, einsatz1, einsatz2, x, y1, y2, g1, g2, a, b :integer; begin randomize; keinsatz1 := strtoint(edit3.text); keinsatz1 := strtoint(edit4.text); einsatz1 := strtoint(edit1.text); einsatz2 := strtoint(edit2.text); x:=random(36); Panel3.Caption:=inttostr(x); begin if combobox1.Text='Zero' then y1:=0; if combobox1.Text='Rot' then y1:=1; if combobox1.Text='Schwarz' then y1:=2; if combobox1.Text='1 Dutzend' then y1:=3; if combobox1.Text='2 Dutzend' then y1:=4; if combobox1.Text='3 Dutzend' then y1:=5 end; begin if combobox2.Text='Zero' then y2:=0; if combobox2.Text='Rot' then y2:=1; if combobox2.Text='Schwarz' then y2:=2; if combobox2.Text='1 Dutzend' then y2:=3; if combobox2.Text='2 Dutzend' then y2:=4; if combobox2.Text='3 Dutzend' then y2:=5 end; if (y1=0) and (x in [0]) then begin g1:=einsatz1*36; showmessage('Zero gewinnt!'); end; if (y1=1) and (x in [1,3,5,7,9,11,13,15,17,19,21,23,25,27]) then begin g1:=einsatz1*1; showmessage('Rot gewinnt!'); end; if (y1=2) and (x in [2,4,6,8,10,12,14,16,18,20,22,24,26]) then begin g1:=einsatz1*1; showmessage('Schwarz gewinnt!'); end; if (y1=3) and (x in [1..12]) then begin g1:=einsatz1*2; showmessage('1 Dutzend gewinnt!'); end; if (y1=4) and (x in [13..24]) then begin g1:=einsatz1*2; showmessage('2 Dutzend gewinnt!'); end; if (y1=5) and (x in [25..36]) then begin g1:=einsatz1*2; showmessage('3 Dutzend gewinnt!'); end; if (y2=0) and (x in [0]) then begin g2:=einsatz2*36; showmessage('Zero gewinnt!'); end; if (y2=1) and (x in [1,3,5,7,9,11,13,15,17,19,21,23,25,27]) then begin g2:=einsatz2*1; showmessage('Rot gewinnt!'); end; if (y2=2) and (x in [2,4,6,8,10,12,14,16,18,20,22,24,26]) then begin g2:=einsatz2*1; showmessage('Schwarz gewinnt!'); end; if (y2=3) and (x in [1..12]) then begin g2:=einsatz2*2; showmessage('1 Dutzend gewinnt!'); end; if (y2=4) and (x in [13..24]) then begin g2:=einsatz2*2; showmessage('2 Dutzend gewinnt!'); end; if (y2=5) and (x in [25..36]) then begin g2:=einsatz2*2; showmessage('3 Dutzend gewinnt!'); end; Panel1.Caption:=inttostr(g1); Panel2.Caption:=inttostr(g2); end; end. Drücke ich jetzt den Button so wird das Konto immer wieder , mit der am Anfang eingegebenen Summe, aufgefüllt. |
Re: Es ist so einfach komme aber nich drauf - Wert addieren
Guten Abend,
vielleicht so:
Delphi-Quellcode:
if (y2=4) and (x in [13..24]) then
begin g2:=g2+einsatz2*2; showmessage('2 Dutzend gewinnt!'); end;
Delphi-Quellcode:
Ausserdem ist Dein g1 und g2 lokal deklariert, es gilt nur in der ButtonClick Routine.
var kkeinsatz1, kkeinsatz2, keinsatz1, keinsatz2, einsatz1, einsatz2, x, y1, y2, g1, g2, a, b :integer;
Und randomize bitte nur einmal im Programm aufrufen, z.B. in der OnCreate Routine. Grüße Klaus |
Re: Es ist so einfach komme aber nich drauf - Wert addieren
Ok jetzt klappt es schon besser aber ich will ja auch bei einen Verlust den Einsatz vom Konto abziehen aber da läuft es acuh schief ...
|
Re: Es ist so einfach komme aber nich drauf - Wert addieren
Hi
Nun, wie wäre es, wenn du mal über meinen Text chaust. Du brauchst ein Konto, also ein Editfeld Ed_Konto.Text; Dann ein Editfeld ED_Einsatz.Text. Nun Schreibst du in das Einsatzfeld deinen Einsatz. Beim onExit Ereignisziehst du den Einsatz vom Konto ab, du hast ja auf das Spielfeld gesetzt. Dieses onExit Ereignis wird bspw.ausgelöst, wenn du dein Button drückst, um die Zufallszahl zu bilden. also :
Delphi-Quellcode:
Nun setzt du in deiner Spiel-Ergebnisberechnung den Gewinn auf die Gewinnsumme, d.h.
Procedure TMyForm.Ed_EinsatzExit(Sender : TObject);
Var Betrag : Real; Begin Betrag:=StrToFloat(ED_Konto.Text)-StrToFloat(Ed_Einsatz.Text); Ed_Konto.Text:=FormatFloat('#0.00',Betrag); end;
Delphi-Quellcode:
statt einer Boolean "gewonnen" wäre auch denkbar, die Gewinnstufe auf >0 abzufragen.
If gewonnen then Gewinn:=StrToFloat(Ed_Einsatz.Text)+StrToFloat(Ed_Einsatz.Text)*Gewinnstufe
else Gewinn:=0; Nun brauchst du nur noch den Wert in Gewinn aufs Konto zu schreiben, also
Delphi-Quellcode:
fertig..........
Ed_Konto.Text:=FormatFloat('#0.00',StrToFloat(Ed_Konto.Text)+Gewinn);
aber nix anderes hab ich bereits geschrieben, nur nicht im Delphi-Code.. Ach ja, noch ein wenig zur Erleichterung. Nimm Variablennamen, die es dir ermöglichen, auch nach einem halben Jahr ihre Bedeutung zu erkennen, ohne gleich das gesammte Programm nachzuvollziehen. Bei den Editfeldern, wie auch bei anderen Objekten benutze ich eine Abkürzung wie z.B. "Ed_" bei TEdit und dann einen entsprechenden Namen. Auch übe ein wenig die Anwendung von Prozeduren oder Funktionen. Bspw
Delphi-Quellcode:
Setzen der Gewinnstufe erfolgt durch Aufruf der Function
Funktion TMyForm.EinSpiel(Einsatzfeld :String): Integer;
Var Kugel : Integer; Stufe : Integer; Begin Stufe:=0; Kugel:=Random(nn); //nn ist die Anzahl der Felder Case Kugel of 1: If Einsatzfeld='1' then Stufe :=36; // oder so 2: If Einsatzfeld='2' then Stufe :=36; 3: ...... nn: .... end; // Case... Result :=Stufe; end; // Function....
Delphi-Quellcode:
Wenn du für jedes Roulettfeld ein Button setzt, kannst du in der Ereignisroutine z.B. damit die Gewinnstufe setzen..
Gewinnstufe:=Einspiel(Wert der Taste);
Das macht dein Programm übersichtlicher. Gruß oldmax |
Re: Es ist so einfach komme aber nich drauf - Wert addieren
wie kann ich den die neue Procedure "...Exist" eibinden ? Ich mein er meckert immer rum das er die nich kennt ... oder kommt die in meinen Button Prozess ?
|
Re: Es ist so einfach komme aber nich drauf - Wert addieren
Das ist das Ereignis OnExit von Ed_Einsatz.
|
Re: Es ist so einfach komme aber nich drauf - Wert addieren
hmm dann raf ich es iwie net ... nochmal ne dau erklärung ?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04 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