Spielfeld, 2D-Array

    • Offizieller Beitrag

    Theoretisch sollte man 28800 einzelne Grafiken (Pics) erstellen können (die Hilfe sagt dazu: GUI_MAXCONTROLS = 65532), aber praktisch sieht das etwas anders aus:

    Spoiler anzeigen
    [autoit]


    #Region Header
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $Laenge = 120, $Breite = 240, $Kastengroesse = 5
    Global $Feld[$Laenge][$Breite]

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

    Opt('MouseCoordMode', 0)
    Opt("GUIOnEventMode", 1)
    #EndRegion Header

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

    #Region GUI
    $Form1 = GUICreate("Form1", $Breite * $Kastengroesse + 20, $Laenge * $Kastengroesse + 20, -1, -1, BitOr($GUI_SS_DEFAULT_GUI, $WS_CLIPCHILDREN))
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    ;~ GUICtrlCreatePic(@WindowsDir & "\web\wallpaper\Mondkrater.jpg", 10, 10, $Breite * $Kastengroesse, $Laenge * $Kastengroesse)

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

    $aWPos = WinGetPos($Form1)
    $Form2 = GUICreate("Form2", $Breite * $Kastengroesse + 20, $Laenge * $Kastengroesse + 20, $aWPos[0]+3, $aWPos[1]+29, $WS_POPUP, Default, $Form1)
    ;~ Global $hGraphic = GUICtrlCreateGraphic(10, 10, $Breite * $Kastengroesse, $Laenge * $Kastengroesse)
    ;~ GUICtrlSetOnEvent(-1, '_feld')
    $count = 0
    $ret = 0
    For $x = 0 To $Breite - 1 Step 1
    For $y = 0 To $Laenge - 1 Step 1
    $ret = GUICtrlCreatePic('', 10+$Kastengroesse * $x, 10+$Kastengroesse * $y, $Kastengroesse, $Kastengroesse, Default, $WS_EX_CLIENTEDGE)
    If $ret <> 0 Then $count += 1
    ToolTip($count)
    ;~ GUICtrlSetGraphic($hGraphic, $GUI_GR_RECT, $Kastengroesse * $x, $Kastengroesse * $y, $Kastengroesse, $Kastengroesse)
    Next
    Next
    WinSetTrans($Form2, '', 80)

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

    GUISetState(@SW_SHOW, $Form1)
    GUISetState(@SW_SHOW, $Form2)
    GUIRegisterMsg($WM_MOVE, '_WM_MOVE')

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

    #EndRegion GUI

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

    While 1
    Sleep(100)
    WEnd

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

    Func _feld()
    Local $aInfo = GUIGetCursorInfo($Form2)
    $x = Int(($aInfo[0]-10)/5)
    $Y = Int(($aInfo[1]-10)/5)
    ToolTip($x&@CRLF&$y)
    EndFunc ;==>_feld

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func _WM_MOVE()
    Local $pos = WinGetPos($Form1)
    WinMove($Form2, '', $pos[0]+3, $pos[1]+29)
    EndFunc

    [/autoit]

    Bei mir hört er bei 9982 auf zu zählen, was ein Zeichen dafür ist, dass die anderen Controls nicht erstellt worden sind. Wie man dann ja auch zu sehen bekommt.

    • Offizieller Beitrag

    ich bracuh für jedes Feld eine unterschiedliche... Wie krieg ich sowas hin? muss ich also doch einzelne Grafiken erstellen :?:

    Für jedes Kasterl ein Bild??? Was sollen das für Bilder sein - bei 5 x 5 Pixel siehst du doch eh nichts, selbst bei 20 x 20 ist ein Bild noch nicht erkennbar.

    Ja, das ist klar. Das weiß ich ja... ;) Ich meine, wie kommt der Computer darauf, sich für eine Zahl zu "entscheiden"?

    Ich glaube, es wird eine Rechenoperation auf Basis der aktuellen Zeit ausgeführt.

  • Guten Abend! :D
    Oscar : Das sieht dann schlecht für mich aus...
    @peethbee: Danke! Dann hab ich das also auch verstanden
    BugFix : In meinen Kommentaren hatte ich das ja schon geschrieben, zuerst nur eine Hintergrundfarbe, dann eine einfache Zeichnung etc...

    Gibt es denn wirklich keine Möglichkeit dafür?

    Irgendwie muss das doch gehen...

  • Hallo! und guten Morgen

    Ich hab jetzt eine Idee. Ich benutze eine "Minimap". Das dürfte klappen!

    Danke! :thumbup: