1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. GtaSpider

Beiträge von GtaSpider

  • A* Algorithmus?!

    • GtaSpider
    • 2. Januar 2011 um 02:58

    Hallo,

    Jup - das läuft! Ich versuche noch einmal ganz kurz etwas, und dann schick ich dir den Code.
    Danke schonmal :)

    Gruß
    Spider
    Edit: Ok... ich bin dumm :D Vielen Dank Bernd, lag natürlich nicht an der Funktion. Wenn der seltene Fall eintritt, dass alle meine Schafe mehr als 10 Punkte haben ruft sich eine funktion die die Pfadfunktion benutzt rekursiv immer und immer wieder auf. Interessant nur, dass AutoIt ein Rekursionsfehler bei der Pfadfunktion gemeint gefunden zu haben, obwohl sie ganz wo anders steckt. Vielen Dank nochmal, wenn du mal in Kiel bist meld dich mal, dann geb ich dir ein Bierchen aus ;)

  • A* Algorithmus?!

    • GtaSpider
    • 2. Januar 2011 um 02:37

    Hallo,

    Ja, habe noch andere Rekursive Funktionen, aber der Fehler ist (wie man ja auch oben bei meinem Edit sieht, bzw. an den Logs) irgendwie in dieser Funktion...

    Ich probiere es mal mit dem 21 aus..

    Gruß
    Spider

    Edit: Nope.. bei 21 passiert verrückterweise exakt das gleiche:
    [Blockierte Grafik: http://k44.img-up.net/Unbenannt-z10n.jpg]

  • A* Algorithmus?!

    • GtaSpider
    • 2. Januar 2011 um 02:24

    Hallo,

    Ja, das glaube ich eben auch. Habe mal TrayIconDebug auf 1 gesetzt, aber er hängt tatsächlich in dieser Funktion. CPU Last geht auf 100% (resp. 25%). Sobald mal ein Fehler kommt, kommt der nächste auch schnell, und danach gibt es sehr sehr viele Fehler (liegt daran, das mein 4 Kern nach spätestens 4 Fehlversuchen voll ausgelastet ist ;) )
    Aber woran kann es dann liegen?!

    Gruß
    Spider

    Edit: Hab jetzt mal folgendes gemacht:

    [autoit]

    Func __SC_Recursive_PathBetweenPlaces($iStart, $iZiel, ByRef $aRetPath, $szPath = ";", $iSteps = 0)
    $szPath &= $iStart & ";"
    ConsoleWrite("RECURSIVE: "&$szPath & @CRLF)
    ConsoleWrite($iStart&":"&$iZiel & @CRLF)
    ;etc...

    [/autoit]


    Und die Konsole dann in ne Datei geschrieben. Die Dateein sind im normallfall so um die 2-3 MB groß.
    Wenn es abschmiert werden sie immer größer und größer, hab jetzt mal be 29mb aufgehört
    Ich habe sie man in anhang gepackt (eine normale und eine nicht normale)
    Versteht das jemand?! Es gibt eigentlich keine richtige Wiederholungen soweit ich gesehen habe...

    Dateien

    02.29.41_1.zip 1,16 MB – 292 Downloads
  • A* Algorithmus?!

    • GtaSpider
    • 2. Januar 2011 um 01:41

    Hallo,

    Hatte jetzt mehrmals ein Rekursion Fehler von AutoIt. (Stack Overflow) Das passiert ca. alle 100 male, aber ich kann es einfach nicht Rekonstruieren. Ich schätze einfach mal, dass es kein echter Rekursionsfehler ist, sondern es daran liegt, dass ich die Funktion in ganz bestimmten fällen mehrmals hintereinander aufrufen muss und das AutoIt nur denkt, es wäre ein Rekursionsfehler. Allerdings kann ich mir das nicht wiklich vorstelln, 5000x wird die Funktion garantiert nicht aufgerufen. Ich habe mir jetzt versucht wie folgt zu helfen, aber es bringt nichts. Es gibt immer noch den gleichen Fehler, hat jemand eine Idee woran das liegen kann? Wie gesagt, habe versucht mit den gleichen Werten die beim Fehler passiert sind zu arbeiten, kann es aber nicht rekonstruieren?!

    Spoiler anzeigen
    [autoit]

    Func _SC_PathBetweenPlaces($iStart, $iZiel)
    Local $aByRefPath[2] = [0]
    __SC_Recursive_PathBetweenPlaces($iStart, $iZiel, $aByRefPath)
    Local $aRet = StringSplit($aByRefPath[1], ";")
    Return $aRet
    EndFunc ;==>_SC_PathBetweenPlaces

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

    Func __SC_Recursive_PathBetweenPlaces($iStart, $iZiel, ByRef $aRetPath, $szPath = ";", $iSteps = 0)
    $szPath &= $iStart & ";"
    ; Abbruchbedingung für erfolgreiche Suchergebnisse
    If $iStart = $iZiel Then
    If ($aRetPath[0] = 0) Or ($aRetPath[0] > $iSteps) Then ; wenn es der kürzeste Weg ist
    $aRetPath[0] = $iSteps ; Schritte bis zum Ziel eintragen
    $aRetPath[1] = StringTrimLeft(StringTrimRight($szPath, 1), 1) ; Weg eintragen
    Return SetError(0, 0, $iSteps)
    EndIf
    EndIf
    ; Abbruchbedingung für unendliche Rekursionen
    StringReplace($szPath, ";" & $iStart & ";", ";" & $iStart & ";")
    If @extended > 1 Then Return SetError(1, 0, -1) ; Wenn das Startfeld mehr als einmal im Weg steht war es wohl ein Umweg
    ;Um Stack Overflow in jedem fall zu umgehen
    If $iSteps > 100 Then Return SetError(2,FileWrite("ERROR.log","STACK OVERFLOW!") ,-1)
    ; Wenn bis hier keine Abruchbedingung gegriffen hat kann weiter gehen
    For $i = 1 To 4
    If StringIsInt($SC_ARR_PLACES[$iStart][$i]) Then ; Wenn ein Nachbarfeld eingetragen ist
    __SC_Recursive_PathBetweenPlaces($SC_ARR_PLACES[$iStart][$i], $iZiel, $aRetPath, $szPath, $iSteps + 1) ; weitersuchen
    EndIf
    Next
    Return SetError(0, 0, -1)
    EndFunc ;==>__SC_Recursive_PathBetweenPlaces

    [/autoit]

    Gruß
    Spider

    Edit: Ach ja: die Datei "Error.log" schreibt er nie...
    Edit2: Es scheint so, als würde er bei langsameren Computern öfter abschmieren.. oO

  • A* Algorithmus?!

    • GtaSpider
    • 31. Dezember 2010 um 00:31

    Hey,

    Ah, sehr gut :) Hatte grade genau dies Problem (hatte es aber bisher nur dafür gebraucht um "nach hause" zu gehen, und deswegen habe ich vorher abegfragt ob das Schaf nachahuse gehen kann).
    So ist es natürlich eleganter, danke :)

    Gruß
    Spider

  • A* Algorithmus?!

    • GtaSpider
    • 30. Dezember 2010 um 18:36

    Hey Bernd,

    Wow, vielen Dank :) Habe es noch etwas umgeschrieben, damit ich keine Globale Variable setzen muss, falls es noch jemanden interessiert:

    Spoiler anzeigen
    [autoit]

    Func _SC_PathBetweenPlaces($iStart,$iZiel)
    Local $aRet[2] = [0]
    __SC_Recursive_PathBetweenPlaces($iStart,$iZiel,$aRet)
    Return $aRet
    EndFunc

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

    Func __SC_Recursive_PathBetweenPlaces($iStart, $iZiel,ByRef $aRetPath, $szPath = ";", $iSteps = 0)
    Local $aRet
    $szPath &= $iStart & ";"
    ; Abbruchbedingung für unendliche Rekursionen
    StringReplace($szPath, ";" & $iStart & ";", ";" & $iStart & ";")
    If @extended > 1 Then Return -1 ; Wenn das Startfeld mehr als einmal im Weg steht war es wohl ein Umweg
    For $i = 1 To 4
    If StringIsInt($SC_ARR_PLACES[$iStart][$i]) Then ; Wenn ein Nachbarfeld eingetragen ist
    If $SC_ARR_PLACES[$iStart][$i] = $iZiel Then ; Wenn Nachbarfeld das Zielfeld ist
    If ($aRetPath[0] = 0) Or ($aRetPath[0] > $iSteps + 1) Then ; wenn es der kürzeste Weg ist
    $aRetPath[0] = $iSteps + 1 ; Schritte bis zum Ziel eintragen
    $aRetPath[1] = StringTrimLeft($szPath, 1) & $iZiel ; Weg eintragen
    EndIf

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

    Else ; Wenn Nachbarfeld nicht das Zielfeld ist
    __SC_Recursive_PathBetweenPlaces($SC_ARR_PLACES[$iStart][$i], $iZiel,$aRetPath, $szPath, $iSteps + 1) ; weitersuchen
    EndIf
    EndIf
    Next
    EndFunc ;==>PathFinder

    [/autoit]

    Vielen Dank nochmal :)

    Gruß
    Spider

  • CUI + OnAutoItExitRegister

    • GtaSpider
    • 30. Dezember 2010 um 05:02

    Hey,

    Du meinst wahrscheinlich wenn du eine Console via X beendest. Das Problem dabei ist, dass das kein Ersatz für eine Exit Funktion ist, sondern das Script dann gekillt wird (ProcessClose sozusagen).
    Möglichkeit
    a) Du baust dir ne GUI
    b) du gibst dem User eine andere Möglichkeit das Script zu beenden
    c) Du packst ein Script in ein Script, also das erste SCript mit FileInstall einbinden (wird dann als CUI Kompeliert) und das zweite Script wartet bis das erste Script sich beendet hat und führt dann die gewünschten Opterationen aus
    d) Du suchst mal im englischen Forum, ich glaube ich hab mal ein hübscheres Workarround gefunden, finde es aber grade leider nicht wieder.

    Gruß
    Spider

  • A* Algorithmus?!

    • GtaSpider
    • 30. Dezember 2010 um 04:55

    Heyho,

    Ich bins nochmal, wieder mit dem Spiel "Schäfchen ins Trockene bringen" (aka. "Fang den Hut")
    Ich versuche grade folgendes: Wie kommt mein Schaf möglichst schnell von dem Platz wo es grade ist auf ein anderen Platz.
    Das Spiel gibt mir immer 3 Würfel (wovon mindestens zwei verschieden sind). Die Möglichen Züge, die mein Schaf gehen kann, habe ich in einem Array und die Felder + die Nachbarsfelder ebenfalls in einem Array
    (z.B. für Feld 0: [0][1] = 5 [0][2] = 10 [0][3] = 15 [0][4] = 20 - Feld 0 hat also 4 Nachbars Felder: 5,10,15 und 20)

    Hier mal die beiden Arrays:
    $SC_ARR_PLACES (alle Felder)

    Spoiler anzeigen
    [autoit]

    Global $SC_ARR_PLACES[65][5]
    $SC_ARR_PLACES[0][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[0][1] = 5; 1. Nachbar von Feld 0
    $SC_ARR_PLACES[0][2] = 20; 2. Nachbar von Feld 0
    $SC_ARR_PLACES[0][3] = 10; 3. Nachbar von Feld 0
    $SC_ARR_PLACES[0][4] = 15; 4. Nachbar von Feld 0
    $SC_ARR_PLACES[1][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[1][1] = 51; 1. Nachbar von Feld 1
    $SC_ARR_PLACES[1][2] = 64; 2. Nachbar von Feld 1
    $SC_ARR_PLACES[1][3] = 52; 3. Nachbar von Feld 1
    $SC_ARR_PLACES[1][4] = 9; 4. Nachbar von Feld 1
    $SC_ARR_PLACES[2][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[2][1] = 34; 1. Nachbar von Feld 2
    $SC_ARR_PLACES[2][2] = 33; 2. Nachbar von Feld 2
    $SC_ARR_PLACES[2][3] = 62; 3. Nachbar von Feld 2
    $SC_ARR_PLACES[2][4] = 14; 4. Nachbar von Feld 2
    $SC_ARR_PLACES[3][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[3][1] = 19; 1. Nachbar von Feld 3
    $SC_ARR_PLACES[3][2] = 42; 2. Nachbar von Feld 3
    $SC_ARR_PLACES[3][3] = 43; 3. Nachbar von Feld 3
    $SC_ARR_PLACES[3][4] = 63; 4. Nachbar von Feld 3
    $SC_ARR_PLACES[4][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[4][1] = 25; 1. Nachbar von Feld 4
    $SC_ARR_PLACES[4][2] = 24; 2. Nachbar von Feld 4
    $SC_ARR_PLACES[4][3] = 61; 3. Nachbar von Feld 4
    $SC_ARR_PLACES[4][4] = 60; 4. Nachbar von Feld 4
    $SC_ARR_PLACES[5][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[5][1] = 0; 1. Nachbar von Feld 5
    $SC_ARR_PLACES[5][2] = 6; 2. Nachbar von Feld 5
    $SC_ARR_PLACES[6][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[6][1] = 5; 1. Nachbar von Feld 6
    $SC_ARR_PLACES[6][2] = 7; 2. Nachbar von Feld 6
    $SC_ARR_PLACES[7][0] = "SAVE"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[7][1] = 6; 1. Nachbar von Feld 7
    $SC_ARR_PLACES[7][2] = 8; 2. Nachbar von Feld 7
    $SC_ARR_PLACES[8][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[8][1] = 7; 1. Nachbar von Feld 8
    $SC_ARR_PLACES[8][2] = 9; 2. Nachbar von Feld 8
    $SC_ARR_PLACES[9][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[9][1] = 1; 1. Nachbar von Feld 9
    $SC_ARR_PLACES[9][2] = 8; 2. Nachbar von Feld 9
    $SC_ARR_PLACES[10][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[10][1] = 0; 1. Nachbar von Feld 10
    $SC_ARR_PLACES[10][2] = 11; 2. Nachbar von Feld 10
    $SC_ARR_PLACES[11][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[11][1] = 10; 1. Nachbar von Feld 11
    $SC_ARR_PLACES[11][2] = 12; 2. Nachbar von Feld 11
    $SC_ARR_PLACES[12][0] = "SAVE"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[12][1] = 11; 1. Nachbar von Feld 12
    $SC_ARR_PLACES[12][2] = 13; 2. Nachbar von Feld 12
    $SC_ARR_PLACES[13][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[13][1] = 12; 1. Nachbar von Feld 13
    $SC_ARR_PLACES[13][2] = 14; 2. Nachbar von Feld 13
    $SC_ARR_PLACES[14][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[14][1] = 2; 1. Nachbar von Feld 14
    $SC_ARR_PLACES[14][2] = 13; 2. Nachbar von Feld 14
    $SC_ARR_PLACES[15][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[15][1] = 0; 1. Nachbar von Feld 15
    $SC_ARR_PLACES[15][2] = 16; 2. Nachbar von Feld 15
    $SC_ARR_PLACES[16][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[16][1] = 17; 1. Nachbar von Feld 16
    $SC_ARR_PLACES[16][2] = 15; 2. Nachbar von Feld 16
    $SC_ARR_PLACES[17][0] = "SAVE"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[17][1] = 16; 1. Nachbar von Feld 17
    $SC_ARR_PLACES[17][2] = 18; 2. Nachbar von Feld 17
    $SC_ARR_PLACES[18][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[18][1] = 17; 1. Nachbar von Feld 18
    $SC_ARR_PLACES[18][2] = 19; 2. Nachbar von Feld 18
    $SC_ARR_PLACES[19][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[19][1] = 18; 1. Nachbar von Feld 19
    $SC_ARR_PLACES[19][2] = 3; 2. Nachbar von Feld 19
    $SC_ARR_PLACES[20][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[20][1] = 0; 1. Nachbar von Feld 20
    $SC_ARR_PLACES[20][2] = 21; 2. Nachbar von Feld 20
    $SC_ARR_PLACES[21][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[21][1] = 20; 1. Nachbar von Feld 21
    $SC_ARR_PLACES[21][2] = 22; 2. Nachbar von Feld 21
    $SC_ARR_PLACES[22][0] = "SAVE"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[22][1] = 21; 1. Nachbar von Feld 22
    $SC_ARR_PLACES[22][2] = 23; 2. Nachbar von Feld 22
    $SC_ARR_PLACES[23][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[23][1] = 22; 1. Nachbar von Feld 23
    $SC_ARR_PLACES[23][2] = 24; 2. Nachbar von Feld 23
    $SC_ARR_PLACES[24][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[24][1] = 4; 1. Nachbar von Feld 24
    $SC_ARR_PLACES[24][2] = 23; 2. Nachbar von Feld 24
    $SC_ARR_PLACES[25][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[25][1] = 4; 1. Nachbar von Feld 25
    $SC_ARR_PLACES[25][2] = 26; 2. Nachbar von Feld 25
    $SC_ARR_PLACES[26][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[26][1] = 25; 1. Nachbar von Feld 26
    $SC_ARR_PLACES[26][2] = 27; 2. Nachbar von Feld 26
    $SC_ARR_PLACES[27][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[27][1] = 26; 1. Nachbar von Feld 27
    $SC_ARR_PLACES[27][2] = 28; 2. Nachbar von Feld 27
    $SC_ARR_PLACES[28][0] = "SAVE"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[28][1] = 27; 1. Nachbar von Feld 28
    $SC_ARR_PLACES[28][2] = 29; 2. Nachbar von Feld 28
    $SC_ARR_PLACES[29][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[29][1] = 28; 1. Nachbar von Feld 29
    $SC_ARR_PLACES[29][2] = 30; 2. Nachbar von Feld 29
    $SC_ARR_PLACES[30][0] = "SAVE"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[30][1] = 29; 1. Nachbar von Feld 30
    $SC_ARR_PLACES[30][2] = 31; 2. Nachbar von Feld 30
    $SC_ARR_PLACES[31][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[31][1] = 32; 1. Nachbar von Feld 31
    $SC_ARR_PLACES[31][2] = 30; 2. Nachbar von Feld 31
    $SC_ARR_PLACES[32][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[32][1] = 33; 1. Nachbar von Feld 32
    $SC_ARR_PLACES[32][2] = 31; 2. Nachbar von Feld 32
    $SC_ARR_PLACES[33][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[33][1] = 32; 1. Nachbar von Feld 33
    $SC_ARR_PLACES[33][2] = 2; 2. Nachbar von Feld 33
    $SC_ARR_PLACES[34][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[34][1] = 35; 1. Nachbar von Feld 34
    $SC_ARR_PLACES[34][2] = 2; 2. Nachbar von Feld 34
    $SC_ARR_PLACES[35][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[35][1] = 34; 1. Nachbar von Feld 35
    $SC_ARR_PLACES[35][2] = 36; 2. Nachbar von Feld 35
    $SC_ARR_PLACES[36][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[36][1] = 35; 1. Nachbar von Feld 36
    $SC_ARR_PLACES[36][2] = 37; 2. Nachbar von Feld 36
    $SC_ARR_PLACES[37][0] = "SAVE"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[37][1] = 38; 1. Nachbar von Feld 37
    $SC_ARR_PLACES[37][2] = 36; 2. Nachbar von Feld 37
    $SC_ARR_PLACES[38][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[38][1] = 39; 1. Nachbar von Feld 38
    $SC_ARR_PLACES[38][2] = 37; 2. Nachbar von Feld 38
    $SC_ARR_PLACES[39][0] = "SAVE"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[39][1] = 38; 1. Nachbar von Feld 39
    $SC_ARR_PLACES[39][2] = 40; 2. Nachbar von Feld 39
    $SC_ARR_PLACES[40][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[40][1] = 39; 1. Nachbar von Feld 40
    $SC_ARR_PLACES[40][2] = 41; 2. Nachbar von Feld 40
    $SC_ARR_PLACES[41][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[41][1] = 42; 1. Nachbar von Feld 41
    $SC_ARR_PLACES[41][2] = 40; 2. Nachbar von Feld 41
    $SC_ARR_PLACES[42][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[42][1] = 3; 1. Nachbar von Feld 42
    $SC_ARR_PLACES[42][2] = 41; 2. Nachbar von Feld 42
    $SC_ARR_PLACES[43][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[43][1] = 3; 1. Nachbar von Feld 43
    $SC_ARR_PLACES[43][2] = 44; 2. Nachbar von Feld 43
    $SC_ARR_PLACES[44][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[44][1] = 43; 1. Nachbar von Feld 44
    $SC_ARR_PLACES[44][2] = 45; 2. Nachbar von Feld 44
    $SC_ARR_PLACES[45][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[45][1] = 46; 1. Nachbar von Feld 45
    $SC_ARR_PLACES[45][2] = 44; 2. Nachbar von Feld 45
    $SC_ARR_PLACES[46][0] = "SAVE"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[46][1] = 47; 1. Nachbar von Feld 46
    $SC_ARR_PLACES[46][2] = 45; 2. Nachbar von Feld 46
    $SC_ARR_PLACES[47][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[47][1] = 48; 1. Nachbar von Feld 47
    $SC_ARR_PLACES[47][2] = 46; 2. Nachbar von Feld 47
    $SC_ARR_PLACES[48][0] = "SAVE"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[48][1] = 49; 1. Nachbar von Feld 48
    $SC_ARR_PLACES[48][2] = 47; 2. Nachbar von Feld 48
    $SC_ARR_PLACES[49][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[49][1] = 50; 1. Nachbar von Feld 49
    $SC_ARR_PLACES[49][2] = 48; 2. Nachbar von Feld 49
    $SC_ARR_PLACES[50][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[50][1] = 51; 1. Nachbar von Feld 50
    $SC_ARR_PLACES[50][2] = 49; 2. Nachbar von Feld 50
    $SC_ARR_PLACES[51][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[51][1] = 50; 1. Nachbar von Feld 51
    $SC_ARR_PLACES[51][2] = 1; 2. Nachbar von Feld 51
    $SC_ARR_PLACES[52][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[52][1] = 1; 1. Nachbar von Feld 52
    $SC_ARR_PLACES[52][2] = 53; 2. Nachbar von Feld 52
    $SC_ARR_PLACES[53][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[53][1] = 54; 1. Nachbar von Feld 53
    $SC_ARR_PLACES[53][2] = 52; 2. Nachbar von Feld 53
    $SC_ARR_PLACES[54][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[54][1] = 55; 1. Nachbar von Feld 54
    $SC_ARR_PLACES[54][2] = 53; 2. Nachbar von Feld 54
    $SC_ARR_PLACES[55][0] = "SAVE"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[55][1] = 54; 1. Nachbar von Feld 55
    $SC_ARR_PLACES[55][2] = 56; 2. Nachbar von Feld 55
    $SC_ARR_PLACES[56][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[56][1] = 55; 1. Nachbar von Feld 56
    $SC_ARR_PLACES[56][2] = 57; 2. Nachbar von Feld 56
    $SC_ARR_PLACES[57][0] = "SAVE"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[57][1] = 58; 1. Nachbar von Feld 57
    $SC_ARR_PLACES[57][2] = 56; 2. Nachbar von Feld 57
    $SC_ARR_PLACES[58][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[58][1] = 59; 1. Nachbar von Feld 58
    $SC_ARR_PLACES[58][2] = 57; 2. Nachbar von Feld 58
    $SC_ARR_PLACES[59][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[59][1] = 58; 1. Nachbar von Feld 59
    $SC_ARR_PLACES[59][2] = 60; 2. Nachbar von Feld 59
    $SC_ARR_PLACES[60][0] = "GRASS"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[60][1] = 4; 1. Nachbar von Feld 60
    $SC_ARR_PLACES[60][2] = 59; 2. Nachbar von Feld 60
    $SC_ARR_PLACES[61][0] = "HOME2"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[61][1] = 4; 1. Nachbar von Feld 61
    $SC_ARR_PLACES[62][0] = "HOME1"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[62][1] = 2; 1. Nachbar von Feld 62
    $SC_ARR_PLACES[63][0] = "HOME2"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[63][1] = 3; 1. Nachbar von Feld 63
    $SC_ARR_PLACES[64][0] = "HOME1"; Dieser Wert ist irrelevant
    $SC_ARR_PLACES[64][1] = 1; 1. Nachbar von Feld 64

    [/autoit]


    Und die Möglichen Züge könnten so Aussehen:
    $SC_ARR_POSSIBLEMOVES

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Gewürfelt wurde eine Vier eine Zwei und eine Eins
    ;Dies gilt nur für den Blauen Spieler (Schaf 1,2,3 und 7,8,9)
    ;Alle Schafe sind noch in ihren Heimatfeldern
    Global $SC_ARR_POSSIBLEMOVES[43][2]
    $SC_ARR_POSSIBLEMOVES[0][0] = 42;Mögliche Züge
    ;Schaf 1 kann auf Feld 4
    $SC_ARR_POSSIBLEMOVES[1][0] = 1; Schaf
    $SC_ARR_POSSIBLEMOVES[1][1] = 4; Platz
    ;Schaf 1 kann auf Feld 25
    $SC_ARR_POSSIBLEMOVES[2][0] = 1; Schaf
    $SC_ARR_POSSIBLEMOVES[2][1] = 25; Platz
    ;Schaf 1 kann auf Feld 24
    $SC_ARR_POSSIBLEMOVES[3][0] = 1; Schaf
    $SC_ARR_POSSIBLEMOVES[3][1] = 24; Platz
    ;Schaf 1 kann auf Feld 60
    $SC_ARR_POSSIBLEMOVES[4][0] = 1; Schaf
    $SC_ARR_POSSIBLEMOVES[4][1] = 60; Platz
    ;Schaf 1 kann auf Feld 27
    $SC_ARR_POSSIBLEMOVES[5][0] = 1; Schaf
    $SC_ARR_POSSIBLEMOVES[5][1] = 27; Platz
    ;Schaf 1 kann auf Feld 22
    $SC_ARR_POSSIBLEMOVES[6][0] = 1; Schaf
    $SC_ARR_POSSIBLEMOVES[6][1] = 22; Platz
    ;Schaf 1 kann auf Feld 58
    $SC_ARR_POSSIBLEMOVES[7][0] = 1; Schaf
    $SC_ARR_POSSIBLEMOVES[7][1] = 58; Platz
    ;Schaf 2 kann auf Feld 4
    $SC_ARR_POSSIBLEMOVES[8][0] = 2; Schaf
    $SC_ARR_POSSIBLEMOVES[8][1] = 4; Platz
    ;Schaf 2 kann auf Feld 25
    $SC_ARR_POSSIBLEMOVES[9][0] = 2; Schaf
    $SC_ARR_POSSIBLEMOVES[9][1] = 25; Platz
    ;Schaf 2 kann auf Feld 24
    $SC_ARR_POSSIBLEMOVES[10][0] = 2; Schaf
    $SC_ARR_POSSIBLEMOVES[10][1] = 24; Platz
    ;Schaf 2 kann auf Feld 60
    $SC_ARR_POSSIBLEMOVES[11][0] = 2; Schaf
    $SC_ARR_POSSIBLEMOVES[11][1] = 60; Platz
    ;Schaf 2 kann auf Feld 27
    $SC_ARR_POSSIBLEMOVES[12][0] = 2; Schaf
    $SC_ARR_POSSIBLEMOVES[12][1] = 27; Platz
    ;Schaf 2 kann auf Feld 22
    $SC_ARR_POSSIBLEMOVES[13][0] = 2; Schaf
    $SC_ARR_POSSIBLEMOVES[13][1] = 22; Platz
    ;Schaf 2 kann auf Feld 58
    $SC_ARR_POSSIBLEMOVES[14][0] = 2; Schaf
    $SC_ARR_POSSIBLEMOVES[14][1] = 58; Platz
    ;Schaf 3 kann auf Feld 4
    $SC_ARR_POSSIBLEMOVES[15][0] = 3; Schaf
    $SC_ARR_POSSIBLEMOVES[15][1] = 4; Platz
    ;Schaf 3 kann auf Feld 25
    $SC_ARR_POSSIBLEMOVES[16][0] = 3; Schaf
    $SC_ARR_POSSIBLEMOVES[16][1] = 25; Platz
    ;Schaf 3 kann auf Feld 24
    $SC_ARR_POSSIBLEMOVES[17][0] = 3; Schaf
    $SC_ARR_POSSIBLEMOVES[17][1] = 24; Platz
    ;Schaf 3 kann auf Feld 60
    $SC_ARR_POSSIBLEMOVES[18][0] = 3; Schaf
    $SC_ARR_POSSIBLEMOVES[18][1] = 60; Platz
    ;Schaf 3 kann auf Feld 27
    $SC_ARR_POSSIBLEMOVES[19][0] = 3; Schaf
    $SC_ARR_POSSIBLEMOVES[19][1] = 27; Platz
    ;Schaf 3 kann auf Feld 22
    $SC_ARR_POSSIBLEMOVES[20][0] = 3; Schaf
    $SC_ARR_POSSIBLEMOVES[20][1] = 22; Platz
    ;Schaf 3 kann auf Feld 58
    $SC_ARR_POSSIBLEMOVES[21][0] = 3; Schaf
    $SC_ARR_POSSIBLEMOVES[21][1] = 58; Platz
    ;Schaf 7 kann auf Feld 3
    $SC_ARR_POSSIBLEMOVES[22][0] = 7; Schaf
    $SC_ARR_POSSIBLEMOVES[22][1] = 3; Platz
    ;Schaf 7 kann auf Feld 19
    $SC_ARR_POSSIBLEMOVES[23][0] = 7; Schaf
    $SC_ARR_POSSIBLEMOVES[23][1] = 19; Platz
    ;Schaf 7 kann auf Feld 42
    $SC_ARR_POSSIBLEMOVES[24][0] = 7; Schaf
    $SC_ARR_POSSIBLEMOVES[24][1] = 42; Platz
    ;Schaf 7 kann auf Feld 43
    $SC_ARR_POSSIBLEMOVES[25][0] = 7; Schaf
    $SC_ARR_POSSIBLEMOVES[25][1] = 43; Platz
    ;Schaf 7 kann auf Feld 17
    $SC_ARR_POSSIBLEMOVES[26][0] = 7; Schaf
    $SC_ARR_POSSIBLEMOVES[26][1] = 17; Platz
    ;Schaf 7 kann auf Feld 40
    $SC_ARR_POSSIBLEMOVES[27][0] = 7; Schaf
    $SC_ARR_POSSIBLEMOVES[27][1] = 40; Platz
    ;Schaf 7 kann auf Feld 45
    $SC_ARR_POSSIBLEMOVES[28][0] = 7; Schaf
    $SC_ARR_POSSIBLEMOVES[28][1] = 45; Platz
    ;Schaf 8 kann auf Feld 3
    $SC_ARR_POSSIBLEMOVES[29][0] = 8; Schaf
    $SC_ARR_POSSIBLEMOVES[29][1] = 3; Platz
    ;Schaf 8 kann auf Feld 19
    $SC_ARR_POSSIBLEMOVES[30][0] = 8; Schaf
    $SC_ARR_POSSIBLEMOVES[30][1] = 19; Platz
    ;Schaf 8 kann auf Feld 42
    $SC_ARR_POSSIBLEMOVES[31][0] = 8; Schaf
    $SC_ARR_POSSIBLEMOVES[31][1] = 42; Platz
    ;Schaf 8 kann auf Feld 43
    $SC_ARR_POSSIBLEMOVES[32][0] = 8; Schaf
    $SC_ARR_POSSIBLEMOVES[32][1] = 43; Platz
    ;Schaf 8 kann auf Feld 17
    $SC_ARR_POSSIBLEMOVES[33][0] = 8; Schaf
    $SC_ARR_POSSIBLEMOVES[33][1] = 17; Platz
    ;Schaf 8 kann auf Feld 40
    $SC_ARR_POSSIBLEMOVES[34][0] = 8; Schaf
    $SC_ARR_POSSIBLEMOVES[34][1] = 40; Platz
    ;Schaf 8 kann auf Feld 45
    $SC_ARR_POSSIBLEMOVES[35][0] = 8; Schaf
    $SC_ARR_POSSIBLEMOVES[35][1] = 45; Platz
    ;Schaf 9 kann auf Feld 3
    $SC_ARR_POSSIBLEMOVES[36][0] = 9; Schaf
    $SC_ARR_POSSIBLEMOVES[36][1] = 3; Platz
    ;Schaf 9 kann auf Feld 19
    $SC_ARR_POSSIBLEMOVES[37][0] = 9; Schaf
    $SC_ARR_POSSIBLEMOVES[37][1] = 19; Platz
    ;Schaf 9 kann auf Feld 42
    $SC_ARR_POSSIBLEMOVES[38][0] = 9; Schaf
    $SC_ARR_POSSIBLEMOVES[38][1] = 42; Platz
    ;Schaf 9 kann auf Feld 43
    $SC_ARR_POSSIBLEMOVES[39][0] = 9; Schaf
    $SC_ARR_POSSIBLEMOVES[39][1] = 43; Platz
    ;Schaf 9 kann auf Feld 17
    $SC_ARR_POSSIBLEMOVES[40][0] = 9; Schaf
    $SC_ARR_POSSIBLEMOVES[40][1] = 17; Platz
    ;Schaf 9 kann auf Feld 40
    $SC_ARR_POSSIBLEMOVES[41][0] = 9; Schaf
    $SC_ARR_POSSIBLEMOVES[41][1] = 40; Platz
    ;Schaf 9 kann auf Feld 45
    $SC_ARR_POSSIBLEMOVES[42][0] = 9; Schaf
    $SC_ARR_POSSIBLEMOVES[42][1] = 45; Platz

    [/autoit]

    Nun will ich zum Beispiel Schaf 2 sagen, er soll möglichst schnell zu Feld 11. (Siehe Bild im Anhang)
    Wie mache ich das am besten? Der A* Algorithmus (A stern bzw A star) hört sich da genau richtig an, leider weiß ich nicht, wie ich den mit Feldern anstelle von Koordinaten füttern kann.
    Hat sonst jemand noch eine andere Idee? Ich habe mir vielleicht überlegt meine Funktion zum herausfinden der möglichen Züge zu modifizieren, leider komme ich da nicht weiter, da die Züge nicht "Spinnenartig" vom Feld aus gehen, sondern ich mit einer Rekursiven funktion gearbeitet habe. (Er checkt z.B. NICHT so: Start: Feld 63 -> 3 -> 42 -> 3 -> 19 -> 3 -> 43 sonder so: 63 -> 3 -> 42 -> 41 -> 40 -> ...)

    Spoiler anzeigen
    [autoit]

    Func _SC_RefreshPossibleMoves()
    Global $SC_ARR_POSSIBLEMOVES[1][2];Setze die Globale Varialbe GetPossible (== Mögliche Züge) zurück
    Local $n, $m
    Local $aMySheeps = _SC_GetMySheeps()
    For $n = 0 To 5
    For $m = 1 To 6
    If _SC_SheepExists($aMySheeps[$n]) Then;wenn das schaf überhaupt noch existiert (falls es gefressen wird, kanns auch nicht mehr gehen)
    If _ArraySearch($SC_ARR_DIE,$m) > -1 Then;damit die möglichen Züge nach Größe sortiert werden
    ConsoleWrite($m & @CRLF)
    Local $iPlace = $SC_ARR_SHEEP[$aMySheeps[$n]][6];Der momentane Platz des Schaafes, z.B. 61
    Local $aAlready[1] = [$iPlace];Die, die schon geprüft wurden
    $aAlready = __SC_Recursive_GetPossible($iPlace, $aAlready, $aMySheeps[$n], 1, $m);SC_ARR_DIE[0] gibt den ersten würfel zurück, z.B. 5
    EndIf
    EndIf

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

    Next
    Next
    $SC_ARR_POSSIBLEMOVES[0][0] = UBound($SC_ARR_POSSIBLEMOVES) - 1

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

    ;Gibt die globale variable zurück
    Return $SC_ARR_POSSIBLEMOVES
    EndFunc ;==>_SC_RefreshPossibleMoves

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

    Func __SC_Recursive_GetPossible($iPlace, $aAlready, $iSheep, $zaehler = 0, $iTo = 6)
    Local $i2, $z
    $aNeighbour = _SC_GetNeighbourPlaces($iPlace);gibt die nachbarsplätze eines platzes aus in einem array (array[0] = anz)
    For $i2 = 1 To $aNeighbour[0];schleife
    If $zaehler = $iTo Then;wenn zaehler = wuerfel dann schreibe in das global array (SC_ARR_GETPOSSIBLE)
    If _ArraySearch($aAlready, $aNeighbour[$i2]) = -1 And $aNeighbour[$i2] <> '' Then
    If _SC_IsValidTurn($iSheep, $aNeighbour[$i2]) Then
    Local $iUb = UBound($SC_ARR_POSSIBLEMOVES)
    ReDim $SC_ARR_POSSIBLEMOVES[$iUb + 1][2]
    $SC_ARR_POSSIBLEMOVES[$iUb][0] = $iSheep
    $SC_ARR_POSSIBLEMOVES[$iUb][1] = $aNeighbour[$i2]
    EndIf
    EndIf
    Else;wenn zaehler < wuerfel dann schreibe das momentane feld in ein array und finde davon wieder die nachbars felder (rekursion)
    If _ArraySearch($aAlready, $aNeighbour[$i2]) = -1 Then
    Local $iUb = UBound($aAlready)
    ReDim $aAlready[$iUb + 1]
    $aAlready[$iUb] = $aNeighbour[$i2]
    __SC_Recursive_GetPossible($aNeighbour[$i2], $aAlready, $iSheep, $zaehler + 1, $iTo);zaehler +=1
    EndIf
    EndIf
    Next
    Return $aAlready;gibt aalready zurück für _test2
    EndFunc ;==>__SC_Recursive_GetPossible

    [/autoit]

    Im Anhang ist sonst auch noch mal ein funktionstüchtiges Beispiel (zum Herausfinden der Möglichen Züge)

    Vielen Dank schonmal :)

    Gruß
    Spider

  • Substring zählen

    • GtaSpider
    • 22. Dezember 2010 um 20:43

    $aSS = StringSplit($str,$substr);ggf. noch ein ,1 hinten dran setzen wenn der substr mehrere zeichen beinhaltet (flag = 1)
    $aSS[0] = Anzahl der Substrings in einem Str ;)

    Gruß
    Spider

  • "open /dev/snd/seq failed" in Wine

    • GtaSpider
    • 20. Dezember 2010 um 23:36

    Hallo,

    Bin leider (noch) ein totaler Linux noob. Also ich kann eine zip Datei hochladen mit beliebig vielen Dateien und dann eine Datei auswählen (z.B. ein Shellscript (.sh)).
    Was genau muss ich jetzt in die .sh schreiben, und was müsst ich ins Zip packen?
    Vielen Dank schonmal, ein Test ist es allemal wert :)

    Gruß
    Spider

  • "open /dev/snd/seq failed" in Wine

    • GtaSpider
    • 20. Dezember 2010 um 18:36

    Hallo,

    Kann leider keine andere Wine version drauf packen (bin nicht administrator von dem Server). Es läuft auf jedenfall Ubuntu 32 bit - mehr weiß ich aber auch nicht ;)
    http://www.informatik.uni-kiel.de/software-challenge/2011/wettkampf/

    Gruß
    Spider

  • _FTP_FilePut-Problem

    • GtaSpider
    • 19. Dezember 2010 um 16:30

    Heyho,

    Nimm mal den Wert von _FTP_Connect als Session (also $connect), dann sollte es klappen:

    Spoiler anzeigen
    [autoit]

    #include <FTPEx.au3>
    #include <Array.au3>
    #include <File.au3>

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

    $open = _FTP_Open("ftp")
    $connect = _FTP_Connect($open,$ftp,$user,$pw)
    If @error Then MsgBox(0,"",@error)

    $size = _FileListToArray("C:\Users\Bla\Desktop\HP\Root")
    If @error Then MsgBox(0,"",@error)

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

    _ArrayDisplay($size)
    For $i = 1 To $size[0]
    _FTP_FilePut($connect ,"C:\Users\Bla\Desktop\HP\Root\" & $size[$i],$size[$i]) ;$connect anstelle von $open
    Sleep(2000)
    Next

    [/autoit]

    Gruß
    Spider

  • [TCP] Eigener Server - Recv="", obwohl eindeutig aufgerufen - Cach?

    • GtaSpider
    • 19. Dezember 2010 um 16:24

    Hallo,

    hier gibt es ein kleines Tutorial zu TCP/IP, vielleicht hilft dir das ja weiter:
    http://wiki.autoit.de/wiki/index.php/Tutorial#TCP.2FIP

    Gruß
    Spider

  • "open /dev/snd/seq failed" in Wine

    • GtaSpider
    • 19. Dezember 2010 um 15:53

    Heyho,

    Habe folgendes Problem mit AutoIt und Wine: Wenn ich irgendein kompeliertes Script versuche in Wine (Linux Windows Emulation (jaja, ich weiß, not an emulator^^)) bekomme ich auf nem Server immer folgenden Fehler:

    Code
    ALSA lib seq_hw.c:457:(snd_seq_hw_open) open /dev/snd/seq failed: No such file or directory


    Und das Script beendet sich. Es liegt wohl daran, dass keine Sondkarte auf dem Server installiert ist, Problem ist, ich kann diesen Server nicht administrieren, d.h. hab kein Zugriff auf ihn.

    Dabei ist es egal, welches Script ich verwende, ich benutze noch nicht mal Sound... Befehle in den Scripten.

    Hat jemand eine Idee wie man das umgehen kann?

    Gruß
    Spider

  • Nächste mögliche Züge für ein Spiel

    • GtaSpider
    • 14. Dezember 2010 um 00:26

    Hallo,

    Die Globale Variable $SC_ARR_PLACES sieht wie folgt aus:
    $SC_ARR_PLACES[65][5]
    Die erste Dimension ( das [65]) sind die Feldnummern. Die zweite ( [5] ) zeigt die Nachbarn an. [0] = GRASS/SAVE (Grass bedeutet normales Feld, Save bedeutet sicheres Feld) [1] = 1. Nachbar, [2] = 2. Nachbar, [3] = 3. Nachbar und [4] = 4. Nachbar. Wenn ein Feld z.B. nur 2 Nachbarn hat (wie unten im Beispiel Feld 8 ) werden nur [1] und [2] gefüllt und [3] und [4] sind leer.

    Ankommen kommt es über TCP/IP so (Hier im Beispiel Für Feld 0 und für Feld 8 :(

    Spoiler anzeigen
    Code
    <node index="0" type="GRASS">
            <neighbour>5</neighbour>
            <neighbour>20</neighbour>
            <neighbour>10</neighbour>
            <neighbour>15</neighbour>
          </node>
         <node index="8" type="GRASS">
            <neighbour>7</neighbour>
            <neighbour>9</neighbour>
          </node>

    Auslesen tu ich das dann so (Funktionstüchtiges Beispiel):

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Global $SC_ARR_PLACES[65][5]
    Global Const $SC_RECV_REGEX_PLACE = '(?s)<node index="(\d*?)" type="(.*?)">(.*?)</node>'
    Global Const $SC_RECV_REGEX_PLACE_NEIGHBOUR = '(?s)<neighbour>(\d*?)</neighbour>'
    ;[..]
    ;Beispiel für $sRecv
    $sRecv = '<node index="0" type="GRASS">' & @CRLF & _
    ' <neighbour>5</neighbour>' & @CRLF & _
    ' <neighbour>20</neighbour>' & @CRLF & _
    ' <neighbour>10</neighbour>' & @CRLF & _
    ' <neighbour>15</neighbour>' & @CRLF & _
    ' </node>' & @CRLF & _
    ' <node index="8" type="GRASS">' & @CRLF & _
    ' <neighbour>7</neighbour>' & @CRLF & _
    ' <neighbour>9</neighbour>' & @CRLF & _
    ' </node>'
    $aRegEx = StringRegExp($sRecv, $SC_RECV_REGEX_PLACE, 3)
    If Not @error Then
    ConsoleWrite("Places Ubound: " & (UBound($aRegEx)) / 3 & @CRLF)
    For $i = 0 To UBound($aRegEx) - 1 Step 3
    Local $aRegEx2 = StringRegExp($aRegEx[$i + 2], $SC_RECV_REGEX_PLACE_NEIGHBOUR, 3)
    $SC_ARR_PLACES[$aRegEx[$i]][0] = $aRegEx[$i + 1]
    For $i2 = 0 To UBound($aRegEx2) - 1
    $SC_ARR_PLACES[$aRegEx[$i]][$i2 + 1] = $aRegEx2[$i2]
    Next
    Next
    EndIf
    _ArrayDisplay($SC_ARR_PLACES)

    [/autoit]

    Die Funktion "_SC_GetNeighbourPlaces" sieht dementsprechend so aus:

    Spoiler anzeigen
    [autoit]

    Func _SC_GetNeighbourPlaces($iPlace)
    Local $aReturn[1] = [0], $i
    For $i = 1 To 4
    If $SC_ARR_PLACES[$iPlace][$i] <> '' Then
    ReDim $aReturn[$i + 1]
    $aReturn[0] += 1
    $aReturn[$i] = $SC_ARR_PLACES[$iPlace][$i]
    EndIf
    Next
    Return $aReturn
    EndFunc ;==>_SC_GetNeighbourPlaces

    [/autoit]


    Das ist jetzt ziemlich viel Input, aber vielen Dank schonmal für deine Zeit die du hier reinpackst :)

    Gruß
    Spider

  • Nächste mögliche Züge für ein Spiel

    • GtaSpider
    • 13. Dezember 2010 um 19:46

    Hallo,

    Habs jetzt mal Rekursiv versucht, aber ich bekomme es einfach nicht hin. Den ersten Zug zeigt er mir richtig an (alle 3 Möglichkeiten). Aber beim zweiten Zug hardert es dann schon, dort ist meistens keins richtig, ab und zu aber eins.
    Hier mal den Source Code, falls jemand den kompletten Source + Java Server zum Testen haben will, einfach mal bescheid sagen, würde mich sehr freuen :)
    Ich komm nämlich einfach nicht weiter :S

    Spoiler anzeigen
    [autoit]

    Func _test2($iSheep)
    Global $SC_ARR_GETPOSSIBLE[1];Setze die Globale Varialbe GetPossible (== Mögliche Züge) zurück
    Local $i
    Local $iPlace = $SC_ARR_SHEEP[$iSheep][5];Der momentane Platz des Schaafes, z.B. 61
    Local $aAlready[1] = [$iPlace];Die, die schon geprüft wurden

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

    $aAlready = _test($iPlace, $aAlready, 1, $SC_ARR_DIE[0]);SC_ARR_DIE[0] gibt den ersten würfel zurück, z.B. 5

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

    ;Hier wird dann nochmal alles was in aAlready drin ist aus der Gobalen Varaible zurück gelöscht
    For $i = 0 To UBound($aAlready) - 1
    $iAS = _ArraySearch($SC_ARR_GETPOSSIBLE,$aAlready[$i])
    If $iAS > -1 Then _ArrayDelete($SC_ARR_GETPOSSIBLE,$iAS)
    Next
    ;Gibt die globale variable zurück
    Return $SC_ARR_GETPOSSIBLE
    EndFunc ;==>_test2

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

    Func _test($iPlace, $aAlready, $zaehler = 0, $iTo = 6)
    Local $i2
    $aNeighbour = _SC_GetNeighbourPlaces($iPlace);gibt die nachbarsplätze eines platzes aus in einem array (array[0] = anz)
    For $i2 = 1 To $aNeighbour[0];schleife
    If $zaehler = $iTo Then;wenn zaehler = wuerfel dann schreibe in das globae array (SC_ARR_GETPOSSIBLE)
    If _ArraySearch($aAlready, $aNeighbour[$i2]) = -1 And $aNeighbour[$I2] <> '' Then
    Local $iUb = UBound($SC_ARR_GETPOSSIBLE)
    ReDim $SC_ARR_GETPOSSIBLE[$iUb + 1]
    $SC_ARR_GETPOSSIBLE[$iUb] = $aNeighbour[$i2]
    EndIf
    Else;wenn zaehler < wuerfel dann schreibe das momentane feld in ein array und finde davon wieder die nachbars felder (rekursion)
    If _ArraySearch($aAlready, $aNeighbour[$i2]) = -1 Then
    Local $iUb = UBound($aAlready)
    ReDim $aAlready[$iUb + 1]
    $aAlready[$iUb] = $aNeighbour[$i2]
    _test($aNeighbour[$i2], $aAlready, $zaehler + 1, $iTo);zaehler +=1
    EndIf
    EndIf
    Next
    Return $aAlready;gibt aalready zurück für _test2
    EndFunc ;==>_test

    [/autoit]

    Habs versucht so gut wie möglich zu Dokumentieren, falls noch fragen sind, beantworte ich sie natürlich schnell.

    Gruß
    Spider

  • Nächste mögliche Züge für ein Spiel

    • GtaSpider
    • 11. Dezember 2010 um 03:33

    Heyho,

    Dieses Jahr mache ich bei der Software Challenge 2011 in Kiel mit. Das ist eine seit ein paar jahren existierene Veranstaltung die jedes Jahr ein neues Spiel benutzt, welches Schüler wie ich und du Spielen sollen. Bzw, nicht wir sollen es spielen, sondern wir sollen Programme schreiben, die es für uns Spielen (Bots, aber diesmal keine Bösen ;D) Da der Server offen ist, habe ich veruscht es mit AutoIt zu bewerkstelligen, was mir auch gut gelang, bis ich zu einem Problem stoß.

    Aber erstmal: Es geht um das Spiel "Schäfchen ins Trockene bringen" - andere kennen es evtl. unter "Fang den Hut", ist aber mehr oder weniger das gleiche.
    Der Server existiert schon, und würfelt jede Runde 3 Würfel, die per Random gewürfelt werden. Nun will ich die möglichen Züge rausfinden, die meine Schäfchen machen können. Was ich habe:

    • Position aller meiner Schäfchen
    • Alle Felder (0-64) und die Felder die direkt drum herum liegen (z.B. bei 0, dem Feld in der Mitte, 10, 15, 5 und 20 (siehe ScreenShot))


    Auf dem Screenshot wurde eine Fünf, eine Sechs und eine Vier gewürfelt. Die rot umrandeten Felder sind die Möglichen Züge vpn dem Schaaf 4, aber leider nur in der GUI drin. Diese rot umrandeten Felder will ich eben mit AutoIt rausfinden, und ich habe dafür die oben genannten Informationen.

    Hat jemand eine Idee? Es gibt eine Java und eine Delphi Umsetzung, leider tue ich mir etwas schwer damit, den Algorhytmus herauszufinden, wie die möglichen Züge ausgelesen werden.
    Falls jemand damit was anfangen kann, weitere Information, so wie di Sourcecodes gibt es hier:
    http://www.informatik.uni-kiel.de/software-challenge/2011/download/

    Ich hoffe mir kann jemand helfen, wäre echt super danke, geht um eine Abschlussarbeit in der Schule ;)

    Gruß
    Max
    [/list]

    Dateien

    Unbenannt.jpg 545,46 kB – 0 Downloads
  • Codeverziferung

    • GtaSpider
    • 3. Dezember 2010 um 01:40

    Heyho,

    Nettes Script, aber es ist immer noch austricksbar. Geh mal mit dem AutoIt Window Tool auf das Fenster und klick auf "Visible Text" ;)
    Im Engl. Forum gab es einige Beispiele zu echten Captchas (mit GDI+), das ist evlt. ein sichererer (<-- geiles Wort :huh: ) Weg.

    Gruß
    Spider

  • Zugriff auf Logitech G25

    • GtaSpider
    • 3. Dezember 2010 um 01:35

    Hallo

    Naja, es gibt im englischen Forum eine joystick dll (Port.dll). Hab vor ca. 3 Jahren (22.11.2007 :D) mal was damit geschrieben, ist im Anhang, keine Ahnung ob das noch funktioniert... Müsstest vlt nochmal die Includes ändern.

    Gruß
    Spider

    Dateien

    von Mir.zip 26,04 kB – 272 Downloads
  • Skript pausiert im GUI-Menü oder beim Drop´n-Drag

    • GtaSpider
    • 15. November 2010 um 16:56

    Hallo,

    Was soll denn während dessen passieren?
    Es gibt ansätze von Mutlithreading einfach mal Google fragen oder auf autoitscript.com suchen.

    Gruß
    Spider

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™