"BlackJack" Zähler

Für Fragen rund um die Ide und zum Debugger
Antworten
LordBukkit
Beiträge: 5
Registriert: Mo 29. Apr 2013, 12:49

"BlackJack" Zähler

Beitrag von LordBukkit »

Hallo.
Ich habe eine kleine Frage bezüglich eines Programmes, welches ich angefangen habe zu schreiben.
Es funktioniert so in etwa wie BlackJack:
Bei einem Klick auf dem "Noch eine" Button, wird eine Zahl von 1-6 generiert und angezeigt.
Das geht bis jetzt ganz gut.
Nun möchte ich aber, dass wenn man noch einmal auf den Button klickt, wieder eine Zahl generiert wird, und auf die schon vorhandene Zahl draufgezählt wird. Und dies immer weiter, bei jedem Klick. Ich habe es so versucht:

Code: Alles auswählen

procedure TForm1.NochEineBtnClick(Sender: TObject);
var Karte, NeueZahl :Integer;
begin
  randomize;
  Karte := random (6)+1;
 
       case Karte of
       1:   KarteLbl.caption := '1';
       2:   KarteLbl.caption := '2';
       3:   KarteLbl.caption := '3';
       4:   KarteLbl.caption := '4';
       5:   KarteLbl.caption := '5';
       6:   KarteLbl.caption := '6';
 
       end;
 
    Karte := StrToInt (KarteLbl.Caption);
    NeueZahl := Karte+Karte;
    KarteLbl.Caption:= IntToStr(NeueZahl);
 
end;
Aber so scheint es noch nicht zu funktionieren.
Habt ihr eine Idee, wie man es richtig machen könnte?
Danke schonmal für eure Antwort.

LG
LordBukkit
Zuletzt geändert von Lori am Di 30. Apr 2013, 19:55, insgesamt 1-mal geändert.
Grund: Highlighter

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: "BlackJack" Zähler

Beitrag von Michl »

Du solltest für den Quellcode unbedingt den Highlighter verwenden, das mach das Lesen wirklich einfacher!

Zum Problem:

Code: Alles auswählen

procedure TForm1.NochEineBtnClick(Sender: TObject);
var Karte, NeueZahl :Integer;
begin
randomize;
Karte := random (6)+1;  //hier gibst du der Karte einen zufälligen Wert (1..6)
 
{case Karte of
1: KarteLbl.caption := '1';
2: KarteLbl.caption := '2';
3: KarteLbl.caption := '3';
4: KarteLbl.caption := '4';
5: KarteLbl.caption := '5';
6: KarteLbl.caption := '6';
 
end;}
 
KarteLbl.caption :=inttostr(Karte);  //macht das selbe, wie oben ausgeklammerter Code
 
Karte := StrToInt (KarteLbl.Caption);  //hier übeschreibst du den Wert wieder, den du vorher zufällig vergeben hast!
NeueZahl := Karte+Karte;
KarteLbl.Caption:= IntToStr(NeueZahl);
 
end;
 
daher so:

Code: Alles auswählen

procedure TForm1.NochEineBtnClick(Sender: TObject);
var Karte, NeueZahl :Integer;
begin
randomize;
 
NeueZahl := random (6)+1;                 //hier gibst du der Karte einen zufälligen Wert (1..6)
Karte := StrToInt ( KarteLbl.Caption );   //Übergabe des Wertes, der zuvor gespeichert war an Karte
NeueZahl := NeueZahl + Karte;             //Neue Zahl setzt sich aus der Zufallszahl und der vorherigen Zahl zusammen
KarteLbl.Caption:= IntToStr ( NeueZahl ); //Übergabe in deine Anzeige
 
//.....  oder alles in einem Aufwasch:
 
KarteLbl.Caption:= IntToStr( StrToInt ( KarteLbl.Caption ) +  random (6)+1 );
 
end;
 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

LordBukkit
Beiträge: 5
Registriert: Mo 29. Apr 2013, 12:49

Re: "BlackJack" Zähler

Beitrag von LordBukkit »

Alles klar, danke.
Jetzt habe ich es verstanden.

LordBukkit
Beiträge: 5
Registriert: Mo 29. Apr 2013, 12:49

Re: "BlackJack" Zähler

Beitrag von LordBukkit »

Hmm.
Ich hab das mal ausprobiert, aber da kommt trotzdem noch ein Fehler, in der Zeile:

Karte := StrToInt ( KarteLbl.Caption );

Da kommt, wenn ich auf den button klicke, die Nachricht, dass " " ein "invalid integer" ist.
Was genau bedeutet das, und wie kann ich das beheben?

Namos

Re: "BlackJack" Zähler

Beitrag von Namos »

Wahrscheinlich kommt das, weil beim ersten drücken noch kein Wert im KarteLbl.Caption steht.
Schreib da mal über den Objektinspektor für den Anfang unter "Caption" 0 rein.
Oder So:

Code: Alles auswählen

procedure TForm1.FormShow(Sender: TObject);
begin
  KarteLbl.Caption:= '0';
end; 
oder wenn du die Null nicht sichtbar haben willst am Anfang:

Code: Alles auswählen

procedure TForm1.NochEineBtnClick(Sender: TObject);
var
  Karte, NeueZahl :Integer;
begin
  randomize;
  NeueZahl := random (6)+1;  //hier gibst du der Karte einen zufälligen Wert (1..6)
 
  if KarteLbl.Caption = '' then  //Fehlerabfrage  (wenn Leerzeichen im Label statt dessen KarteLbl.Caption = ' ') 
    Karte := 0 
  else 
    Karte := StrToInt ( KarteLbl.Caption );  //Übergabe des Wertes, der zuvor gespeichert war an Karte
 
  NeueZahl := NeueZahl + Karte;  //Neue Zahl setzt sich aus der Zufallszahl und der vorherigen Zahl zusammen
  KarteLbl.Caption := IntToStr ( NeueZahl );  //Übergabe in deine Anzeige
end;
Mfg

Namos

Re: "BlackJack" Zähler

Beitrag von Namos »

Sicherer wäre natürlich eine Globale Variable für den alten Kartenwert zu nutzen. Dann hat man das Problem mit dem Fehler garnicht !

Code: Alles auswählen

 implementation
 
{$R *.lfm}
 
var
  Karte: Integer = 0;   //Initialisieirte Globale Variable
 
 
procedure TForm1.NochEineBtnClick(Sender: TObject);
var
  NeueZahl :Integer;
begin
  randomize;
  NeueZahl := random (6)+1;      //hier gibst du der Karte einen zufälligen Wert (1..6)
  NeueZahl := NeueZahl + Karte;  //Neue Zahl setzt sich aus der Zufallszahl und der vorherigen Zahl zusammen
  Karte:= NeueZahl;              //Neuen Wert in Globale Variable
  KarteLbl.Caption := IntToStr ( NeueZahl);  //Übergabe in deine Anzeige
end; 

Antworten