Ellenlange Zeile[Erledigt]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Foppele

Betreff: Ellenlange Zeile[Erledigt]

BeitragMo, Dez 17, 2007 14:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,
Ich schäme mich ja fast das zu fragen Embarassed
aber ich hab nix drüber gefunden:

Wenn ich bei einer If- Abfrage mehrere Bedingungen, die erfüllt sein müssen, hinzufüge, mache ich das ja so:

IF dings=bums AND Bla=Blub AND mops=0 THEN...


Jetzt habe ich aber so viele und so lange Bedingungen, das die Zeile 3 Bildschirmlängen braucht.
Wenn ich es aber in mehrere Zeilen aufteilen will:

IF dings=bums AND
Bla=Blub AND
mops=0 THEN

oder

IF dings=bums
AND
Bla=Blub
AND
mops=0 THEN

funktioniert es nicht. Wie teilt man das korrekt auf? Geht das vielleicht garnicht?
  • Zuletzt bearbeitet von Foppele am Mo, Dez 17, 2007 15:02, insgesamt einmal bearbeitet

Schnittlauch

Unkraut

BeitragMo, Dez 17, 2007 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Verschachtel einfach mehrere ifs.

If bla = true then
if blubbel = true then
if kurt = blubblel then
....
end if
end if
end if
Ich wars nicht.

Smily

BeitragMo, Dez 17, 2007 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst auch ersteinmal versuchen, ob ein paar dieser Abfragen vlt überflüssig sind, bzw ob du schon vorher ein paar Variablen wegnehmen kannst.

Bei einem guten Programmierstil dürfte man eigentlich garnicht in so eine Situation kommen Wink
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Foppele

BeitragMo, Dez 17, 2007 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Schnittlauch+smiley:
So ähnlich hatte ich's auch schon mal gemacht, fällt mir gerade ein... für jede Bedingung eine Variable und dann die abfragen. Ich dachte DAS wäre schlechter Programmierstil, und normalerweise macht man's anders Confused
Danke!

Smily

BeitragMo, Dez 17, 2007 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaube du hast mich falsch verstanden.

Eigentlich kann ich mir nicht vorstellen, wie man an einen Punkt kommen sollte, in dem Man duzente Variablen gleichzeitig prüfen muss.

Um was für ein Programm geht es denn? Mal sehen, ob sich das irgendwie komplett anders lösen lässt

cu,
Smily0412
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Foppele

BeitragMo, Dez 17, 2007 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, nach euren Tipps hab ichs mir so gebaut:
Code: [AUSKLAPPEN]
   
      Local u = 0
      Local v = 0
      Local w = 0
   
      If EntityX#(b\mesh)-EntityX#(b2\target) <= tolerance And EntityX#(b\mesh)-EntityX#(b2\target) >= -tolerance Then u = 1
      
      If EntityY#(b\mesh)-EntityY#(b2\target) <= tolerance And EntityY#(b\mesh)-EntityY#(b2\target) >= -tolerance Then v = 1
      
      If EntityZ#(b\mesh)-EntityZ#(b2\target) <= tolerance And EntityZ#(b\mesh)-EntityZ#(b2\target) >= -tolerance Then w = 1
      
      
      If u = 1 And v = 1 And w=1 Then
      
      PositionEntity b\mesh,EntityX#(b2\target),EntityY#(b2\target),EntityZ#(b2\target)
      
      EndIf


Das stand halt vorher in einer Zeile...
[EDIT] Nach dem Codeeinfügen sind die Zeilen ein bisschen verrutscht...

Baschdi

BeitragMo, Dez 17, 2007 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
so lang ist die zeile gar net ....also ich hab teilweise viel längere ...außerdem hast du zwischen jedem = und der zahl ein leerzeichen ..das ist nicht unbedingt nötig ...sieht zwar schöner aus aber wenn du lieber kürzere zeilen haben willst dann lösch diese überflüssigen leerzeichen raus

mfg

Außerdem kannst du die var tolerance auch durch ne kleinere ersetzten ... z.b tol
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden

SpionAtom

BeitragMo, Dez 17, 2007 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Und falls du noch mehr Bedingungen hast, kannst du statt u, v, w, auch einfach nur u verwenden und bei jeder erfüllten Teilbedingung u = u + 1 setzen. Am Ende müsstest du dann nicht mehr if u = 1 and v = 1 and w = 1 abfragen, sondern einfach: If u = 3.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Foppele

BeitragMo, Dez 17, 2007 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Logisch. Da stand ich mal wieder aufm Schlauch... ich glaub am schönsten find ich die verschachtelten IFs von Schnittlauch Smile

Smily

BeitragDi, Dez 18, 2007 9:56
Antworten mit Zitat
Benutzer-Profile anzeigen
schonmal an eine Funktion gedacht?

(Hab den Code aus dem kopf gemacht.. müsste aber funktionieren)
Code: [AUSKLAPPEN]
 
If EntityDistance(b\mesh, b2\target) <= tolerance
  ;blablabla
end if

Function EntityDistance#(mesh1, mesh2)
   xabs# = entityx(mesh1) - entityx(mesh2)
   yabs# = entityy(mesh1) - entityy(mesh2)
   zabs# = entityz(mesh1) - entityz(mesh2)
   ; 3-Dimensionaler Pythagoras
   dist# = sqr(xabs^2+yabs^2)
   dist = sqr(dist^2 + zabs^2)
   return dist
End


(btw.. Der code funzt ein kleines bisschen anders.. bei dir hat der Tolleranzberreich die Form eines gedachten Würfels um die Figur herum. Bei mir hat der Berreich die Form einer Kugel)

cu,
Smily0412
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Foppele

BeitragDi, Dez 18, 2007 12:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Smile Nett das du dir noch Gedanken drum gemacht hast, wär aber nicht nötig gewesen.
Der Toleranzbereich wird absichtlich nicht trigonometrisch berechnet weil es für diesen Zweck unnötig genau ist.

P.S.
3D Pythagoras kann man auch in eins berechnen,

dist# = Sqr#(xabs^2.0+yabs^2.0+zabs^2.0)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group