Beiträge von James

    Du könntest auch einfach folgendes in au3.properties einfügen:

    Code
    # 42 Open in Windows Explorer
    command.name.42.$(au3)=Open in Windows Explorer
    command.mode.42.$(au3)=savebefore:no
    command.shortcut.42.$(au3)=Ctrl+Alt+Shift+O
    command.42.$(au3)=start explorer.exe /select,"$(FilePath)"

    Ausgerechnet die ineffizienteste Methode von den dreien.


    Du musst dazu nur jede Position auf dem Spielfeld rekursiv bewerten, d.h. jede Position hat einen Punktestand, der bei jedem Gewinn, der von dieser Position aus möglich ist, um 1 erhöht und bei jeder Niederlage um 1 gesenkt wird. Dazu eignet sich am besten eine Funktion die sich für jede freie Position selbst rekursiv aufruft. Ich weiß leider nicht wie ich das einfach genug erklären kann sodass es jemand der nicht ich ist versteht, von daher einfach ein bisschen probieren oder eine der anderen 2 Möglichkeiten versuchen. :D

    • Tic-tac-toe ist ein gelöstes Spiel, d.h. es gibt eine Strategie die immer zum Sieg führt (oder zu einem Unentschieden, wenn beide perfekt spielen). Auf Wikipedia ist diese Strategie sehr schön erklärt.
    • Brute-Force-Methode: Da es für Tic-tac-toe nicht allzu viele Möglichkeiten gibt kann man auch einfach alle möglichen Züge berechnen und dann anhand der daraus resultierenden Gewinne entscheiden, welcher Zug der langfristig beste ist. Das Ergebnis sollte zur perfekten Strategie eigentlich keinen Unterschied machen, es dauert nur um einiges länger. Wenn du den Spieler anfangen lässt ersparst du es dir aus den ersten 9 Möglichkeiten die richtige auszusuchen; bei 8 freien Feldern kann es einige Sekunden dauern. Alle weiteren Züge sollten ohne spürbare Zeitverzögerung funktionieren. Du kannst natürlich auch alles in einer Art Datenbank speichern, das lohnt sich aber denke ich nur für den ersten Zug.
    • Für ein Spiel wie Tic-tac-toe eigentlich vollkommen übertrieben, aber falls du es mit künstlicher Intelligenz machen willst bieten sich künstliche neuronale Netze, genetische Algorithmen oder eine Kombination der beiden an.

    Wenn \d eine Ziffer ist dann ist \d+ eine Folge von mindestens einer Ziffer, also einfach gesagt eine Zahl.


    .*? hat denke ich keinen Unterschied gemacht, da die Einträge in einzelnen Zeilen stehen, und Zeilenumbrüche werden von . nicht erkannt.
    Der Unterschied wäre folgendes:
    <test>(.*)</test> | <test>A</test><test>B</test>
    <test>(.*?)</test> | <test>A</test><test>B</test>
    D.h. .* findet soviel wie möglich, .*? nicht.

    Schau dir mal GUICtrlCreateMonthCal in der Hilfe an. Wenn du da noch einen Button einfügst und dann das Control mit GUICtrlRead ausliest hast du denke ich das was du suchst.

    Wieviele User werden das erworbene Wissen später auch brauchen? Was nützt es Spanisch zu lernen wenn du nie in deinem Leben auf nen Spanier triffst? :D

    Es kann aber natürlich auch sein - und das halte ich persönlich für sehr wahrscheinlich - dass du zwar im Voraus denkst, dass du das nie brauchen wirst, wenn du es dann aber gelernt hast sofort merkst, dass z.B. GAs und ANNs ein paar deiner Projekte enorm vereinfachen könnten. Somit ist es im Nachhinein für mehr Leute von Vorteil als anfangs vermutet. Genauso wie sich ein Spanier wahrscheinlich wahnsinnig freut wenn er sich verlaufen hat und du ihm eine Wegbeschreibung auf Spanisch geben kannst. :D


    Da es momentan so aussieht als würde Thema 2 gewinnen würde ich, wenn es gewünscht ist, mich dazu bereiterklären selbst ein Tutorial zu Thema 1 zu schreiben. Das heißt ja nicht, dass minx dass dann nicht bei Gelegenheit erweitern bzw. noch mal ein komplettes Tutorial posten könnte, aber dann hätten wir gleich zu Anfang schon mal zwei von drei Themen abgedeckt.


    Prinzipiell bin ich immer für Tutorials, es kann nie genug Quellen geben um neues Wissen zu erlangen.

    Sehr gute Einstellung. :thumbup:

    Gut zu wissen; wieder was gelernt.


    Wenn du die Datei allerdings in enumicons.au3 in Examples\GUI\Advanced öffnest wird immer das selbe Icon angezeigt, d.h. es scheint mit den Standardfunktionen nicht zu funktionieren.

    Ich hab mir mal das Bespiel der Onlinehilfe zu dem Befehl genommen und versucht die Icon-ID zu wechseln, aber da tut sich nix

    Ausführbare Dateien und DLLs können mehrere Icons enthalten, .ico Dateien meines Wissens nach nicht.


    Außerdem scheint sich das, wenn überhaupt ja nur auf dieses GUI-Fenster zu beziehen, dass ich ja gar nicht verwende, beim Kompilieren erhält die Exe dadurch ja kein Icon.

    Stimmt. Das Icon für das Programm solltest du eigentlich beim Kompilieren einstellen können, vorausgesetzt du benutzt SciTE4AutoIt3. Das ist zumindest in den älteren Versionen so, die aktuelle Stable habe ich noch nicht getestet.

    Hast du den Thread gelesen? Mit Map steht (zumindest in der Beta) nun ein nativer AutoIt-Datentyp zur Verfügung welcher sowohl als Key-Value-Struktur als auch als dynamisches Array verwendet werden kann. Importieren musst du nichts mehr.

    Stimmt. Das ist aber auch nur ein Fall von vielen und wenn ich etwas anderes außer Arrays oder Maps haben will muss ich trotzdem auf Objekte zurückgreifen. Meine Aussage bezog sich mehr oder weniger auf die Aussage "Autoit soll Dinge möglichst schnell und einfach bewerkstelligbar machen;" nicht auf Maps speziell. Aber vielleicht kommt das ja alles noch, neue Features entstehen in letzter Zeit ja sowieso relativ häufig. :)


    Verkettete Listen kannst du auch jetzt schon mit DllStructCreate erzeugen. Einziges Manko ist, dass als Value nicht Variant funktioniert.

    Außerdem muss der Rückgabewert von DllStructCreate irgendwo (z.B. in einem Array) zwischengespeichert werden, auch wenn er gar nicht verwendet wird. Zum Erstellen eigener Datenstrukturen ist das also nicht optimal.

    Gerade du solltest doch wissen wie Arrays intern im Speicher aussehen und warum ein ReDim eben so lange dauert. Da lässt sich schon prinzipbedingt nicht viel anpassen.
    Es bleibt dabei: Jede Datenstruktur hat Vor-und-Nachteile und deswegen ihren jeweiligen Anwendungsfall für den es geeigneter ist als andere.
    Autoit soll Dinge möglichst schnell und einfach bewerkstelligbar (tolles Wort) machen.
    Eine Map hilft da ungemein.


    Stimmt, aber wenn das wirklich das Ziel ist, wieso muss ich dann fast alle Datenstrukturen aus COM Objekten "importieren?" Mit einer einfach verketteten Liste könnte man zum Beispiel das ReDim Problem relativ einfach lösen, und wenn wir sowas nativ zur Verfügung hätten könnte sich auch jeder die passende Struktur für den jeweiligen Anwendungsfall aussuchen. Oder noch besser, wieso nicht gleich C- bzw. Haskell-artige Strukturen? Dann wäre man nicht mehr auf den Entwickler angewiesen und könnte sich so ziemlich jede Datenstruktur selbst zusammenbasteln.

    Da es ein Notepad++ Plugin ist sollte die DLL ja eigentlich einem bestimmten Muster folgen, sonst könnte NPP damit ja nicht umgehen. Ein Blick in die Dokumentation von Notepad++ wäre also vielleicht von Vorteil.

    Dass Vögel fliegen können kann man zwar eigentlich schon aus dem Code rauslesen, das Programm kann solche Beziehungen aber noch nicht erkennen.

    Ist jetzt behoben.


    Ich hatte mir das insgesamt in etwa so vorgestellt: Ein Teil verarbeitet die Sprache, einer ist für mathematische Sachen zuständig und einer für Logik. Der Logik-Teil ist jetzt eigentlich weitestgehend fertig und diverse Berechnungen auszuführen sollte auch kein Problem sein, das einzige Problem ist also die Sprache, oder genauer gesagt, dass Deutsch/Englisch sehr unregelmäßig sind, im Gegensatz zu zum Beispiel Esperanto. Das könnte man natürlich wieder durch eine Datenbank à la AIML lösen, aber das währe dann eher ein gewaltiger Schritt zurück und soweit will ich die Qualität dann auch nicht senken. :D


    Feedback ist natürlich jederzeit erwünscht, besonders falls jemand eine Idee für das Verarbeiten der Sprache hat.