Autor Beitrag
DonnieYen
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 07.02.10 18:33 
Hallo,
habe nen kleines Würfelspiel geschrieben.
Dabei habe ich zwei globale Variablen deklariert.
Punkte1 für den Spieler und Punkte2 für den PC-Gegner.
Doch es tritt immer der Else Fall auf obwohl z.B. Punkte1 = 2 und Punkte2 = 0 sind.
Wo liegt hier der Fehlerteufel?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 if Punkte1 > Punkte2 then
      showmessage('Du hast gegen den bösen Rechner gewonnen!')
    else if Punkte1 < Punkte2 then
      showmessage('Du hast leider gegen den bösen Rechner verloren!')
        else if Punkte1 = Punkte2 then
          showmessage('Es steht Unentschieden zwischen dir und dem Rechner!')

      end;


Habe die If-Anweisung derselben Prozedur drinnen,in der auch die Würfel generiert werden.
Ist das vielleicht der Fehler?
Wo bzw. wie könnte ich die If Anweisung schöner verstecken/aktiviern lassen?

LG,
DonnieYen

PS.
Der in Sachen Delphi fleißig dazu lernt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 07.02.10 18:45 
Hallo und :welcome: !

user profile iconDonnieYen hat folgendes geschrieben Zum zitierten Posting springen:
Dabei habe ich zwei globale Variablen deklariert.
Was das Problem sein könnte...
Wozu globale Variablen?

user profile iconDonnieYen hat folgendes geschrieben Zum zitierten Posting springen:
Doch es tritt immer der Else Fall auf obwohl z.B. Punkte1 = 2 und Punkte2 = 0 sind.
Wo liegt hier der Fehlerteufel?
Dass die Variablen andere Werte haben. Lass sie dir vorher ausgeben zum Test oder weise sie vorher direkt zu, dann siehst du es.

user profile iconDonnieYen hat folgendes geschrieben Zum zitierten Posting springen:
Wo bzw. wie könnte ich die If Anweisung schöner verstecken/aktiviern lassen?
Schöner? Indem du sie ordentlich formatierst, außerdem kannst du dir das letzte if im else sparen, denn was könnte es außer > oder < sonst noch sein? :zwinker:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  if Punkte1 > Punkte2 then
    ShowMessage('Du hast gegen den bösen Rechner gewonnen!')
  else if Punkte1 < Punkte2 then
    ShowMessage('Du hast leider gegen den bösen Rechner verloren!')
  else
    ShowMessage('Es steht Unentschieden zwischen dir und dem Rechner!')
end;
DonnieYen Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 07.02.10 20:14 
Hallo,
danke für deine Antwort.
Tatsächlich,den Variablen wird kein Wert zugewiesen.
Dabei ist es egal ob ich sie global oder lokal deklariere.
Muss wohl ein Denkfehler im Algorithmus sein.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  if ((a=b) and (a=c) and (a=d) and (a=e)) or     //Fünfling
     ((b=a) and (b=c) and (b=d) and (b=e)) or
     ((c=a) and (c=b) and (c=d) and (c=e)) or
     ((d=a) and (d=b) and (d=c) and (d=e)) or
     ((e=a) and (e=b) and (e=c) and (e=d)) then  
    begin
      edSpieler1.Text:= 'Fünfling';
      Punkte1:=7;
    end                                    
  else if ...


Es wird an dieser Stelle kein Wert zugewiesen.
Ich stehe irgendwie auf dem berühmten Schlauch.


Zuletzt bearbeitet von DonnieYen am So 07.02.10 20:15, insgesamt 1-mal bearbeitet
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: So 07.02.10 20:15 
Haltepunkt setzen (F5) und gucken, was in den Variablen drin steht.

_________________
PROGRAMMER: A device for converting coffee into software.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 07.02.10 20:19 
user profile iconDonnieYen hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  if ((a=b) and (a=c) and (a=d) and (a=e)) or     //Fünfling
     ((b=a) and (b=c) and (b=d) and (b=e)) or
     ((c=a) and (c=b) and (c=d) and (c=e)) or
     ((d=a) and (d=b) and (d=c) and (d=e)) or
     ((e=a) and (e=b) and (e=c) and (e=d)) then  
    begin
Überlege einmal was du da tust...
Du fragst auf 5 verschiedene Arten exakt das selbe ab. Wenn alle 5 Werte gleich sind, dann sind sie es, egal wie du sie vergleichst. Deshalb kannst du dir die 4 weiteren Zeilen sparen.
DonnieYen Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 07.02.10 20:25 
Ist mir grad selber aufgefallen,
habe den Fünfling als letztes eingebaut und wenn man vorher bei ner Straße alle Möglichkeiten durchgegangen ist dann hat man eine kleine Routine im Kopf.

Wenn ich statt der Variable "Punkte1" "z" verwende funktioniert es.
Dürfen also Variablen nicht lange Namen haben?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 07.02.10 20:29 
Das hört sich danach an als hättest du vergessen den Code in sinnvolle Teile zu unterteilen, so dass jetzt irgendwo deine Variable überschrieben wird ohne dass du es merkst...

Was passiert kann dir nur der Debugger sagen, wir ohne den restlichen Code nicht. Am Variablennamen selbst liegt es 100%ig nicht, nur an der Verwendung der Variable.
DonnieYen Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 07.02.10 20:51 
Nachdem es beim Fünfling einzeln geklappt hat,
klappt es jetzt wieder nicht.

Entschuldigt - aber er ist für so ein primitives Ziel ziemlich lang und teilweise unnötig?

Gruß


Zuletzt bearbeitet von DonnieYen am So 07.02.10 21:48, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 07.02.10 20:56 
Du setzt vor deiner if-Abfrage Punkte2 immer auf 0...

user profile iconDonnieYen hat folgendes geschrieben Zum zitierten Posting springen:
Entschuldigt - aber er ist für so ein primitives Ziel ziemlich lang und teilweise unnötig?
Ja, extrem lang, das lässt sich sicher sehr sehr viel kürzer lösen.
DonnieYen Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 07.02.10 21:02 
DANKE!
Ich habe die Verbundanweisung vergessen.
Ich glaube,ich muss mir beibringen,den Quelltext vorher Zeile für Zeile genau zu lesen,bevor ich hier mit sowas ankomme.
Danke!

Da machst du mich ganz neugierig.
Doch meine Kenntnisse sind eher bescheiden - wüsste jetzt auf Anhieb nicht,wie ich den Quelltext verkürzen sollte.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 07.02.10 21:08 
Was bei dem sehr langen Quelltext natürlich auch nicht so leicht fällt... (also den Zeile für Zeile zu lesen)

Beispiel Straße: Eigentlich willst du nur wissen, ob a, b, c, d und e eine Permutation von 1 bis 5 bzw, 2 bis 6 enthalten. Das lässt sich in einem Bruchteil deines Codes lösen. Zum Beispiel mit einem Array statt 5 Variablen. Davon kannst du einfach eine sortierte Kopie erstellen und bist bereits quasi fertig. ;-)
DonnieYen Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 07.02.10 22:01 
Tja,
Array,
bis dahin reicht mein Kenntnisstand noch nicht.
Aber ich werde mich einlesen,danke für den Tipp.
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: So 07.02.10 22:28 
Hier empfiehlt sich der Suche bei Google DELPHI CRASHKURS von TUFKAPL [Christian S.]