If Verzweigung falsch??

  • Allgemein

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von K-42.

    If Verzweigung falsch??

    Hallo,
    habe angefangen an einem kleinem Spiel zu programmieren.

    Screenshot:


    ________________________
    Der grüne Mensch- Picture1
    " rote " - Picture2
    Dollar 1 - Picture5
    Dollar 2 - Picture3
    _________________________

    Wenn "Picture1" oder "Picture2" genau auf "Picture5" trifft sollen einige Reaktionen zu Stande kommen.

    Ich habe dafür folgenden Code verwendet aber es ging irgendwie nicht. Es passiert nichts wenn sie sich treffen. Deswegen bräuchte ich eure Hilfe.

    Quellcode

    1. If Picture1.Left = Picture5.Left And Picture1.Top = Picture5.Top Then Label3.Caption = Label3.Caption + 1


    Was mache ich falsch?
    DANKE IM VORAUS.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „K-42“ ()

    Versuch's mal hiermit:

    If ((Picture1.Left + Picture1.Width) >= Picture5.Left) Or ((Picture1.Top + Picture1.Height) >= Picture5.Top) Then Label3.Caption = CStr(CInt(Label3.Caption) + 1)

    btw: Topic verschoben
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    wenn du es in VB2005 machst, dann ist es nicht Label3.Caption, sondern Label3.Text.

    Ansonsten versuche mal den wert von Label in einer Variable dazuzählen, also ungefähr so:

    VB.NET-Quellcode

    1. If Picture1.Left = Picture5.Left And Picture1.Top = Picture5.Top Then
    2. Dim zahl As Integer
    3. zahl = Label3.Caption
    4. Label3.Caption = zahl + 1
    5. End If
    Hi,

    VB.NET-Quellcode

    1. If ((Picture1.Left + Picture1.Width) = Picture5.Left) And (Picture1.Top >= Picture5.Top AND Picture1.Top <= Picture5.Top + Picture5.Height) Then Label3.Caption = Val(Label3.Caption) + 1


    Die Abfrage beachtet in der Höhe nur den obersten Punkt des Männchen!! Die anderen Punkte in der Höhe musst Du mal selbst versuchen! Ich gehe davon aus, dass das Männchen beliebig viele Zwischenschritte machen kann (im Verhältnis zum Dollar).

    Hier mal noch eins, zwei Tips:
    - vergib für Deine Pictureboxen "vernüftige" Namen (z.B. picMannGruen)
    - verwende für die Gegenstände ein Steuerelementefeld (--> Boardsuche) um die Kollisionsabfrage im "Rahmen" zu halten



    bye ...

    LaMa5.

    btw: Topic verschoben
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de
    lol, das nenne ich mal gleichzeitiges posten (3x auf einmal)!

    @LaMa5: Ich hatte das Topic vor dir auch schon verschoben (ins gleiche Forum) und einen fast identischen Code gepostet. Wobei bei dir in der Mitte noch "And" steht, muss es nicht "Or" heißen (wie bei mir)?

    @Nikolai: Dein Code unterscheidet sich eigentlich nicht vom Ursprungscode, er ist nur umständlicher ;)
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hi,

    Ich hatte das Topic vor dir auch schon verschoben (ins gleiche Forum)...

    Das hab ich bemerkt. Ich hatte bloß keinen Bock meinen Post noch mal zu ändern.

    ...muss es nicht "Or" heißen...

    eigentlich nicht. ich will doch prüfen ob der rechte Rand den Dollar berüht UND das nur wenn die obere Kante in der gleichen Höhe ist!! Es kann aber gut sein, dass ich mich mit den PictureBoxen "verhauen" hab.

    Aber ein anderer "Fehler" ist mir noch aufgefallen. Bei der Prüfung des rechten Rand muss es >= (wie bei Marcus) heissen und nicht = !!


    bye ...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de
    Hi,

    was kann man tun?


    1.) die Steuerelemente vernünftig bezeichnen
    2.) mal etwas mehr Quellcode zur Verfügung stellen oder das Projekt zippen und als Download anbieten!!


    bye ...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LaMa5“ ()

    Hab die Steuerelemente schon unbenannt... werde auch gleich alles hochladen und diesen Post bearbeiten. Einfach mal gleich vorbeischauen...

    Edit:
    Hier sind die Dateien:
    -Download-

    Der grüne Spieler bewegt sich mit : A,S,D,W
    Der rote: J,K,L,I

    Habe die Pfeiltasten nicht benutzt, weil ich noch andere Sachen später mit denen vor hatte.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „K-42“ ()

    Hi,

    folgender Code ersetzt die 3(!) Anweisungen die mit "If Gruen.Left ..." beginnen:

    VB.NET-Quellcode

    1. If ((Gruen.Left + Gruen.Width) >= Dollar1.Left) And (Gruen.Left <= (Dollar1.Left + Dollar1.Width)) And _
    2. ((Gruen.Top + Gruen.Height) >= Dollar1.Top) And (Gruen.Top <= (Dollar1.Top + Dollar1.Height)) And _
    3. Dollar1.Visible Then
    4. Gruenpunkt.Caption = Gruenpunkt.Caption + 1
    5. Dollar1.Visible = False
    6. Dollar2.Visible = True
    7. End If


    Die anderen Anweisungen kannst Du dann analog umsetzen.


    bye...

    LaMa5.


    Edit: Wenn Du immer nur einen Dollar gleichzeitig anzeigen möchtest, würde ich nicht den vorhandenen unsichtbar machen, sondern neu positionieren. Die Daten der neuen Positionen kannst Du ja in einem Array unterbringen.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LaMa5“ ()

    Die Figuren bewegen sich in 100´er Schritten. Beginnend bei 1640. Die Dollars sind aber nicht auf irgendwas 40 sondern auf Positionen, die die Figuren durch ihre 100´er Schritte nicht genau treffen.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Original von LaMa5
    Hi,

    folgender Code ersetzt die 3(!) Anweisungen die mit "If Gruen.Left ..." beginnen:

    VB.NET-Quellcode

    1. If ((Gruen.Left + Gruen.Width) >= Dollar1.Left) And (Gruen.Left <= (Dollar1.Left + Dollar1.Width)) And _
    2. ((Gruen.Top + Gruen.Height) >= Dollar1.Top) And (Gruen.Top <= (Dollar1.Top + Dollar1.Height)) And _
    3. Dollar1.Visible Then
    4. Gruenpunkt.Caption = Gruenpunkt.Caption + 1
    5. Dollar1.Visible = False
    6. Dollar2.Visible = True
    7. End If


    Die anderen Anweisungen kannst Du dann analog umsetzen.


    bye...

    LaMa5.


    Edit: Wenn Du immer nur einen Dollar gleichzeitig anzeigen möchtest, würde ich nicht den vorhandenen unsichtbar machen, sondern neu positionieren. Die Daten der neuen Positionen kannst Du ja in einem Array unterbringen.

    VIELEN DANK! Es hat funktioniert.

    @peterfido: Danke für deinen Tipp.