Funktionen werden übersprungen

  • Hallo,

    [autoit]


    Func einsatz()
    card()
    card2()
    main()
    EndFunc

    [/autoit]


    Nur die Funktion main() wird ausgeführt. der Rest nicht. wie kann ich das verhindern?
    leider geht es aus technischen gründen sowas wie

    [autoit]

    Func einsatz()
    card()
    EndFunc
    Func card()
    card2()
    ....

    [/autoit]


    Nicht.
    Könnt ihr mir helfen?

  • [autoit]

    Func test()
    if Bedingung = "true" then card()
    if Bedingung2 = "true" then card2()
    main()
    Endfunc

    [/autoit]

    zum Beispiel wenn Du nur bestimmte Funktionen aufrufen willst,
    musst du dem Programm schon sagen was wann wie gelten soll. :)

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Ein Blackjack Programm. Jetzt soll es für 2 Spieler erweitert werden.

    Spoiler anzeigen
    [autoit]


    $cash = 30
    $cash2 = 30
    $wert = 0
    $wert2 = 0
    $player1 = True
    $player2 = True
    einsatz()
    Func einsatz()
    Global $player1 = True
    Global $player2 = True
    Global $wert = 0
    Global $wert1 = 0
    Global $in = InputBox("Einsatz", "Player 1, wieviel Geld willst du einsetzen?")
    Global $in2 = InputBox("Einsatz", "Player 2, wieviel Geld willst du einsetzen?")
    If @error Then Exit
    If $in < 1 Then
    MsgBox(0, "Einsatz", "Bitte neuen Einsatz wählen. Zu niedrig")
    einsatz()
    EndIf
    If $in > $cash Then
    MsgBox(0, "Einsatz", "Du hast nicht genug Geld!")
    einsatz()
    EndIf
    If $in2 < 1 Then
    MsgBox(0, "Einsatz", "Bitte neuen Einsatz wählen. Zu niedrig")
    einsatz()
    EndIf
    If $in2 > $cash2 Then
    MsgBox(0, "Einsatz", "Du hast nicht genug Geld!")
    einsatz()
    EndIf
    card()
    card2()
    main()
    EndFunc
    Func card()
    $cardr = Random(1, 13, 1)
    If $cardr = 1 Then
    $card = "Ass(1)"
    $wert = $wert + 1
    ElseIf $cardr = 2 Then
    $card = "Zwei(2)"
    $wert = $wert + 2
    ElseIf $cardr = 3 Then
    $card = "Drei(3)"
    $wert = $wert + 3
    ElseIf $cardr = 4 Then
    $card = "Vier(4)"
    $wert = $wert + 4
    ElseIf $cardr = 5 Then
    $card = "Fünf(5)"
    $wert = $wert + 5
    ElseIf $cardr = 6 Then
    $card = "Sechs(6)"
    $wert = $wert + 6
    ElseIf $cardr = 7 Then
    $card = "Sieben(7)"
    $wert = $wert + 7
    ElseIf $cardr = 8 Then
    $card = "Acht(8)"
    $wert = $wert + 8
    ElseIf $cardr = 9 Then
    $card = "Neun(9)"
    $wert = $wert + 9
    ElseIf $cardr = 10 Then
    $card = "Zehn(10)"
    $wert = $wert + 10
    ElseIf $cardr = 11 Then
    $card = "Bube(11)"
    $wert = $wert + 11
    ElseIf $cardr = 12 Then
    $card = "Dame(12)"
    $wert = $wert + 12
    ElseIf $cardr = 13 Then
    $card = "König(13)"
    $wert = $wert + 13
    EndIf
    EndFunc
    Func card2()
    $cardr2 = Random(1, 13, 1)
    If $cardr2 = 1 Then
    $card2 = "Ass(1)"
    $wert2 = $wert2 + 1
    ElseIf $cardr2 = 2 Then
    $card2 = "Zwei(2)"
    $wert2 = $wert2 + 2
    ElseIf $cardr2 = 3 Then
    $card2 = "Drei(3)"
    $wert2 = $wert2 + 3
    ElseIf $cardr2 = 4 Then
    $card2 = "Vier(4)"
    $wert2 = $wert2 + 4
    ElseIf $cardr2 = 5 Then
    $card2 = "Fünf(5)"
    $wert2 = $wert2 + 5
    ElseIf $cardr2 = 6 Then
    $card2 = "Sechs(6)"
    $wert2 = $wert2 + 6
    ElseIf $cardr2 = 7 Then
    $card2 = "Sieben(7)"
    $wert2 = $wert2 + 7
    ElseIf $cardr2 = 8 Then
    $card2 = "Acht(8)"
    $wert2 = $wert2 + 8
    ElseIf $cardr2 = 9 Then
    $card2 = "Neun(9)"
    $wert2 = $wert2 + 9
    ElseIf $cardr2 = 10 Then
    $card2 = "Zehn(10)"
    $wert2 = $wert2 + 10
    ElseIf $cardr2 = 11 Then
    $card2 = "Bube(11)"
    $wert2 = $wert2 + 11
    ElseIf $cardr2 = 12 Then
    $card2 = "Dame(12)"
    $wert2 = $wert2 + 12
    ElseIf $cardr2 = 13 Then
    $card2 = "König(13)"
    $wert2 = $wert2 + 13
    EndIf
    EndFunc
    Func main()
    MsgBox(0, "Karte", "Player 1, du hast die Karte: " & $card)
    MsgBox(0, "Karte", "Player 2, du hast die Karte: " & $card2)
    If $wert > 21 Then
    MsgBox(0, "Verloren", "Player 1, Du bist über dem Wert 21! Du bist raus.")
    $player1 = False
    MsgBox(0, "Cash", "Player 1, dein momentaner Cash: " & $cash)
    If $player2 = False Then
    $choose_loose = MsgBox(4, "Bank", "Player 1, Player 2, wollt ihr nochmal spielen?")
    If $choose_loose = 6 Then
    einsatz()
    Else
    Exit
    EndIf
    EndIf
    EndIf
    If $wert2 > 21 Then
    MsgBox(0, "Verloren", "Player 2, Du bist über dem Wert 21! Du bist raus.")
    $player2 = False
    MsgBox(0, "Cash", "Player 2, dein momentaner Cash: " & $cash2)
    If $player1 = False Then
    $choose_loose2 = MsgBox(4, "Bank", "Player 1, Player 2, wollt ihr nochmal spielen?")
    If $choose_loose2 = 6 Then
    einsatz()
    Else
    Exit
    EndIf
    EndIf
    EndIf
    EndFunc

    [/autoit]

    Dietmar:
    Es soll ja alles drei hintereinander ausgeführt werden.

  • Es werden alle Funktionen aufgerufen:

    Spoiler anzeigen
    [autoit]

    $cash = 30
    $cash2 = 30
    $wert = 0
    $wert2 = 0
    $player1 = True
    $player2 = True
    Local $card, $card2
    einsatz()
    Func einsatz()
    Global $player1 = True
    Global $player2 = True
    Global $wert = 0
    Global $wert1 = 0
    Global $in = InputBox("Einsatz", "Player 1, wieviel Geld willst du einsetzen?")
    Global $in2 = InputBox("Einsatz", "Player 2, wieviel Geld willst du einsetzen?")
    If @error Then Exit
    If $in < 1 Then
    MsgBox(0, "Einsatz", "Bitte neuen Einsatz wählen. Zu niedrig")
    einsatz()
    EndIf
    If $in > $cash Then
    MsgBox(0, "Einsatz", "Du hast nicht genug Geld!")
    einsatz()
    EndIf
    If $in2 < 1 Then
    MsgBox(0, "Einsatz", "Bitte neuen Einsatz wählen. Zu niedrig")
    einsatz()
    EndIf
    If $in2 > $cash2 Then
    MsgBox(0, "Einsatz", "Du hast nicht genug Geld!")
    einsatz()
    EndIf
    card()
    card2()
    main()
    EndFunc ;==>einsatz
    Func card()
    MsgBox(0, "", "Card")
    $cardr = Random(1, 13, 1)
    If $cardr = 1 Then
    $card = "Ass(1)"
    $wert = $wert + 1
    ElseIf $cardr = 2 Then
    $card = "Zwei(2)"
    $wert = $wert + 2
    ElseIf $cardr = 3 Then
    $card = "Drei(3)"
    $wert = $wert + 3
    ElseIf $cardr = 4 Then
    $card = "Vier(4)"
    $wert = $wert + 4
    ElseIf $cardr = 5 Then
    $card = "Fünf(5)"
    $wert = $wert + 5
    ElseIf $cardr = 6 Then
    $card = "Sechs(6)"
    $wert = $wert + 6
    ElseIf $cardr = 7 Then
    $card = "Sieben(7)"
    $wert = $wert + 7
    ElseIf $cardr = 8 Then
    $card = "Acht(8)"
    $wert = $wert + 8
    ElseIf $cardr = 9 Then
    $card = "Neun(9)"
    $wert = $wert + 9
    ElseIf $cardr = 10 Then
    $card = "Zehn(10)"
    $wert = $wert + 10
    ElseIf $cardr = 11 Then
    $card = "Bube(11)"
    $wert = $wert + 11
    ElseIf $cardr = 12 Then
    $card = "Dame(12)"
    $wert = $wert + 12
    ElseIf $cardr = 13 Then
    $card = "König(13)"
    $wert = $wert + 13
    EndIf
    EndFunc ;==>card
    Func card2()
    MsgBox(0, "", "Card2")
    $cardr2 = Random(1, 13, 1)
    If $cardr2 = 1 Then
    $card2 = "Ass(1)"
    $wert2 = $wert2 + 1
    ElseIf $cardr2 = 2 Then
    $card2 = "Zwei(2)"
    $wert2 = $wert2 + 2
    ElseIf $cardr2 = 3 Then
    $card2 = "Drei(3)"
    $wert2 = $wert2 + 3
    ElseIf $cardr2 = 4 Then
    $card2 = "Vier(4)"
    $wert2 = $wert2 + 4
    ElseIf $cardr2 = 5 Then
    $card2 = "Fünf(5)"
    $wert2 = $wert2 + 5
    ElseIf $cardr2 = 6 Then
    $card2 = "Sechs(6)"
    $wert2 = $wert2 + 6
    ElseIf $cardr2 = 7 Then
    $card2 = "Sieben(7)"
    $wert2 = $wert2 + 7
    ElseIf $cardr2 = 8 Then
    $card2 = "Acht(8)"
    $wert2 = $wert2 + 8
    ElseIf $cardr2 = 9 Then
    $card2 = "Neun(9)"
    $wert2 = $wert2 + 9
    ElseIf $cardr2 = 10 Then
    $card2 = "Zehn(10)"
    $wert2 = $wert2 + 10
    ElseIf $cardr2 = 11 Then
    $card2 = "Bube(11)"
    $wert2 = $wert2 + 11
    ElseIf $cardr2 = 12 Then
    $card2 = "Dame(12)"
    $wert2 = $wert2 + 12
    ElseIf $cardr2 = 13 Then
    $card2 = "König(13)"
    $wert2 = $wert2 + 13
    EndIf
    EndFunc ;==>card2
    Func main()
    MsgBox(0, "", "Main")
    MsgBox(0, "Karte", "Player 1, du hast die Karte: " & $card)
    MsgBox(0, "Karte", "Player 2, du hast die Karte: " & $card2)
    If $wert > 21 Then
    MsgBox(0, "Verloren", "Player 1, Du bist über dem Wert 21! Du bist raus.")
    $player1 = False
    MsgBox(0, "Cash", "Player 1, dein momentaner Cash: " & $cash)
    If $player2 = False Then
    $choose_loose = MsgBox(4, "Bank", "Player 1, Player 2, wollt ihr nochmal spielen?")
    If $choose_loose = 6 Then
    einsatz()
    Else
    Exit
    EndIf
    EndIf
    EndIf
    If $wert2 > 21 Then
    MsgBox(0, "Verloren", "Player 2, Du bist über dem Wert 21! Du bist raus.")
    $player2 = False
    MsgBox(0, "Cash", "Player 2, dein momentaner Cash: " & $cash2)
    If $player1 = False Then
    $choose_loose2 = MsgBox(4, "Bank", "Player 1, Player 2, wollt ihr nochmal spielen?")
    If $choose_loose2 = 6 Then
    einsatz()
    Else
    Exit
    EndIf
    EndIf
    EndIf
    EndFunc ;==>main

    [/autoit]

    mfg autoBert

  • autoBert
    sehe ich auch so, wenn dann kommst du aus einer Funktion nicht sauber zurück :)

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Doch noch ein Problem:

    Spoiler anzeigen
    [autoit]


    $cash = 30
    $cash2 = 30
    $wert = 0
    $wert2 = 0
    $player1 = True
    $player2 = True
    Local $card, $card2
    einsatz()
    Func einsatz()
    Global $player1 = True
    Global $player2 = True
    Global $wert = 0
    Global $wert1 = 0
    Global $in = InputBox("Einsatz", "Player 1, wieviel Geld willst du einsetzen?")
    Global $in2 = InputBox("Einsatz", "Player 2, wieviel Geld willst du einsetzen?")
    If @error Then Exit
    If $in < 1 Then
    MsgBox(0, "Einsatz", "Bitte neuen Einsatz wählen. Zu niedrig")
    einsatz()
    EndIf
    If $in > $cash Then
    MsgBox(0, "Einsatz", "Du hast nicht genug Geld!")
    einsatz()
    EndIf
    If $in2 < 1 Then
    MsgBox(0, "Einsatz", "Bitte neuen Einsatz wählen. Zu niedrig")
    einsatz()
    EndIf
    If $in2 > $cash2 Then
    MsgBox(0, "Einsatz", "Du hast nicht genug Geld!")
    einsatz()
    EndIf
    card()
    card2()
    main()
    EndFunc ;==>einsatz
    Func card()
    $cardr = Random(1, 13, 1)
    If $cardr = 1 Then
    $card = "Ass(1)"
    $wert = $wert + 1
    ElseIf $cardr = 2 Then
    $card = "Zwei(2)"
    $wert = $wert + 2
    ElseIf $cardr = 3 Then
    $card = "Drei(3)"
    $wert = $wert + 3
    ElseIf $cardr = 4 Then
    $card = "Vier(4)"
    $wert = $wert + 4
    ElseIf $cardr = 5 Then
    $card = "Fünf(5)"
    $wert = $wert + 5
    ElseIf $cardr = 6 Then
    $card = "Sechs(6)"
    $wert = $wert + 6
    ElseIf $cardr = 7 Then
    $card = "Sieben(7)"
    $wert = $wert + 7
    ElseIf $cardr = 8 Then
    $card = "Acht(8)"
    $wert = $wert + 8
    ElseIf $cardr = 9 Then
    $card = "Neun(9)"
    $wert = $wert + 9
    ElseIf $cardr = 10 Then
    $card = "Zehn(10)"
    $wert = $wert + 10
    ElseIf $cardr = 11 Then
    $card = "Bube(11)"
    $wert = $wert + 11
    ElseIf $cardr = 12 Then
    $card = "Dame(12)"
    $wert = $wert + 12
    ElseIf $cardr = 13 Then
    $card = "König(13)"
    $wert = $wert + 13
    EndIf
    EndFunc ;==>card
    Func card2()
    $cardr2 = Random(1, 13, 1)
    If $cardr2 = 1 Then
    $card2 = "Ass(1)"
    $wert2 = $wert2 + 1
    ElseIf $cardr2 = 2 Then
    $card2 = "Zwei(2)"
    $wert2 = $wert2 + 2
    ElseIf $cardr2 = 3 Then
    $card2 = "Drei(3)"
    $wert2 = $wert2 + 3
    ElseIf $cardr2 = 4 Then
    $card2 = "Vier(4)"
    $wert2 = $wert2 + 4
    ElseIf $cardr2 = 5 Then
    $card2 = "Fünf(5)"
    $wert2 = $wert2 + 5
    ElseIf $cardr2 = 6 Then
    $card2 = "Sechs(6)"
    $wert2 = $wert2 + 6
    ElseIf $cardr2 = 7 Then
    $card2 = "Sieben(7)"
    $wert2 = $wert2 + 7
    ElseIf $cardr2 = 8 Then
    $card2 = "Acht(8)"
    $wert2 = $wert2 + 8
    ElseIf $cardr2 = 9 Then
    $card2 = "Neun(9)"
    $wert2 = $wert2 + 9
    ElseIf $cardr2 = 10 Then
    $card2 = "Zehn(10)"
    $wert2 = $wert2 + 10
    ElseIf $cardr2 = 11 Then
    $card2 = "Bube(11)"
    $wert2 = $wert2 + 11
    ElseIf $cardr2 = 12 Then
    $card2 = "Dame(12)"
    $wert2 = $wert2 + 12
    ElseIf $cardr2 = 13 Then
    $card2 = "König(13)"
    $wert2 = $wert2 + 13
    EndIf
    EndFunc ;==>card2
    Func main()
    MsgBox(0, "Karte", "Player 1, du hast die Karte: " & $card)
    MsgBox(0, "Karte", "Player 2, du hast die Karte: " & $card2)
    If $wert > 21 Then
    MsgBox(0, "Verloren", "Player 1, Du bist über dem Wert 21! Du bist raus.")
    $player1 = False
    MsgBox(0, "Cash", "Player 1, dein momentaner Cash: " & $cash)
    If $player2 = False Then
    $choose_loose = MsgBox(4, "Bank", "Player 1, Player 2, wollt ihr nochmal spielen?")
    If $choose_loose = 6 Then
    einsatz()
    Else
    Exit
    EndIf
    EndIf
    EndIf
    If $wert2 > 21 Then
    MsgBox(0, "Verloren", "Player 2, Du bist über dem Wert 21! Du bist raus.")
    $player2 = False
    MsgBox(0, "Cash", "Player 2, dein momentaner Cash: " & $cash2)
    If $player1 = False Then
    $choose_loose2 = MsgBox(4, "Bank", "Player 1, Player 2, wollt ihr nochmal spielen?")
    If $choose_loose2 = 6 Then
    einsatz()
    Else
    Exit
    EndIf
    EndIf
    EndIf
    $choose_card = MsgBox(4, "Bank", "Player 1, dein momentaner Wert: " & $wert & ". Willst du nochmal ziehen?")
    If $choose_card = 6 Then
    card()
    EndIf
    EndFunc

    [/autoit]

    Wenn man nochmal ziehen will kommt einfach ein Exit O_o
    Was stimmt den nicht?

  • autoBert
    sehe ich auch so,

    sieht (fast) jeder. War dazu da um Nakroma auch sehend zu machen.

    wenn dann kommst du aus einer Funktion nicht sauber zurück :)

    es werden immer alle 3 Funktionen ausgführt.

    Wenn man nochmal ziehen will kommt einfach ein Exit O_o
    Was stimmt den nicht?

    Das Skript mach was du geshrieben hast es führt die 3 funcs aus und wenn in Main die Frage nach noch einer Karte mit Ja beantwortet wird auch noch einmal die func card ausgeführt. Danach wird die func Main beendet.
    Du hast also ein Logikproblem,

    mfg autoBert

  • Zitat

    es werden immer alle 3 Funktionen ausgführt.


    naja hatte das Script bis dahin nicht bemerkt, von daher bei in Funktion 1/2 nen Exit ein und es werden nicht alle aufgerufen ;)

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Vielleicht meint er das Du nur eine card Funktion brauchst und die in einer Schleife wahlweise für 2 User aufrufst.
    Oder willst du die Funktion card() je user duplizieren.... Also mit Übergabeparameter an die Funktion.
    Du bedienst dich ja auch nur an einem Stapel Karten ergo können die Karten nicht doppelt vorkommen.
    Das müsstest Du bei Random noch auschliessen.

    Ansonsten

    [autoit]

    Func card(user1)
    In der Funktion den Übergabeparamter auswerten
    und dementsprechend einen Rückgabewert für User1/2 aufaddieren
    also wenn Funktion mit user1 aufgerufen wird dann ist das Ergebnis
    Wert x(0) +Rückgabewert der Funktion für user 1
    Wenn user2 wird sein Ergebnis aufaddiert, das geht dann mit x user bis keine Karten mehr da sind. :)
    Die Funktion wird dann solange aufgerufen bis 21 bei eienem der User überschritten ist oder man nicht mehr möchte.
    Bei Multiplayer wird dann noch dem nächsten eine Karte angeboten bis er auch genug hat.
    ....#
    Endfunc

    [/autoit]

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o