Entwickler-Ecke

Sonstiges (Delphi) - Zahlenwerte sollen nicht <0 werden...wie schaff ich das?


killercode - So 06.02.05 16:12
Titel: Zahlenwerte sollen nicht <0 werden...wie schaff ich das?
Hi!

Hab ein kleines Problem...
Ich möchte mit einem Bekannten ein textbasiertes OnlineRollenspiel schreiben und
bin grad an dem Punkt: Charaktererstellung. (Ich test grad alles mögliche für mich selbst...bin Anfänger! :D )
Sooo nun habe ich vorgegebene Atttributpunkte und die kann ich ja auch schon
auf ein Atttribut verteilen nur - ich kann mehr Punkte vergeben als ich habe (es zählt dann in den negativen bereich rein....)?!!!
Wie kann ich das unterbinden?

Bitte um schnelle, hilfreiche Anregungen!

thx&ciao

P.S.:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
...
procedure TForm2.FormCreate(Sender: TObject);
begin
     Form2.Caption:='*Charaktermenü*'//Hier werden die Startwerte festgelegt...
     name:=Namen.text;                 //Namensvariable wird aus dem Editfeld gelesen
     punkt:=5;                         //[X-Punkte zur selbstständigen Verteilung der Anfangswerte]
     punkte.Caption:=IntTostr(punkt);  //Anfangswert "Attributpunkte" = 0 auf Panel ausgegeben
     Strke.Caption:=IntToStr(stark);   //Anfangswert "Stärke" = 0 auf Panel ausgegeben
     Treffsicher.Caption:=IntToStr(treff); //Anfangswert "Treffsicherheit" = 0 auf Panel ausgegeben
     Ausdauer.Caption:=IntToStr(ausd); //Anfangswert "Ausdauer" = 0 auf Panel ausgegeben

// Treffsicherheit und Ausdauer sind noch nicht Skillbar, Versuch erstmal nur auf Stärke beschränkt
end;

procedure TForm2.strupClick(Sender: TObject); //"+ Button" (ein Panel) um ein Punkt auf Stärke zu setzen
begin
     stark:=StrToInt(Strke.Caption); //aktuellen Stärkewert einlesen (ist ja 0)
     stark:=stark+1;                 // +1 zu Stärke
     Strke.Caption:=IntToStr(stark); //neuen Stärke-Wert auf dem Panel anzeigen
     punkt:=StrToInt(Punkte.Caption);//aktuelle Attributpunkte zum skillen (erstmal 5)
     punkt:=punkt-1;                 //beim clicken wird von der Gesammtpunktzahl einer abgezogen
     punkte.Caption:=IntTostr(punkt);//zu vergebende Punkte werden aktualisiert
end;
...


Bitte nicht schimpfen wenns schlecht/sinnlos/dumm gelöst wurde.
Es reagiert auf die UP- und DOWN-Schalte der Eigenschaft:Stärke.


sourcehunter - So 06.02.05 16:53

Du musst um die Anweisungen in TForm2.strupClick eine if-Abfrage schreiben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm2.strupClick(Sender: TObject); //"+ Button" (ein Panel) um ein Punkt auf Stärke zu setzen   
begin
   if punkt>0 then
   begin   
     stark:=StrToInt(Strke.Caption); //aktuellen Stärkewert einlesen (ist ja 0)   
     stark:=stark+1;                 // +1 zu Stärke   
     Strke.Caption:=IntToStr(stark); //neuen Stärke-Wert auf dem Panel anzeigen   
     punkt:=StrToInt(Punkte.Caption);//aktuelle Attributpunkte zum skillen (erstmal 5)   
     punkt:=punkt-1;                 //beim clicken wird von der Gesammtpunktzahl einer abgezogen   
     punkte.Caption:=IntTostr(punkt);//zu vergebende Punkte werden aktualisiert   
   end
   else ShowMessage('Was soll der Mist!!! Wenn ich sage, du hast keine Punkte mehr, dann hast du keine mehr!!!');
end;


IngoD7 - So 06.02.05 16:56

Du kennst if..then nicht?

Frage vorher ab, ob überhaupt noch Punkte übrig sind:

Delphi-Quelltext
1:
2:
3:
4:
if punkt > 0 then
   begin
   ...
   end;


killercode - So 06.02.05 17:37

Ach shyce! :D

Also:
1. DANKE!!! Aber ich kenn If...Then, aber
2. Hab die Schleife bei mir falsch gesetzt! ^^
3. Bin voll der Anfänger... :roll: :lol:

Vielen Dank Leute, jezze kanns weitergehn...

ciao

EDIT: OK hab jetzt die beiden anderen Atttribute (Konstitution und Treffsicherheit) eingebaut und was ist: Ich kann die 5 Punkte verteilen aber jetzt kann ich auch wieder in den negativen Bereich der Attribute, damit kann ich die Skillpunkte wieder auf 5 Hochtreiben und sozusagen eine Eigenschaft total in den Minusbereich treiben und eine andere dafür total hoch...wieso kann man nicht sagen [X Element der pos. Ganzzahlen] ???
Oder geht das irgendwie????

thx


IngoD7 - Mo 07.02.05 10:25

killercode hat folgendes geschrieben:
Ich kann die 5 Punkte verteilen aber jetzt kann ich auch wieder in den negativen Bereich der Attribute, damit kann ich die Skillpunkte wieder auf 5 Hochtreiben und sozusagen eine Eigenschaft total in den Minusbereich treiben und eine andere dafür total hoch...
Dann sitzen deine if-Abfragen immer noch oder schon wieder falsch. Da aber niemand deinen aktuellen Code kennt ...

killercode hat folgendes geschrieben:
wieso kann man nicht sagen [X Element der pos. Ganzzahlen] ???
Kann man ja, aber hilft dir nichts. Wenn du trotzdem versuchst, noch einen abzuziehen, obwohl der Wert schon auf Null ist, wird's trotzdem knallen (Programmfehler oder logischer Fehler (Rückwärtsüberlauf bei Typ Byte, z.B.)).

Du wirst wohl oder übel - wie oben beschrieben - das Subtrahieren durch eine entsprechende if-Abfrage verhindern müssen.