Kampffunktion

  • Hallo Autoitler,

    ich arbeite zur Zeit an einem Textadventure und hab schon etwas rumprobiert aber es nicht hinbekommen eine vernünftige Kampffunktion zu basteln.
    Die Funktion sollte einfach nur einen Kampf mit einer 1/4 Chance starten und dann eine Monster aus einer bestimmten Anzahl auswählen aber so funktioniert es nicht:

    [autoit]

    func Kampf() $Kampf=Random(4,4) if $Kampf = 4 Then $Monster=Random(0,$Monsterzahl) if $Monster = 0 Then GUICtrlSetData($edtText,"") Send("Ein Kampf mit einem Keiler beginnt.") ElseIf $Monster = 1 Then ElseIf $Monster = 2 Then EndIf EndIfEndFunc

    [/autoit]

    (konnte es irgendwie nur in einer Zeile haben)
    Habe alles definiert aber funktioniert trotzdem nicht.
    Hoffe Ihr könnt mir helfen

    MFG
    MeyerMeyer11

    Momentanes Projekt

    -Textadventure

    Fertige Projekte

    Nichts

  • Zu dem Darstellungsproblem: Verwende beim Einfügen des Skriptes den "Quellcode"-Tab, nicht den "Editor".

    Du hast in der Funktion $Kampf=Random(4,4) geschrieben, dass entspricht einer 100% Chance, das ein Kampf beginnt.

  • Ja das mit dem $Kampf=Random(4,4) hab ich gemacht um meinen Fehler zu finden aber er startet die Bedingung nicht einmal er macht einfach nix zeigt auch keine Fehler an

    MFG
    MeyerMeyer11

    Momentanes Projekt

    -Textadventure

    Fertige Projekte

    Nichts

  • Das Problem ist, dass du eine Zahl mit Nachkommastellen bekommst...
    Du musst bei Random den dritten Parameter auf "1" setzen.
    Sonst wird dieser Vergleich "If $Kampf = 4" oder dieser "If $Monster = 0" nur in einem ganz seltenen Fall eintreten.

    [autoit]

    Func Kampf()
    $Kampf = Random(1, 4, 1)

    [/autoit][autoit][/autoit][autoit]

    If $Kampf = 4 Then
    $Monster = Random(0, $Monsterzahl, 1)

    [/autoit][autoit][/autoit][autoit]

    If $Monster = 0 Then
    GUICtrlSetData($edtText, "")
    Send("Ein Kampf mit einem Keiler beginnt.")
    ElseIf $Monster = 1 Then
    ElseIf $Monster = 2 Then
    EndIf
    EndIf
    EndFunc

    [/autoit]

    LG Make ;)

    Einmal editiert, zuletzt von Yjuq (27. April 2013 um 20:06)

  • Dann würde ich dir vorschlagen einmal das ganze Skript hochzuladen.
    Spontan würde ich jetzt sagen, dass du gerade nur kein glück hattest bei der ausführung des Skriptes.

    Versuche vorab kurz einmal das hier:

    [autoit]

    Func Kampf()
    $Kampf = 4 ; Random(1, 4, 1)

    [/autoit][autoit][/autoit][autoit]

    If $Kampf = 4 Then
    $Monster = 0 ; Random(0, $Monsterzahl, 1)

    [/autoit][autoit][/autoit][autoit]

    If $Monster = 0 Then
    GUICtrlSetData($edtText, "")
    Send("Ein Kampf mit einem Keiler beginnt.")
    ElseIf $Monster = 1 Then
    ElseIf $Monster = 2 Then
    EndIf
    EndIf
    EndFunc

    [/autoit]

    Wenn nichts in den Editfeld geschrieben wird, hast du irgendwo anders im Skript einen Fehler.
    Aber wie gesagt, ich denke du hattest einfach kein glück beim ausführen des Skriptes.
    Es wird ja schließlich zufällig bestimmt ob was ins Editfeld geschrieben wird.

  • Also wenn ich es so starte schreibt das Programm ins Editfeld.

    [autoit]

    ;Text Adventure

    [/autoit][autoit][/autoit][autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    $Expalt=0
    $Expget=0
    $Att=0
    $Vert=0
    $MP=0
    $HP=0
    $Gold=0
    $Monsterkills=0
    $version=1.2
    $Klasse=""
    $Monsterzahl=0
    $Monserlevel = 1

    [/autoit][autoit][/autoit][autoit]

    func Klassenwahl()
    $Klasse = Inputbox("Klassenwahl","Verfügbare Klassen:"&@crlf&"1.Krieger(Hoher Angriff wenig Verteidigun und Mana)."&@crlf&"2.Magier(etwas Angriff und Mana aber wenig Verteidigun bzw. Leben."&@crlf&"3.Tank(wenig Angriff dafür aber starke Verteidigung und hohes Leben.)"&@crlf&"Sie können auch die Zahlen benutzen um eine Klassen zu wählen.","","","",230)
    If $Klasse = 1 or $Klasse= "Krieger" or $Klasse="krieger" Then
    $Hp = 500
    $Mp = 100
    $Att = 70
    $Vert = 25
    $Gold = 500
    $Klasse = "Krieger"
    ElseIf $Klasse = 2 or $Klasse = "Magier" or $Klasse = "magier" Then
    $Hp = 400
    $Mp = 400
    $Att = 50
    $Vert = 20
    $Gold = 500
    $Klasse = "Magier"
    ElseIf $Klasse = 3 or $Klasse = "Tank" or $Klasse = "tank" Then
    $Hp = 655
    $Mp = 100
    $Att = 40
    $Vert = 55
    $Gold = 500
    $Klasse = "Tank"
    Else
    MsgBox(0,"Flasche Eingabe","Falsche Eingabe."&@CRLF&"Versuchen sie es bitte erneut.")
    Klassenwahl()
    EndIf
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func Kampf()
    $Kampf = 4 ; Random(1, 4, 1)

    [/autoit][autoit][/autoit][autoit]

    If $Kampf = 4 Then
    $Monster = 0 ; Random(0, $Monsterzahl, 1)

    [/autoit][autoit][/autoit][autoit]

    If $Monster = 0 Then
    GUICtrlSetData($edtText, "")
    sleep(1000)
    Send("Ein Kampf mit einem Keiler beginnt.")
    ElseIf $Monster = 1 Then
    ElseIf $Monster = 2 Then
    EndIf
    EndIf
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Msgbox(0,"Willkomen","Herzlich Willkommen zu meinem ersten Text Adventure")

    [/autoit][autoit][/autoit][autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("TextAdventure", 608, 426, 192, 124)
    $edtText = GUICtrlCreateEdit("$Boxinhalt", 0, 272, 625, 169)
    GUICtrlSetData(-1, "")
    $Label1 = GUICtrlCreateLabel("Mein Text Adventure V."&$Version,168, 24, 294, 36)
    GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x0000FF)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    send("Willkommen bei meinem Textadventure."&@CRLF&"Wählen sie jetzt bitte ihre Klasse.")

    [/autoit][autoit][/autoit][autoit]

    Klassenwahl()
    GUICtrlSetData($edtText,"")
    Send("Ihre Klasse ist nun: "&$Klasse&"!")
    Kampf()

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]


    Ihr wäre das ganze Skript mit dem neu eingebauten sollten soweit aber noch keiner Fehler drin sein :D

    MFG
    MeyerMeyer11

    Momentanes Projekt

    -Textadventure

    Fertige Projekte

    Nichts

  • Zu deinem Programmierstil will ich schonmal gar nichts sagen o.o


    Aber erst mal was mir konkret auffällt:

    [autoit]

    If $Klasse = 1 or $Klasse= "Krieger" or $Klasse="krieger" Then ; Zeile 22
    ElseIf $Klasse = 2 or $Klasse = "Magier" or $Klasse = "magier" Then ; Zeile 29
    ElseIf $Klasse = 3 or $Klasse = "Tank" or $Klasse = "tank" Then ; Zeile 36

    [/autoit]

    Wenn du einen String mit einen Gleicheitszeichen "=" vergleichst, so wird generell die groß und kleinschreibung ignoriert. Das bedeutet deine If-Abfragen lassen sich folgendermaßen kürzen:

    [autoit]

    If $Klasse = 1 or $Klasse= "krieger" Then ; Zeile 22
    ElseIf $Klasse = 2 or $Klasse = "magier" Then ; Zeile 29
    ElseIf $Klasse = 3 or $Klasse = "tank" ; Zeile 36

    [/autoit]

    Wenn du zwischen groß und kleinschreibung unterscheiden möchtest, sind zwei Gleichheitszeichen "==" zu verwenden. ;)


    Zudem würde ich dir wirklich dringend empfehlen, dieses Tutorial wenigstens einmal durchzulesen: [Tutorial] Sauber Programmieren
    Spätestens dann, wenn das Skript komplizierter wird wirst DU und andere die dir eventuell helfen sollen keinen überblick mehr haben.
    Ich meine es ja nur gut. ;)


    Und jetzt zu deinem Problem:
    Die Funktion funktioniert auch dann, wenn du die Random's die ich auskommentiert habe verwendest. Du hast nur (in den jetzigen Skript) eine Chanze von 25%, dass etwas in das Editfeld geschrieben wird. Führe das Skript einfach ein paar mal aus und überzeuge dich selber.

    Kleiner Tipp: Setze einfach vor jedes Random ein SRandom ein. Und zwar so wie du es gerade brauchst. Dies setzt den Anfangswert für den Zufallsalgorithmus. Damit kannst du einfach deine Randoms ein wenig beeinflussen und im späteren fertigen Skript brauchst du sie nur noch zu löschen bzw. Auszukommentieren.

    Ich wünsche viel Glück mit deinem Vorhaben! :)