Arrays ohne Wertzweisung

  • Hi,
    ich weis, dass es dumm ist Fragen zu stellen die wahrscheinlich sehr leicht zu beantworten sind, aber
    ich seh wegen der ordentlichen Struktur meisen Skripts (*hüstel*) den Wald vor lauter Bäumen nicht mehr. . .
    Soll später mal ein Spiel werden und dafür sollen die Karten geladen werden.

    Wenn ich das Skript aber starte, dann meint AutoIt :

    Line 20 (File . . .)
    $iMapField[] = ""
    $iMapField^ERROR

    Error:Expected a "=" opertator in assignment statement.


    WAS TUN ???

    P.S. Die Exit Funktion ist noch nich geschrieben worden... (Dumm von mir ich weis..)

    FLOSCHLO

    [autoit]


    #include
    #include
    #include

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

    _GDIPlus_Startup ()
    $iMapField[] = ""
    $pMapField[] = ""
    Global Const $FILENOTFOUND = 63529384
    Global Const $chPicPath = @ScriptDir & "\Pictures"
    Global $pPlayer = _GDIPlus_ImageLoadFromFile($chPicPath & "\Player1.png")

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

    Global Const $GUI = GUICreate("WISH (beta)", 500, 500, -1, -1, BitOR( $WS_MINIMIZEBOX,$WS_SYSMENU,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_BORDER,$WS_CLIPSIBLINGS))

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

    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($GUI)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(500, 500, $hGraphics)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    GUISetState(@SW_SHOW)

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

    Map_Load (@ScriptDir & "\Maps\TestMap.map")
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func Map_Load ($chMapPath)
    Global $chMapName = IniRead($chMapPath,"Map","Name","")
    MsgBox(0,"",$chMapName & " wurde rfolgreich geladen. . .")
    $i = 0
    Do
    $iMapField[$i] = IniRead($chMapPath,"Map","Field" & $i , "")
    If $iMapField[$i] = "Tree" Then
    $pMapField[$i] = _GDIPlus_ImageLoadFromFile($chPicPath & "\Tree.png")
    ElseIf $iMapField[$i] = "Meadow" Then
    $pMapField[$i] = _GDIPlus_ImageLoadFromFile($chPicPath & "\Meadow.png")
    EndIf
    $i += 1
    Until $i < 100
    EndFunc

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

    Func Map_Render ()
    $i = 0
    $iMapPosX = 0
    $iMapPosY = 0
    Do ;Hier wird die Y Position bestimmt. . .
    Do ;Hier die X Position
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $pMapField[$i] ,$iMapPosX ,$iMapPosY, 50, 50)
    $iMapPosX += 50
    Until $iMapPosX < 450
    $iMapPosY += 50
    Until $iMapPosY < 450
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von floschlo (31. Dezember 2010 um 18:15)

  • Also erstmal ist die Array-Deklaration falsch... Es muss ein Global,Local oder Dim davor und in die eckigen Klammern die Anzahl der Elemente...Das "=" kannst du so nicht verwenden. Außerdem macht deine Do...Until schleife keinen Sinn, da $i die ganze Zeit unter 100 ist... Es müsste

    [autoit]

    Until $i = 100

    [/autoit]

    sein. Also ist die Anzahl der Elemente bei dir dann 101

  • Nun ich würde anstelle dieser dummen do until schleife auch ne For schleife verwendnen, aber ich weis nur wie die in c++ verwendet werden, und die atoit variante ist mir etwas zu hoch. . .

    Ich probier mal aus wozu ihr mir geraten habt. . .

    Danke an alle

    Floschlo

    • Offizieller Beitrag

    Beispiel:

    [autoit]

    Func Map_Load($chMapPath)
    Global $chMapName = IniRead($chMapPath, "Map", "Name", "")
    MsgBox(0, "", $chMapName & " wurde rfolgreich geladen. . .")
    For $i = 0 To 100
    $iMapField[$i] = IniRead($chMapPath, "Map", "Field" & $i, "")
    If $iMapField[$i] = "Tree" Then
    $pMapField[$i] = _GDIPlus_ImageLoadFromFile($chPicPath & "\Tree.png")
    ElseIf $iMapField[$i] = "Meadow" Then
    $pMapField[$i] = _GDIPlus_ImageLoadFromFile($chPicPath & "\Meadow.png")
    EndIf
    Next
    EndFunc ;==>Map_Load

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

    Func Map_Render()
    Local $i = 0
    Local $iMapPosX, $iMapPosY
    For $iMapPosX = 0 To 450 Step 50
    For $iMapPosY = 0 To 450 Step 50
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $pMapField[$i], $iMapPosX, $iMapPosY, 50, 50)
    Next
    Next
    EndFunc ;==>Map_Render

    [/autoit]

    Wobei ich nicht weis, wofür du $i in der Func Map_Render benutzt, ggF solltest du den Wert von $i auch ändern. :thumbup:

  • Die for-schleifen sind doch ganz einfach:

    Code
    for (int i=0; i<100; ++i)
    {
    //blabla
    }


    ist

    [autoit]

    For $i=0 To 99
    ;blabla
    next

    [/autoit]

    und

    Code
    for (int i=0; i<100; i+=2)
    {
    //blabla
    }


    ist

    [autoit]

    For $i=0 To 99 step 2
    ;blabla
    next

    [/autoit]


    EDIT: Danke progandy, ich habs geändert, sonst kopiert es noch jemand raus und kann dann den Fehler nicht finden.

  • Nun ich habe meine Code jetzt angepasst, aber nun meint AutoIt:

    Line 68 (File "C:\Bla")
    $iMapField[$i] = IniRead($chMapPath, "Map", "Field" & $i, "")
    ^ERROR

    Error : Array variable has incorrect number of subscripts or subscripts dimension range exceeded.


    Danke für die Hilfe, wer Lust hat kann auch aktiv beiu dem Spie mitarbeite, soll sowas wie "The Mana World" werden...


    FLOSCHLO

    [autoit]


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

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

    OnAutoItExitRegister("Game_Exit")

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

    _GDIPlus_Startup ()
    Dim $iMapField[100]
    Dim $pMapField[100]
    Global Const $FILENOTFOUND = 63529384
    Global Const $chPicPath = @ScriptDir & "\Pictures"
    Global $pPlayer = _GDIPlus_ImageLoadFromFile($chPicPath & "\Player1.png")

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

    Global Const $GUI = GUICreate("WISH (beta)", 500, 500, -1, -1, BitOR( $WS_MINIMIZEBOX,$WS_SYSMENU,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_BORDER,$WS_CLIPSIBLINGS))

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

    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($GUI)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(500, 500, $hGraphics)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    GUISetState(@SW_SHOW)

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

    Map_Load (@ScriptDir & "\Maps\TestMap.map")
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Map_Render ()
    _GDIPlus_GraphicsDrawImage($hGraphics,$hBuffer,0,0)
    WEnd
    ;Die alte Version
    #cs
    Func Map_Load ($chMapPath)
    Global $chMapName = IniRead($chMapPath,"Map","Name","")
    MsgBox(0,"",$chMapName & " wurde rfolgreich geladen. . .")
    $i = 0
    Do
    $iMapField[$i] = IniRead($chMapPath,"Map","Field" & $i , "")
    If $iMapField[$i] = "Tree" Then
    $pMapField[$i] = _GDIPlus_ImageLoadFromFile($chPicPath & "\Tree.png")
    ElseIf $iMapField[$i] = "Meadow" Then
    $pMapField[$i] = _GDIPlus_ImageLoadFromFile($chPicPath & "\Meadow.png")
    EndIf
    $i += 1
    Until $i < 100
    EndFunc

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

    Func Map_Render ()
    $i = 0
    $iMapPosX = 0
    $iMapPosY = 0
    Do ;Hier wird die Y Position bestimmt. . .
    Do ;Hier die X Position
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $pMapField[$i] ,$iMapPosX ,$iMapPosY, 50, 50)
    $iMapPosX += 50
    Until $iMapPosX < 450
    $iMapPosY += 50
    Until $iMapPosY < 450
    EndFunc
    #ce

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

    Func Map_Load($chMapPath)
    Global $chMapName = IniRead($chMapPath, "Map", "Name", "")
    MsgBox(0, "", $chMapName & " wurde rfolgreich geladen. . .")
    For $i = 0 To 100 Step 1
    $iMapField[$i] = IniRead($chMapPath, "Map", "Field" & $i, "")
    If $iMapField[$i] = "Tree" Then
    $pMapField[$i] = _GDIPlus_ImageLoadFromFile($chPicPath & "\Tree.png")
    ElseIf $iMapField[$i] = "Meadow" Then
    $pMapField[$i] = _GDIPlus_ImageLoadFromFile($chPicPath & "\Meadow.png")
    EndIf
    Next
    EndFunc ;==>Map_Load

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

    Func Map_Render()
    Local $i = 0
    Local $iMapPosX, $iMapPosY
    For $iMapPosX = 0 To 450 Step 50
    For $iMapPosY = 0 To 450 Step 50
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $pMapField[$i], $iMapPosX, $iMapPosY, 50, 50)
    Next
    Next
    EndFunc ;==>Map_Render

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

    Func Game_Exit()
    _GDIPlus_ImageDispose($pMapField)
    _GDIPlus_ImageDispose($pPlayer)
    _GDIPlus_Shutdown ()
    SoundPlay(@ScriptDir & "\Sound\Exit.wav")
    Exit
    EndFunc

    [/autoit]
  • Danke hat jetzt geklappt...

    Dann warten wir am besten auf miene nächste unsinnige und leicht zu beantwortende Frage. . .

    mfG
    FLOSCHLO

  • Danke hat jetzt geklappt...

    schön, dann ist dein Problem ja gelöst, schön wäre es allerdings auch wenn du den Thread auf gelöst setzt. Einfach 1. Beitrag bearbeiten, Präfix (nähe Überschrift) ändern und speichern (absenden)

    mfg autoBert