problem mit _ArrayMinIndex

  • soo...
    ich habe ein kleines problem mit meinem aktuellen projekt: der simulation von evolution
    also dateien die sich selbst vermehren mit attributen die nach dem zufallsprinzip verändert werden und durch "natürliche"auslese sich vorgegebenen parametern annähern
    klingt doof is aber so
    also ich versuche kurz das bisherige zu erklären
    ich habe ein script dass mir in einem beliebigen ordner einen ordner "lebewesen"random erstellt und in diesem ordner die exe um sich selbst mit veränderten atriibuten zu kopieren und eine attrib.txt wo die atrribute gespeichert sind.(attribute sind bis jetzt nur 3 zahlen ohne jede bedeutung)
    nun soll mein script diese werte aller lebewesen auslesen nach einem geweissen schema verrechnen und die "schlechten" löschen und die "guten" aufrufen, damit sie sich "vermehren".

    mein fehler liegt jetzt in der for schleife die die schlechten löschen soll.
    wenn ich jedoch den kleinsten wert bestimmen will bringt mir _ArrayMinIndex den wert -1 :wacko:

    Spoiler anzeigen
    [autoit]

    HotKeySet("ü","strt")
    #include
    #include
    #include
    while 1
    Sleep(100)
    WEnd

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

    Func strt()
    $size=DirGetSize("C:\Dokumente und Einstellungen\Besitzer\Desktop\EVOLUTIONSBOTS",1);_liste aller lebewesen erstellen________
    $anzahl = $size[2]
    dim $file[$anzahl]
    dim $line1[$anzahl]
    dim $line2[$anzahl]
    dim $line3[$anzahl]
    Dim $wert[$anzahl]
    FileChangeDir("C:\Dokumente und Einstellungen\Besitzer\Desktop\EVOLUTIONSBOTS")
    $fils=FileFindFirstFile("lebewesen*")
    for $q=1 to $anzahl
    $file[$q-1] = FileFindNextFile($fils)
    Next;__________
    for $q=1 to $anzahl;_liste aller "überlebenswerte" erstellen________
    FileChangeDir("C:\Dokumente und Einstellungen\Besitzer\Desktop\EVOLUTIONSBOTS\"&$file[$q-1])
    $lese=FileOpen("atribs.txt",0)
    $line1[$q-1] = number(FileReadLine($lese,1))
    $line2[$q-1] = number(FileReadLine($lese,2))
    $line3[$q-1] = number(FileReadLine($lese,3))
    Select
    Case $line1[$q-1] > $line2[$q-1] And $line1[$q-1] > $line3[$q-1]
    $wert[$q-1] = $line1[$q-1] - $line2[$q-1] - $line3[$q-1]
    Case $line2[$q-1] > $line1[$q-1] And $line1[$q-1] > $line3[$q-1]
    $wert[$q-1] = $line2[$q-1] - $line1[$q-1] - $line3[$q-1]
    Case $line3[$q-1] > $line2[$q-1] And $line1[$q-1] > $line1[$q-1]
    $wert[$q-1] = $line3[$q-1] - $line2[$q-1] - $line1[$q-1]
    EndSelect
    Next;__________
    for $w=round($anzahl/2) to $anzahl;schlechte lebewesen töten_______
    $lowy=_ArrayMinIndex($wert);<------fehler
    DirRemove("C:\Dokumente und Einstellungen\Besitzer\Desktop\EVOLUTIONSBOTS\"&$file[$lowy])
    $wert=_ArrayDelete($wert,$lowy)
    Next

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

    EndFunc
    while 1
    Sleep(100)
    WEnd
    Func end()
    while 1
    Sleep(100)
    WEnd
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von killz (17. September 2009 um 16:03)

    • Offizieller Beitrag

    Oh mann, Forenregeln lesen!
    Hier gibt's kein Botsupport!

    Edit: Oh, moment, Evolution ist gar kein Game, richtig? Da war ich etwas vorschnell. Sorry!

    Edit2: Lass Dir mal mit:

    [autoit]

    _ArrayDisplay($wert)

    [/autoit]


    nach der "For $q = 1 To $anzahl"...Next-Schleife die Werte im Array anzeigen.
    Und _ArrayMinIndex solltest Du in dem Fall mit Parameter "1" aufrufen:

    [autoit]

    $lowy = _ArrayMinIndex($wert, 1)

    [/autoit]


    sonst würde nicht numerisch verglichen, sondern alphanumerisch.

  • nein kein game
    aber mit viiieel aufwand könnte man eins draus machen... *träum* :D
    das mit dem parameter ist eine gute idde für andre zwecke leider hat sie hier nichts gebracht
    und das array zeigt genau dass was es zeigen soll
    aber danke für die mühe

  • soo nach einer erneuten kontrolle aller verwendeten funktionen bin ich auf die falsche schreibweise des _arraydelete gestoßen
    ich hatte

    [autoit]

    $wert = _ArrayDelete($wert,$lowy)

    [/autoit]


    richtig war

    [autoit]

    _ArrayDelete($wert,$lowy)

    [/autoit]


    problem war dass ich die autoit hilfe falsch interpretiert hab und gedacht hatte , dass _ArrayDelete als ausgabe wert die neue variable hat vgl. round()
    also die schleife funktioniert und gibt mir die werte die ich will nur dass DirRemove die dateien nicht wirklich löscht sondern der @error einen fehler zeigt...
    wenn ich jedoch vor DirRemove den wert $file[$lowy] anzeigen lasse steht da genau dass was es soll
    dass ich den parameter 1 hinzufügen muss weis ich hab ich auch gemacht
    hat vlcht jemand erfahrung, dass DirRemove ein spezielles format (keine leerzeichen im pfad oder wasweisich) benötigt?

    EDIT: das verzeichniss konnte nicht gelöscht werden, weil die fileopen noch die atribs.txt offen hatte
    es wird jetzt ordnungsgemß gelöscht @error sagt aber immer noch fehler xDD
    stört mich aber nicht weiter 8)

    und thx oscar der @error check hat mich auf den ersten fehler gebracht (auch wenn ich das davor schonmal gemacht hatte nur den fehler nie gefunden hab :) )

    2 Mal editiert, zuletzt von killz (17. September 2009 um 16:03)