Was redet ihr da???
(dizzy meint übrigens sinngemäß das richtige)
Die
then-Anweisung
Delphi-Quellcode:
case KI_LVL of
1: if (Ball.Top) or (Ball2.Top) <= KI_LVL1 then ...
wurde in Abhängigkeit der Werte von Ball.Top, Ball2.Top und KI_LVL1 ausgeführt, oder nicht. Die beiden Ball-Werte wurden einfach ODER-verknüpft. Das ist rechnerisch (und delphi-technisch) möglich. Es wurde somit einfach nur eine Zahl mit einer anderen verglichen.
Bei
Ball.Top = 2
Ball2.Top = 4
KI_LVL1 = 5
würde
then nicht ausgeführt, weil 2 OR 4 gleich 6 ist --> 6 größer 5 ==> nicht ausführen.
Das war auch der Fehler, dass wenn sogar beide Ball-Werte (oder auch nur einer) eigentlich unter dem Vergleichswert KI_LVL1 lagen, die Anweisung trotzdem nicht immer ausgeführt werden konnte, weil das Ergebnis der ODER-Verknüpfung über dem Vergleichswert lag.
Dass Delphi sich hier nicht beschwert, ist völlig korrekt. Es war legaler Code, nur eben für den angedachten Zweck logisch falsch.