Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism If ... then problem (https://www.delphipraxis.net/67356-if-then-problem.html)

Hofnarr 13. Apr 2006 14:07


If ... then problem
 
ich habe nochmal ein problem... diesmal hoffentlich beim richtigen ort :oops:


nun habe ich wirklich ein problem... aber erst mal den Quelltext:

Delphi-Quellcode:
    if s=20 then
    if z>w20 then
   begin
    ptsw20.Caption:=inttostr(z);
    rekw20.Caption:=(name.text);
   end;

      if s=50 then
      if z>w50 then
     begin
      ptsw50.Caption:=inttostr(z);
      rekw50.caption:=(name.Text);
     end;

        if s=100 then
        if z>w100 then//fehler ptsw100 wird immer upgedatet
       begin
        ptsw100.caption:=inttostr(z);
        rekw100.Caption:=(name.Text);
       end;
nun bei einem kleinen Spiel habe ich quasi eine Punkteliste gemacht.

nun zum problem ptsw20/ptsw50/ptsw100 sollten nur ersetzt werden, wenn z ein höherer wert erreicht hat als bisher auf dem label "gespeichert" war. nur das Problem ist: dass bei ptsw20 die Regel stimmt und die anzeige nur aktualisiert wird wenn eine höhere zahl erreicht wurde. jedoch bei ptsw50/ptsw100 werden die Zahlen immer angebasst, auch wenn sie niedriger sind. hat jemand eine Idee?

Klaus01 13. Apr 2006 14:13

Re: If ... then problem
 
Delphi-Quellcode:

w20 := StrToInt(ptsw20.caption);
w50 := StrToInt(ptsw50.caption);
w100 := StrToInt(ptsw100.caption);

if s=20 then
  begin
    if z > w20 then
      begin
        ptsw20.Caption:=inttostr(z);
        rekw20.Caption:=(name.text);
      end;
   end
else
  if s=50 then
    begin
      if z > w50 then
        begin
          ptsw50.Caption:=inttostr(z);
          rekw50.caption:=(name.Text);
        end;
    end
  else
    if s=100 then
      if z > w100 then//fehler ptsw100 wird immer upgedatet
        begin
          ptsw100.caption:=inttostr(z);
          rekw100.Caption:=(name.Text);
        end;
Welchen Wert hat den z und w100 zu dem Zeitpunkt?

Grüße
Klaus

[edit] if..then etwas angepasst [/edit]

Hofnarr 13. Apr 2006 14:24

Re: If ... then problem
 
oh sry voll vergessen :)

z ist die momentan (in diesem Spiel) erreichte Punktzahl
w100 ist die höchste Punktzahl die bisher erreicht wurde

(w20,w50,w100 sind verschiedene Spielmodi)

freak4fun 13. Apr 2006 14:27

Re: If ... then problem
 
Hast du schonmal Breakpoints gesetzt und zur Laufzeit geguckt, welche Werte die Variablen haben? :gruebel:

MfG
freak

Klaus01 13. Apr 2006 14:30

Re: If ... then problem
 
Zitat:

z ist die momentan (in diesem Spiel) erreichte Punktzahl
w100 ist die höchste Punktzahl die bisher erreicht wurde

(w20,w50,w100 sind verschiedene Spielmodi)
w100 ist die Punktzahl und der Spielmodus?
oder ist w100 die Punktzahl und s=100 der Spielmodus?

Grüße
Klaus

Hofnarr 13. Apr 2006 14:37

Re: If ... then problem
 
jepp ich zeige es dir mal in einem Beispiel:
es ist ein würfelSpiel die Punktetabelle ist in w20 (würfel mit 20 seiten) w50 (50 Seitem) und w100 (100 seiten) Der Spielmodus wird durch eine eingabe definiert. (hier siet man die zuteilung für punkte und spielernamen)

geholte punkte(z):200
Rekord(w100): 250
obwohl

if z>w100 then

übernimmt w100 die zahl 200

Klaus01 13. Apr 2006 15:06

Re: If ... then problem
 
hast Du Dir den Code von mir oben mal angeschaut und ausprobiert?

hier kommt er nochmals aber mit case anstatt if then else zur Spielmoduserkennung.

Delphi-Quellcode:
w20 := StrToInt(ptsw20.caption);
w50 := StrToInt(ptsw50.caption);
w100 := StrToInt(ptsw100.caption);

case s of
  20 :  begin
           if z > w20 then
             begin
               ptsw20.Caption:=inttostr(z);
               rekw20.Caption:=(name.text);
             end;
         end;

  50 :  begin
           if z > w50 then
             begin
               ptsw50.Caption:=inttostr(z);
               rekw50.caption:=(name.Text);
             end;
         end;

  100:  begin     // hier mal ein breakpoint setzen mit F8 weitergehen und z und w100 anschauen
           if z > w100 then // ptsw100 wird upgedatet wenn z > w100 ist
             begin
               ptsw100.caption:=inttostr(z);
               rekw100.Caption:=(name.Text);
             end;
         end;
end; //case
Zitat:


geholte punkte(z):200
Rekord(w100): 250
obwohl

if z>w100 then

übernimmt w100 die zahl 200
200 > 250 ist false ->

z ist kleiner als w100
und w100 beibt auf 250.

z und w100 kannst Du dir anschauen, indem Du die Variable markierst und dan ctrl+f5 drückst.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz