Optimierung einer Funktion (zum Errechnen der Differenz zweier Felder bei einem Spiel)

    • Offizieller Beitrag

    Heyho,

    ich bins mal wieder mit dem gleichen Spiel und mit fast dem selben Problem.
    Vor paar Tagen hat Bernd mir geholfen eine rekursive Funktion zu schreiben, welche die Differenz zwischen 2 Feldern berechnet, und auch den Weg dorthin. Nachteil: Sie musste bei jedem Zug erneut mehrmals rechnen und war relativ langsam.

    Also habe ich mir überlegt ganz am Anfang eine Funktion zu schreiben, die mir ausgibt wie weit 2 Felder von einander entfernt sind (Differenz) um dann später so den besten Weg zu finden und das Array einfach nur noch abfragen zu müssen.

    Sie funktioniert auch perfekt, hat nur einen kleinen Nachteil: Sie ist langsam. Sehr langsam. Auf meinem PC braucht sie ca. 100ms, aber auf meinem Netbook ca. 1000ms ;) Und da die spätere Serverumgebung wohl eher wie mein Netbook als mein PC aussehen wird, versuche ich es darauf zu optimieren. Die Regeln des Spiels lauten nämlich: Kein Zug über 2000ms, ich selbst habe mir zum Ziel gesetzt kein Zug über 1000ms. Bisher dümpel ich immer so bei 100-400ms pro Zug auf meinem Netbook rum, aber da ich die Strategie nun nochmals verbessere, brauchte ich was schnelleres.

    Zwar wird die Funktion wiegesagt nur einmal am Start aufgerufen, aber das zählt leider auch schon zu der ersten Zugzeit mit.

    Also... Lange Rede, kurzer Sinn. Fällt euch was ein, wie man diese Funktion Geschwindigkeitsmäßig aufpolieren kann? Länge ist relativ egal...
    Im Anhang das Beispiel Script und ein Screenshot vom Spielfeld, danke schonmal für eure Hilfe :)

    GRuß
    Spider

  • Hi,
    Wenn man die Variablennamen verkürzt kann man auch noch Speed raushohlen. Auch AAPP hilft da.. ggf solltest du die Berechnungen in eine DLL umlagern.

    Spoiler anzeigen
    [autoit]


    Func _1(Const ByRef $1, $2 = "Array: ListView Display", $3 =0xFFFFFFFF, $4 = 0x00000000, $5 = "", $6 = "|", $7 = "")
    If Not IsArray($1) Then Return SetError(0x00000001, 0x00000000, 0x00000000)
    Local $8 = UBound($1, 0x00000000), $9 = UBound($1, 0x00000001) - 0x00000001, $A = UBound($1, 0x00000002) - 0x00000001
    If $8 > 0x00000002 Then Return SetError(0x00000002, 0x00000000, 0x00000000)
    If NOT $5 Then $5 = Chr(0x0000007C)
    If _2($1, $5, 0x00000000, 0x00000000, 0x00000000, 0x00000001) <> -1 Then
    For $B = 0x00000001 To 0x000000FF
    If $B >= 0x00000020 And $B <= 0x0000007F Then ContinueLoop
    Local $C = _2($1, Chr($B), 0x00000000, 0x00000000, 0x00000000, 0x00000001)
    If $C =0xFFFFFFFF Then
    $5 = Chr($B)
    ExitLoop
    EndIf
    Next
    EndIf
    Local $D, $E = 0x00000040
    Local $F = 0x000000FA
    Local $G = Opt("GUIOnEventMode", 0x00000000), $H = Opt("GUIDataSeparatorChar", $5)
    If $A < 0x00000000 Then $A = 0x00000000
    If $4 Then
    $D = $9
    $9 = $A
    $A = $D
    EndIf
    If $A > $F Then $A = $F
    If $3 < 0x00000001 Then $3 = $9
    If $9 > $3 Then $9 = $3
    If NOT $7 Then
    $7 = "Row "
    For $L = 0x00000000 To $A
    $7 &= $5 & "Col " & $L
    Next
    EndIf
    Local $M[$9 + 0x00000001]
    For $L = 0x00000000 To $9
    $M[$L] = "[" & $L & "]"
    For $N = 0x00000000 To $A
    If $8 = 0x00000001 Then
    If $4 Then
    $D = $1[$N]
    Else
    $D = $1[$L]
    EndIf
    Else
    If $4 Then
    $D = $1[$N][$L]
    Else
    $D = $1[$L][$N]
    EndIf
    EndIf
    $D = StringReplace($D, $5, $6, 0x00000000, 0x00000001)
    $M[$L] &= $5 & $D
    $D = StringLen($D)
    If $D > $E Then $E = $D
    Next
    Next
    $E += 0x00000001
    LOCAL CONST $O = 0x66
    LOCAL CONST $P = 0x40
    LOCAL CONST $Q = 0x0200
    LOCAL CONST $R = 0x2
    LOCAL CONST $S = 0x4
    LOCAL CONST $T =0xFFFFFFFD
    LOCAL CONST $U = 0x4
    LOCAL CONST $V = 0x1
    LOCAL CONST $W = (0x1000 + 0x0000001D)
    LOCAL CONST $X = (0x1000 + 0x00000004)
    LOCAL CONST $Y = (0x1000 + 0x0000002C)
    LOCAL CONST $Z = (0x1000 + 0x0000004D)
    LOCAL CONST $10 = (0x1000 + 0x00000036)
    LOCAL CONST $11 = (0x1000 + 0x0000004C)
    LOCAL CONST $12 = 0x20
    LOCAL CONST $13 = 0x1
    LOCAL CONST $14 = 0x8
    LOCAL CONST $15 = 0x0200
    LOCAL CONST $16 = 0x00010000
    LOCAL CONST $17 = 0x00020000
    LOCAL CONST $18 = 0x00040000
    LOCAL CONST $19 = "int Mask;int Item;int SubItem;int State;int StateMask;ptr Text;int TextMax;int Image;int Param;int Indent;int GroupID;int Columns;ptr pColumns"
    Local $1A = BitOR($V, $U)
    Local $1B = DllStructCreate("wchar Text[" & $E & "]"), $1C = DllStructGetPtr($1B)
    Local $1D = DllStructCreate($19), $1E = DllStructGetPtr($1D)
    DllStructSetData($1D, "Param", 0x00000000)
    DllStructSetData($1D, "Text", $1C)
    DllStructSetData($1D, "TextMax", $E)
    Local $1F = 0x00000280, $1G = 0x000001E0
    Local $1H = GUICreate($2, $1F, $1G, Default, Default, BitOR($18, $17, $16))
    Local $1I = WinGetClientSize($1H)
    Local $1J = GUICtrlCreateListView($7, 0x00000000, 0x00000000, $1I[0x00000000], $1I[0x00000001] - 0x0000001A, $14)
    Local $1K = GUICtrlCreateButton("Copy Selected", 0x00000003, $1I[0x00000001] - 0x00000017, $1I[0x00000000] - 0x00000006, 0x00000014)
    GUICtrlSetResizing($1J, $O)
    GUICtrlSetResizing($1K, $R + $S + $P + $Q)
    GUICtrlSendMsg($1J, $10, $13, $13)
    GUICtrlSendMsg($1J, $10, $12, $12)
    GUICtrlSendMsg($1J, $10, $15, $15)
    Local $1L
    For $L = 0x00000000 To $9
    If GUICtrlCreateListViewItem($M[$L], $1J) = 0x00000000 Then
    $1L = StringSplit($M[$L], $5)
    DllStructSetData($1B, "Text", $1L[0x00000001])
    DllStructSetData($1D, "Item", $L)
    DllStructSetData($1D, "SubItem", 0x00000000)
    DllStructSetData($1D, "Mask", $1A)
    GUICtrlSendMsg($1J, $Z, 0x00000000, $1E)
    DllStructSetData($1D, "Mask", $V)
    For $N = 0x00000002 To $1L[0x00000000]
    DllStructSetData($1B, "Text", $1L[$N])
    DllStructSetData($1D, "SubItem", $N - 0x00000001)
    GUICtrlSendMsg($1J, $11, 0x00000000, $1E)
    Next
    EndIf
    Next
    $1F = 0x00000000
    For $L = 0x00000000 To $A + 0x00000001
    $1F += GUICtrlSendMsg($1J, $W, $L, 0x00000000)
    Next
    If $1F < 0x000000FA Then $1F = 0x000000E6
    $1F += 0x00000014
    If $1F > @DesktopWidth Then $1F = @DesktopWidth - 0x00000064
    WinMove($1H, "", (@DesktopWidth - $1F)/0x00000002, Default, $1F)
    GUISetState(@SW_SHOW, $1H)
    While 0x00000001
    Switch GUIGetMsg()
    Case $T
    ExitLoop
    Case $1K
    Local $1M = ""
    Local $1N[0x00000001] = [0x00000000]
    For $L = 0x00000000 To GUICtrlSendMsg($1J, $X, 0x00000000, 0x00000000)
    If GUICtrlSendMsg($1J, $Y, $L, 0x2) Then
    $1N[0x00000000] += 0x00000001
    ReDim $1N[$1N[0x00000000] + 0x00000001]
    $1N[$1N[0x00000000]] = $L
    EndIf
    Next
    If Not $1N[0x00000000] Then
    For $1O In $M
    $1M &= $1O & @CRLF
    Next
    Else
    For $L = 0x00000001 To UBound($1N) - 0x00000001
    $1M &= $M[$1N[$L]] & @CRLF
    Next
    EndIf
    ClipPut($1M)
    EndSwitch
    WEnd
    GUIDelete($1H)
    Opt("GUIOnEventMode", $G)
    Opt("GUIDataSeparatorChar", $H)
    Return 0x00000001
    EndFunc
    Func _2(Const ByRef $1, $1P, $1Q = 0x00000000, $1R = 0x00000000, $1S = 0x00000000, $1T = 0x00000000, $1U = 0x00000001, $1V =0xFFFFFFFF)
    If Not IsArray($1) Then Return SetError(0x00000001, 0x00000000, -1)
    If UBound($1, 0x00000000) > 0x00000002 Or UBound($1, 0x00000000) < 0x00000001 Then Return SetError(0x00000002, 0x00000000, -1)
    Local $9 = UBound($1) - 0x00000001
    If $1R < 0x00000001 Or $1R > $9 Then $1R = $9
    If $1Q < 0x00000000 Then $1Q = 0x00000000
    If $1Q > $1R Then Return SetError(0x00000004, 0x00000000, -1)
    Local $1W = 0x00000001
    If Not $1U Then
    Local $1X = $1Q
    $1Q = $1R
    $1R = $1X
    $1W =0xFFFFFFFF
    EndIf
    Switch UBound($1, 0x00000000)
    Case 0x00000001
    If Not $1T Then
    If Not $1S Then
    For $L = $1Q To $1R Step $1W
    If $1[$L] = $1P Then Return $L
    Next
    Else
    For $L = $1Q To $1R Step $1W
    If $1[$L] == $1P Then Return $L
    Next
    EndIf
    Else
    For $L = $1Q To $1R Step $1W
    If StringInStr($1[$L], $1P, $1S) > 0x00000000 Then Return $L
    Next
    EndIf
    Case 0x00000002
    Local $1Y = UBound($1, 0x00000002) - 0x00000001
    If $1V > $1Y Then $1V = $1Y
    If $1V < 0x00000000 Then
    $1V = 0x00000000
    Else
    $1Y = $1V
    EndIf
    For $N = $1V To $1Y
    If Not $1T Then
    If Not $1S Then
    For $L = $1Q To $1R Step $1W
    If $1[$L][$N] = $1P Then Return $L
    Next
    Else
    For $L = $1Q To $1R Step $1W
    If $1[$L][$N] == $1P Then Return $L
    Next
    EndIf
    Else
    For $L = $1Q To $1R Step $1W
    If StringInStr($1[$L][$N], $1P, $1S) > 0x00000000 Then Return $L
    Next
    EndIf
    Next
    Case Else
    Return SetError(0x00000007, 0x00000000, -1)
    EndSwitch
    Return SetError(0x00000006, 0x00000000, -1)
    EndFunc
    Opt("TrayIconDebug", 0x00000001)
    #Region Variablen
    Global $1Z[0x00000041][0x00000005]
    $1Z[0x00000000][0x00000000] = "GRASS"
    $1Z[0x00000000][0x00000001] = 0x00000005
    $1Z[0x00000000][0x00000002] = 0x00000014
    $1Z[0x00000000][0x00000003] = 0x0000000A
    $1Z[0x00000000][0x00000004] = 0x0000000F
    $1Z[0x00000001][0x00000000] = "GRASS"
    $1Z[0x00000001][0x00000001] = 0x00000033
    $1Z[0x00000001][0x00000002] = 0x00000040
    $1Z[0x00000001][0x00000003] = 0x00000034
    $1Z[0x00000001][0x00000004] = 0x00000009
    $1Z[0x00000002][0x00000000] = "GRASS"
    $1Z[0x00000002][0x00000001] = 0x00000022
    $1Z[0x00000002][0x00000002] = 0x00000021
    $1Z[0x00000002][0x00000003] = 0x0000003E
    $1Z[0x00000002][0x00000004] = 0x0000000E
    $1Z[0x00000003][0x00000000] = "GRASS"
    $1Z[0x00000003][0x00000001] = 0x00000013
    $1Z[0x00000003][0x00000002] = 0x0000002A
    $1Z[0x00000003][0x00000003] = 0x0000002B
    $1Z[0x00000003][0x00000004] = 0x0000003F
    $1Z[0x00000004][0x00000000] = "GRASS"
    $1Z[0x00000004][0x00000001] = 0x00000019
    $1Z[0x00000004][0x00000002] = 0x00000018
    $1Z[0x00000004][0x00000003] = 0x0000003D
    $1Z[0x00000004][0x00000004] = 0x0000003C
    $1Z[0x00000005][0x00000000] = "GRASS"
    $1Z[0x00000005][0x00000001] = 0x00000000
    $1Z[0x00000005][0x00000002] = 0x00000006
    $1Z[0x00000006][0x00000000] = "GRASS"
    $1Z[0x00000006][0x00000001] = 0x00000005
    $1Z[0x00000006][0x00000002] = 0x00000007
    $1Z[0x00000007][0x00000000] = "SAVE"
    $1Z[0x00000007][0x00000001] = 0x00000006
    $1Z[0x00000007][0x00000002] = 0x00000008
    $1Z[0x00000008][0x00000000] = "GRASS"
    $1Z[0x00000008][0x00000001] = 0x00000007
    $1Z[0x00000008][0x00000002] = 0x00000009
    $1Z[0x00000009][0x00000000] = "GRASS"
    $1Z[0x00000009][0x00000001] = 0x00000001
    $1Z[0x00000009][0x00000002] = 0x00000008
    $1Z[0x0000000A][0x00000000] = "GRASS"
    $1Z[0x0000000A][0x00000001] = 0x00000000
    $1Z[0x0000000A][0x00000002] = 0x0000000B
    $1Z[0x0000000B][0x00000000] = "GRASS"
    $1Z[0x0000000B][0x00000001] = 0x0000000A
    $1Z[0x0000000B][0x00000002] = 0x0000000C
    $1Z[0x0000000C][0x00000000] = "SAVE"
    $1Z[0x0000000C][0x00000001] = 0x0000000B
    $1Z[0x0000000C][0x00000002] = 0x0000000D
    $1Z[0x0000000D][0x00000000] = "GRASS"
    $1Z[0x0000000D][0x00000001] = 0x0000000C
    $1Z[0x0000000D][0x00000002] = 0x0000000E
    $1Z[0x0000000E][0x00000000] = "GRASS"
    $1Z[0x0000000E][0x00000001] = 0x00000002
    $1Z[0x0000000E][0x00000002] = 0x0000000D
    $1Z[0x0000000F][0x00000000] = "GRASS"
    $1Z[0x0000000F][0x00000001] = 0x00000000
    $1Z[0x0000000F][0x00000002] = 0x00000010
    $1Z[0x00000010][0x00000000] = "GRASS"
    $1Z[0x00000010][0x00000001] = 0x00000011
    $1Z[0x00000010][0x00000002] = 0x0000000F
    $1Z[0x00000011][0x00000000] = "SAVE"
    $1Z[0x00000011][0x00000001] = 0x00000010
    $1Z[0x00000011][0x00000002] = 0x00000012
    $1Z[0x00000012][0x00000000] = "GRASS"
    $1Z[0x00000012][0x00000001] = 0x00000011
    $1Z[0x00000012][0x00000002] = 0x00000013
    $1Z[0x00000013][0x00000000] = "GRASS"
    $1Z[0x00000013][0x00000001] = 0x00000012
    $1Z[0x00000013][0x00000002] = 0x00000003
    $1Z[0x00000014][0x00000000] = "GRASS"
    $1Z[0x00000014][0x00000001] = 0x00000000
    $1Z[0x00000014][0x00000002] = 0x00000015
    $1Z[0x00000015][0x00000000] = "GRASS"
    $1Z[0x00000015][0x00000001] = 0x00000014
    $1Z[0x00000015][0x00000002] = 0x00000016
    $1Z[0x00000016][0x00000000] = "SAVE"
    $1Z[0x00000016][0x00000001] = 0x00000015
    $1Z[0x00000016][0x00000002] = 0x00000017
    $1Z[0x00000017][0x00000000] = "GRASS"
    $1Z[0x00000017][0x00000001] = 0x00000016
    $1Z[0x00000017][0x00000002] = 0x00000018
    $1Z[0x00000018][0x00000000] = "GRASS"
    $1Z[0x00000018][0x00000001] = 0x00000004
    $1Z[0x00000018][0x00000002] = 0x00000017
    $1Z[0x00000019][0x00000000] = "GRASS"
    $1Z[0x00000019][0x00000001] = 0x00000004
    $1Z[0x00000019][0x00000002] = 0x0000001A
    $1Z[0x0000001A][0x00000000] = "GRASS"
    $1Z[0x0000001A][0x00000001] = 0x00000019
    $1Z[0x0000001A][0x00000002] = 0x0000001B
    $1Z[0x0000001B][0x00000000] = "GRASS"
    $1Z[0x0000001B][0x00000001] = 0x0000001A
    $1Z[0x0000001B][0x00000002] = 0x0000001C
    $1Z[0x0000001C][0x00000000] = "SAVE"
    $1Z[0x0000001C][0x00000001] = 0x0000001B
    $1Z[0x0000001C][0x00000002] = 0x0000001D
    $1Z[0x0000001D][0x00000000] = "GRASS"
    $1Z[0x0000001D][0x00000001] = 0x0000001C
    $1Z[0x0000001D][0x00000002] = 0x0000001E
    $1Z[0x0000001E][0x00000000] = "SAVE"
    $1Z[0x0000001E][0x00000001] = 0x0000001D
    $1Z[0x0000001E][0x00000002] = 0x0000001F
    $1Z[0x0000001F][0x00000000] = "GRASS"
    $1Z[0x0000001F][0x00000001] = 0x00000020
    $1Z[0x0000001F][0x00000002] = 0x0000001E
    $1Z[0x00000020][0x00000000] = "GRASS"
    $1Z[0x00000020][0x00000001] = 0x00000021
    $1Z[0x00000020][0x00000002] = 0x0000001F
    $1Z[0x00000021][0x00000000] = "GRASS"
    $1Z[0x00000021][0x00000001] = 0x00000020
    $1Z[0x00000021][0x00000002] = 0x00000002
    $1Z[0x00000022][0x00000000] = "GRASS"
    $1Z[0x00000022][0x00000001] = 0x00000023
    $1Z[0x00000022][0x00000002] = 0x00000002
    $1Z[0x00000023][0x00000000] = "GRASS"
    $1Z[0x00000023][0x00000001] = 0x00000022
    $1Z[0x00000023][0x00000002] = 0x00000024
    $1Z[0x00000024][0x00000000] = "GRASS"
    $1Z[0x00000024][0x00000001] = 0x00000023
    $1Z[0x00000024][0x00000002] = 0x00000025
    $1Z[0x00000025][0x00000000] = "SAVE"
    $1Z[0x00000025][0x00000001] = 0x00000026
    $1Z[0x00000025][0x00000002] = 0x00000024
    $1Z[0x00000026][0x00000000] = "GRASS"
    $1Z[0x00000026][0x00000001] = 0x00000027
    $1Z[0x00000026][0x00000002] = 0x00000025
    $1Z[0x00000027][0x00000000] = "SAVE"
    $1Z[0x00000027][0x00000001] = 0x00000026
    $1Z[0x00000027][0x00000002] = 0x00000028
    $1Z[0x00000028][0x00000000] = "GRASS"
    $1Z[0x00000028][0x00000001] = 0x00000027
    $1Z[0x00000028][0x00000002] = 0x00000029
    $1Z[0x00000029][0x00000000] = "GRASS"
    $1Z[0x00000029][0x00000001] = 0x0000002A
    $1Z[0x00000029][0x00000002] = 0x00000028
    $1Z[0x0000002A][0x00000000] = "GRASS"
    $1Z[0x0000002A][0x00000001] = 0x00000003
    $1Z[0x0000002A][0x00000002] = 0x00000029
    $1Z[0x0000002B][0x00000000] = "GRASS"
    $1Z[0x0000002B][0x00000001] = 0x00000003
    $1Z[0x0000002B][0x00000002] = 0x0000002C
    $1Z[0x0000002C][0x00000000] = "GRASS"
    $1Z[0x0000002C][0x00000001] = 0x0000002B
    $1Z[0x0000002C][0x00000002] = 0x0000002D
    $1Z[0x0000002D][0x00000000] = "GRASS"
    $1Z[0x0000002D][0x00000001] = 0x0000002E
    $1Z[0x0000002D][0x00000002] = 0x0000002C
    $1Z[0x0000002E][0x00000000] = "SAVE"
    $1Z[0x0000002E][0x00000001] = 0x0000002F
    $1Z[0x0000002E][0x00000002] = 0x0000002D
    $1Z[0x0000002F][0x00000000] = "GRASS"
    $1Z[0x0000002F][0x00000001] = 0x00000030
    $1Z[0x0000002F][0x00000002] = 0x0000002E
    $1Z[0x00000030][0x00000000] = "SAVE"
    $1Z[0x00000030][0x00000001] = 0x00000031
    $1Z[0x00000030][0x00000002] = 0x0000002F
    $1Z[0x00000031][0x00000000] = "GRASS"
    $1Z[0x00000031][0x00000001] = 0x00000032
    $1Z[0x00000031][0x00000002] = 0x00000030
    $1Z[0x00000032][0x00000000] = "GRASS"
    $1Z[0x00000032][0x00000001] = 0x00000033
    $1Z[0x00000032][0x00000002] = 0x00000031
    $1Z[0x00000033][0x00000000] = "GRASS"
    $1Z[0x00000033][0x00000001] = 0x00000032
    $1Z[0x00000033][0x00000002] = 0x00000001
    $1Z[0x00000034][0x00000000] = "GRASS"
    $1Z[0x00000034][0x00000001] = 0x00000001
    $1Z[0x00000034][0x00000002] = 0x00000035
    $1Z[0x00000035][0x00000000] = "GRASS"
    $1Z[0x00000035][0x00000001] = 0x00000036
    $1Z[0x00000035][0x00000002] = 0x00000034
    $1Z[0x00000036][0x00000000] = "GRASS"
    $1Z[0x00000036][0x00000001] = 0x00000037
    $1Z[0x00000036][0x00000002] = 0x00000035
    $1Z[0x00000037][0x00000000] = "SAVE"
    $1Z[0x00000037][0x00000001] = 0x00000036
    $1Z[0x00000037][0x00000002] = 0x00000038
    $1Z[0x00000038][0x00000000] = "GRASS"
    $1Z[0x00000038][0x00000001] = 0x00000037
    $1Z[0x00000038][0x00000002] = 0x00000039
    $1Z[0x00000039][0x00000000] = "SAVE"
    $1Z[0x00000039][0x00000001] = 0x0000003A
    $1Z[0x00000039][0x00000002] = 0x00000038
    $1Z[0x0000003A][0x00000000] = "GRASS"
    $1Z[0x0000003A][0x00000001] = 0x0000003B
    $1Z[0x0000003A][0x00000002] = 0x00000039
    $1Z[0x0000003B][0x00000000] = "GRASS"
    $1Z[0x0000003B][0x00000001] = 0x0000003A
    $1Z[0x0000003B][0x00000002] = 0x0000003C
    $1Z[0x0000003C][0x00000000] = "GRASS"
    $1Z[0x0000003C][0x00000001] = 0x00000004
    $1Z[0x0000003C][0x00000002] = 0x0000003B
    $1Z[0x0000003D][0x00000000] = "HOME2"
    $1Z[0x0000003D][0x00000001] = 0x00000004
    $1Z[0x0000003E][0x00000000] = "HOME1"
    $1Z[0x0000003E][0x00000001] = 0x00000002
    $1Z[0x0000003F][0x00000000] = "HOME2"
    $1Z[0x0000003F][0x00000001] = 0x00000003
    $1Z[0x00000040][0x00000000] = "HOME1"
    $1Z[0x00000040][0x00000001] = 0x00000001
    Global $20[0x00000041][0x00000041]
    #EndRegion Variablen
    $21 = TimerInit()
    _3()
    ConsoleWrite(TimerDiff($21) & "ms" & @CRLF)
    _1($20)
    Func _3()
    Local $L, $N, $22
    Local $23, $24
    For $L = 0x00000000 To 0x00000040
    For $N = 0x00000000 To 0x00000040
    $20[$L][$N] = 0x00000064
    Next
    $23 = 0x00000000
    $24 = 0x00000040
    $20[$L][$L] = 0x00000000
    While $24 > 0x00000000
    For $N = 0x00000000 To 0x00000040
    If $20[$L][$N] = $23 Then
    For $22 = 0x00000001 To 0x00000004
    If String($1Z[$N][$22]) <> '' Then
    If $20[$L][$1Z[$N][$22]] = 0x00000064 Then
    $20[$L][$1Z[$N][$22]] = $23 + 0x00000001
    $24 = $24 - 0x00000001
    EndIf
    EndIf
    Next
    EndIf
    Next
    $23 = $23 + 0x00000001
    WEnd
    Next
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Hallo,

    @Pee: Ich habe es ja eben mit Dynamischer Programmierung versucht (erst ein Globals array schreiben und später dann darauf zugreifen). Wie ich dies noch weiter unterteilen soll, weiß ich leider nicht...

    @Sprenger: Durch die kürzeren Variablen braucht er Durchschnittlich ca. 10 ms weniger, das ist immer noch zu viel :(
    Auf DDLs würde ich äußerst ungerne zurückgreifen, da auf dem Server später Linux mit WINE läuft, und ich mir nicht sicher bin, was genau alles funktioniert und was nicht...
    Aber danke schonmal euch beiden :)

    Gruß
    Spider

  • Eine kleine Verschnellerung konnte ich rausholen.
    (Bei mir dauerte es vorher ca. 240-250 und jetzt 190-200...)

    Switch Befehle sind in der regel schneller als If Abfragen.
    $bla += 1 ist schneller als $bla = $bla + 1 (ebenso mit Minus)
    In der Schleife jedesmal $iDiff und $iToDo zu deklarieren mit Local dauert länger als es vorher zu deklarieren.
    Das Array voll mir 100ern schreiben kann man auch vor dem Funktionscall machen.
    While $bla > 0 ist langsamer als While $bla (weil wenn bla = 0 bricht die Sache auch so ab)
    gleiches gilt für If $bla <> '' then ist langsamer als If $bla then

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Opt("TrayIconDebug", 1)
    #Region Variablen
    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
    Global $SC_ARR_DIFFERENCEBETWPLACES[65][65]
    #EndRegion Variablen

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

    For $i = 0 To 64
    For $j = 0 To 64
    ;Hier wird das Array erstmal voll mit 100ern geschrieben
    $SC_ARR_DIFFERENCEBETWPLACES[$i][$j] = 100
    Next
    Next

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

    $hTi = TimerInit()
    _SC_DifferenceBetweenPlaces()
    ConsoleWrite(TimerDiff($hTi) & "ms" & @CRLF)
    _ArrayDisplay($SC_ARR_DIFFERENCEBETWPLACES)

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

    Func _SC_DifferenceBetweenPlaces()
    Local $i, $j, $k, $iDiff = 0, $iToDo = 64
    For $i = 0 To 64
    ;Diff = die Entferung der Felder
    $iDiff = 0
    ;ToDo = Die felder, die noch übrig sind
    $iToDo = 64
    ;Setzte das Array bei [i][i] auf 0, da dort die Entfernung ja 0 beträgt ;)
    $SC_ARR_DIFFERENCEBETWPLACES[$i][$i] = 0
    ;Solange etwas zu tun ist
    While $iToDo
    For $j = 0 To 64
    ;Am anfang ist iDiff = 0 und SC_ARR_DIFFERENCEBETWPLACES[i][i] auch 0, dann gehts halt weiter
    Switch $SC_ARR_DIFFERENCEBETWPLACES[$i][$j]
    Case $iDiff
    For $k = 1 To 4
    ;SC_ARR_PLACES[$j][$k] geben bis zu 4 Nachbarsfelder aus (z.B. von Feld 0 ist es 5, 10, 15 und 20)
    If String($SC_ARR_PLACES[$j][$k]) Then
    ;Wenn = 100, also noch nicht behandelt, setze die Differenz der beiden Felder auf iDiff
    Switch $SC_ARR_DIFFERENCEBETWPLACES[$i][$SC_ARR_PLACES[$j][$k]]
    Case 100
    $SC_ARR_DIFFERENCEBETWPLACES[$i][$SC_ARR_PLACES[$j][$k]] = $iDiff + 1
    $iToDo -= 1
    EndSwitch
    EndIf
    Next
    EndSwitch
    ;~ EndIf
    Next
    ;Differenze += 1
    $iDiff += 1
    WEnd
    Next
    EndFunc ;==>_SC_DifferenceBetweenPlaces

    [/autoit]

    ist wahrscheinlich noch nicht das ultimatum, aber immerhin etwas...

    lg

  • So wies ausschaut braucht man alle Schleifen die Verwendet werden.
    Und das ist das was die meiste Zeit verbraucht... Dass der Ablauf 64*64*64*4 Mal gemacht werden muss. (Das sind über eine Mio Durchläufe.)

    Ob oder wie man das in Weniger Loops als 4 reinpacken kann weiß ich nicht.
    Das wäre aber DIE Möglichkeit Zeit rauszuholen.

    Ich schätze mal, wenn die Funktion nur einmal Ausgeführt werden muss, dann gehen 190ms schon in Ordnung.

    ODER

    Du lässt die Funktion das Array anfertigen und packst dieses direkt in den Quellcode rein.
    So nach dem Motto: Wozu Rechnen, ist doch alles da !

    Spoiler anzeigen
    [autoit]

    Local $Turm[6][10][5] = _
    [[[$n[0], 10, 0.1, 200, 1],[$n[0], 10, 0.15, 210, 1],[$n[0], 10, 0.2, 220, 1],[$n[0], 10, 0.25, 230, 1],[$n[0], 10, 0.3, 240, 1],[$n[0], 10, 0.35, 250, 1],[$n[0], 10, 0.4, 260, 1],[$n[0], 10, 0.45, 270, 1],[$n[0], 10, 0.5, 280, 1],[$n[0], 10, 0.55, 290, 1]], _
    [[$n[1], 50, 5, 200, 25],[$n[1], 70, 10, 210, 24],[$n[1], 90, 15, 220, 23],[$n[1], 110, 20, 230, 22],[$n[1], 130, 25, 240, 21],[$n[1], 150, 30, 250, 20],[$n[1], 170, 35, 260, 19],[$n[1], 190, 40, 270, 18],[$n[1], 210, 45, 285, 17],[$n[1], 230, 50, 300, 16]], _
    [[$n[2], 90, 20, 360, 50],[$n[2], 180, 40, 380, 48],[$n[2], 270, 60, 400, 46],[$n[2], 360, 80, 420, 44],[$n[2], 450, 100, 440, 42],[$n[2], 540, 120, 460, 40],[$n[2], 630, 140, 480, 38],[$n[2], 720, 160, 500, 36],[$n[2], 810, 180, 520, 34],[$n[2], 900 , 200, 540, 32]], _
    [[$n[3], 200, 9, 200, 20],[$n[3], 300, 13, 210, 20],[$n[3], 400, 17, 220, 19],[$n[3], 500, 21, 230, 19],[$n[3], 600, 25, 240, 18],[$n[3], 700, 29, 250, 18],[$n[3], 800, 33, 260, 17],[$n[3], 900, 37, 270, 17],[$n[3], 1000, 41, 280, 16],[$n[3], 1100, 45, 290, 16]], _
    [[$n[4], 30, 1, 300, 30],[$n[4], 60, 2, 310, 30],[$n[4], 90, 3, 320, 30],[$n[4], 120, 4, 330, 30],[$n[4], 150, 5, 340, 30],[$n[4], 180, 6, 350, 30],[$n[4], 210, 7, 360, 30],[$n[4], 240, 8, 370, 30],[$n[4], 270, 9, 380, 30],[$n[4], 300, 10, 390, 30]], _
    [[$n[5], 15, 0.6, 250, 4],[$n[5], 15, 0.85, 260, 4],[$n[5], 15, 1.1, 270, 4],[$n[5], 15, 1.35, 280, 4],[$n[5], 15, 1.6, 290, 4],[$n[5], 15, 1.85, 300, 4],[$n[5], 15, 2.1, 310, 4],[$n[5], 15, 2.35, 320, 4],[$n[5], 15, 2.6, 330, 4],[$n[5], 15, 2.85, 340, 4]]]

    [/autoit]

    (Ausschnitt aus meinem TD :P)
    lg

  • wegen den Dlls die sollten unter wine laufen ich kenne leute die haben schon ganze gameserver darauf laufen lassen und die gameserver greifen meistens für berechnungen auf irgendwelche dlls zurück

  • Hi GtaSpider!


    Du könntes noch abfragen einsparen und zeit rasuholen.
    Skript angepasst.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Opt("TrayIconDebug", 1)
    #Region Variablen
    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
    Global $SC_ARR[65][65]
    #EndRegion Variablen

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

    $hTi = TimerInit()
    _SC_DifferenceBetweenPlaces()
    ConsoleWrite(TimerDiff($hTi) & "ms" & @CRLF)
    _ArrayDisplay($SC_ARR)

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

    Func _SC_DifferenceBetweenPlaces()
    Local $iDiff, $iToDo, $Ub
    For $i = 0 To 64
    For $e = 0 To 64
    $SC_ARR[$i][$e] = 100
    Next
    Next
    For $i = 0 To 64
    $iDiff = 0
    $iToDo = 64
    $SC_ARR[$i][$i] = $iDiff
    While $iToDo
    For $e = 0 To 64
    Switch $SC_ARR[$i][$e]
    Case $iDiff
    Switch $e
    Case 0 To 4
    $Ub = 4
    Case 4 To 60
    $Ub = 2
    Case 60 To 64
    $Ub = 1
    If $SC_ARR[$i][$SC_ARR_PLACES[$e][1]] < 100 Then ContinueLoop
    EndSwitch
    For $j = 1 To $Ub
    Switch $SC_ARR[$i][$SC_ARR_PLACES[$e][$j]]
    Case 100
    $SC_ARR[$i][$SC_ARR_PLACES[$e][$j]] = $iDiff + 1
    $iToDo -= 1
    EndSwitch
    Next
    EndSwitch
    Next
    $iDiff += 1
    WEnd
    Next
    EndFunc ;==>_SC_DifferenceBetweenPlaces

    [/autoit]

    Lg Kleiner

  • Das musst du wirklich nicht jedes Mal neu berechnen ;) Erstelle einfach AutoIt-Code aus dem Array, dann ist die Rechung schon mal weg

    [autoit]

    $s = "Global $SC_ARR[" & UBound($SC_ARR) & "][" & UBound($SC_ARR, 2) & ] = [ _ " & @CRLF
    For $i = 0 To UBound($SC_ARR)-1
    $s &= @TAB & "[ "
    For $j = 0 To UBound($SC_ARR, 2) -1
    $s &= $SC_ARR[$i][$j] & ", "
    Next
    $s = StringTrimRight($s, 2) & " ], _" & @CRLF
    Next
    $s = StringTrimRight($s, 5) & " _" & @CRLF & "]"
    ClipPut($s)

    [/autoit]
  • Hi!

    Mir fällt da gerade noch was ein, horizontal u. vertikal sind gleich wenn jetzt noch die Logik der horizontal Berechnung angepasst wird würde Theoretisch der Code doppelt so schnell sein oder schneller.

    Wie hier schon angemerkt muss ja nicht jedes Mal berechnet werden.


    Lg Kleiner