Beiträge von Yjuq
-
-
Zitat
so habe es mal ausprobiert und geht geht nicht mit GuiCtrlCreateEdit, nur mit _GUICtrlEdit_Create
Falsch, es funktioniert wunderbar...
Zitatnur habe ich bei _GUICtrlEdit_Create das sicht dort wenn ich das fenster kleiner mache sich die größe nicht mit ändert
Wundert mich nicht. Die GUI Funktionen kannst du natürlich nicht auf das Edit Control anwenden, welches mit _GUICtrlEdit_Create() erstellt wurde. Das hat andere Gründe auf die du keinen Einfluss nehmen kannst. Normalerweise fängt man das WM_SIZE des Fensters ab, schickt diese Message an die Prozedur für das Edit Control weiter und ändert dort dementsprechend seine Größe. Musst du aber nicht machen wenn du dir meinen Beitrag mal durchgelesen hättest. Ich gebe dir aber nochmal ein Tipp:
Bei GUICtrlCreateEdit() bekommst du eine ID zurück, bei _GUICtrlEdit_Create() jedoch ein Handle. Nun schau dir doch einfach mal den ersten Parameter von _WinAPI_SetWindowLong() an...
Weißt du jetzt wo dein Fehler lag und wo du die Funktion GUICtrlGetHandle() gebrauchen kannst? Ja? Super!

-
Servus, erst einmal machen GUICtrlCreateEdit() sowie _GuiCtrlEdit_Create() prinzipiell das gleiche. Bei beidem wird ein Edit Control erstellt. Du bekommst bei der zweiten Funktion aber direkt ein Handle statt einer ID zurückgegeben. Im Grunde ist es wurscht welche Funktion du nimmst, alle _GuiCtrlEdit_... Funktionen kannst du auch auf die Edit Controls anwenden, die mit GUICtrlCreateEdit() erstellt wurden. Anders sieht es aber bei einer RichEdit Control aus. Dieses Control lässt Formatierungen zu und du kannst dort sogar Bilder abspeichern. Dein PC müsste irgendwo WordPad haben, wenn du das öffnest hast du quasi ein RichEdit Control vor Augen. Du kannst Texte formatieren und Bilder einfügen, das Format bleibt RTF.
Nun zu deiner eigentlichen Fragestellung: Es ist möglich, nur aufwendiger. Du musst die einzelnen Events per Hand abfragen. Ich habe dir mal ein Beispiel dazu verfasst:
Spoiler anzeigen
[autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiEdit.au3>
#include <GuiMenu.au3>
#include <WinAPI.au3>
#include <WinAPIConstants.au3>
#include <WindowsConstants.au3>; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]Global Enum $OPEN = 1000, $SAVE, $INFO
[/autoit] [autoit][/autoit] [autoit]Global $hEDIT_WndProc = DllCallbackRegister('EDIT_WndProc', 'lresult', 'hwnd;uint;wparam;lparam')
[/autoit] [autoit][/autoit] [autoit]
Global $pEDIT_WndProc = DllCallbackGetPtr($hEDIT_WndProc)Global $hGUI = GUICreate('', 170, 170)
[/autoit] [autoit][/autoit] [autoit]
Global $hEdit = _GUICtrlEdit_Create($hGUI, '', 10, 10)
Global $pEDIT_PrevWndProc = _WinAPI_SetWindowLong($hEdit, $GWL_WNDPROC, $pEDIT_WndProc)
GUISetState(); ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]While GUIGetMsg() <> $GUI_EVENT_CLOSE
[/autoit] [autoit][/autoit] [autoit]
WEndDllCallbackFree($hEDIT_WndProc)
[/autoit] [autoit][/autoit] [autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]Func EDIT_WndProc($hWnd, $iMsg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Switch $iMsg
Case $WM_CONTEXTMENU
Return EDIT_WM_CONTEXTMENU($hWnd, $iMsg, $wParam, $lParam)
Case $WM_COMMAND
EDIT_WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
EndSwitchReturn _WinAPI_CallWindowProc($pEDIT_PrevWndProc, $hWnd, $iMsg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
EndFuncFunc EDIT_WM_CONTEXTMENU($hWnd, $iMsg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu, 0, 'Open', $OPEN)
_GUICtrlMenu_InsertMenuItem($hMenu, 1, 'Save', $SAVE)
_GUICtrlMenu_InsertMenuItem($hMenu, 3, '', 0)
_GUICtrlMenu_InsertMenuItem($hMenu, 3, 'Info', $INFO)
_GUICtrlMenu_TrackPopupMenu($hMenu, $wParam)
_GUICtrlMenu_DestroyMenu($hMenu)Return $GUI_RUNDEFMSG
[/autoit] [autoit][/autoit] [autoit]
EndFuncFunc EDIT_WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Switch $wParam
Case $OPEN
_WinAPI_ShowMsg('Open')
Case $SAVE
_WinAPI_ShowMsg('Save')
Case $INFO
_WinAPI_ShowMsg('Info')
EndSwitchReturn $GUI_RUNDEFMSG
[/autoit] [autoit][/autoit] [autoit]
EndFunc; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] -
Ja, solange dass Skript als *.au3 Datei vorliegt kannst du diese einfach einlesen und die entsprechende Zeilen aus der Datei extrahieren. Schwieriger wird es, sobald das Skript aber kompiliert werden soll, da muss vor der Erstellung die Kommentare direkt als Text in das Skript hinterlegt werden. Ob das komplett dynamisch funktioniert muss ich erst noch austesten. Ansonsten kannst du die Changelog nicht in einer extra Datei abspeichern? Das geht einfacherer.
-
Erst einmal vielen Dank für eure Kommentare. Mag sein dass es nicht ganz so gelaufen ist wie ich es mir vorgestellt habe, aber liegt wahrscheinlich doch an der Spielwahl, Spielumgebung und das Interface welches ich euch quasi vorgegeben habe. Man bedenke aber dass ich dies tatsächlich zum ersten mal in dieser Form gemacht habe. Da kann man nicht alles auf Anhieb perfekt machen, aber ich versuche die Fehler die ich gemacht habe für den nächsten Wettbewerb zu degradieren. Da ich aber auch bei jeder Änderungen Backups mache, habe ich nochmal chip und Mars seine AIs zu der Version laufen gelassen, wie diese auch hier veröffentlicht wurde (also mit dem Futterbug). Kommt von der Größenordnung der Punkte auf's selbe Ergebnis hinaus.
Zitat von chipMich würde mal interessieren, wieviele Runden die KIs jeweils gegeneinander angetreten sind.
1000 Runden auf einem 10x10 Spielfeld.
Zitat von chipDa wären andere Spiele bei denen es wirklich darum geht berechenbare Entscheidungen zu treffen und kein Glücksspiel besser.
Stimmt, vielleicht nicht so optimal dass ich den Zufallsfaktor so groß war. Prinzipiell würde ich aber sagen dass in gewisser Weise manchmal eben etwas Zufall notwendig ist. Ich hatte zwar bereits schon ein Spiel angefangen zu programmieren, aber aufgrund der Kommentare alles in den virtuellen Papierkorb verschoben. Das nächste Spiel wird ausschließlich ein Strategiespiel sein (ohne Zufallsfaktoren). Es ist von der AI Programmierung her genauso aufwendig (vielleicht sogar mehr) wie Schach, aber die Regeln sind deutlich weniger. Im nächsten Spiel müssen also viele Züge vorausberechnet und verglichen werden.
Zitat von chipDes weitern würde ich dich bitten solche Änderungen wie das Futter NICHT erst zur Auswertung rein zu machen.
Okey, war nicht fair von meiner Seite aus. Ich hätte euch zumindest die Dateien im Startpost aktualisieren können. Besonders du und Mars hätten die Möglichkeit gehabt eure AI dementsprechend anzupassen.
Zitat von chipWenn man davon ausgehen kann das das immer so läuft, dann verzichte ich auf weitere Teilnahme.
Definitiv soll das nicht so weiter laufen. Weshalb sonst frage ich euch nach eurer Meinung? Ich habe den Wunsch bzw. das Ziel mich zu verbessern und nicht die gleichen Fehler immer wieder zu machen. Da ich ja auch zwischendurch schon mal den einen oder anderen Kommentar (in der Shoutbox) gelesen habe, weiß ich auch wo ich was verbessern kann und auch sollte. Damit solche Situationen nicht nochmal entstehen, werde ich mir bis zum nächsten Wettbewerb mehr Zeit zum Programmieren der Spielumgebung nehmen. Vor allem werde ich diese auch schärfer auf Fehler überprüfen und eine AI als Gegner zur Verfügung stellen. Da diese Prozedur doch etwas länger dauert kann ich zmd. jetzt noch nicht abschätzen wann der nächste Wettbewerb startet.
Folgendes werde ich für die zukünftigen Wettbewerbe verbessern:
- Einmal muss ich die eigentliche Spiellogik besser und intensiver auf Bugs überprüfen. Solch ein fataler Bug wie in diesem Wettbewerb darf nicht nochmal vorkommen.
- Zum anderen wird das Interface zwischen AI und Spiellogik verbessert. Wie ich das genau anstelle muss ich mir noch überlegen. Wahrscheinlich werde ich teilweise Funktionen zur Verfügung stellen, die euch wichtige Informationen aus einem Gesamtpaket extrahieren kann. Um das mal auf diesen Wettbewerb zu beziehen: Alle Hindernisse konnten via If BitAND($aMap[x][y], $AIFight_MapSolid Then abgefragt werden. Schien aber nicht so offensichtlich, für das nächste mal wird es dann eben Funktionen geben welche eben diese Information extrahiert.
- Eine bessere Beschreibung der Aufgabenstellung, Spielregeln sowie die Möglichkeiten des Interfaces als PDF Datei.
- Die GUI (welche die LogFiles wiedergeben) werde ich von Grund auf anders aufbauen. Es soll zwischen einzelne Runden gewechselt werden sowie auch Züge zurückgespult werden können. Auch soll es möglich sein gegen seine eigene AI zu spielen, also Mensch gegen AI. Damit soll die Möglichkeit gegeben werden, seine AI auf spezielle Situationen zu überprüfen und ggf. anzupassen. Es wird also eine GUI geben die euch mehr in der Entwicklung der AI unterstützt, auch grafisch (und von der Geschwindigkeit her) soll diese aufgewertet werden. Ich überlege mir mal noch, ob ich ggf. die Spiellogik in eine DLL packe und die GUI in C# oder FreeBASIC programmiere. Natürlich alles dann kompatible zu AutoIt damit die eigentliche AI auch wirklich nur in AutoIt verfasst werden muss.
- Der Zufallsfaktor in zukünftigen Spielen werden nicht ein zu großes Gewicht auf die Auswertung haben. Aber komplett den Zufallsfaktor zu entfernen wird für einige Spiele nicht ganz möglich sein. Es gibt Spiele die brauchen eben einen gewissen Grad an Zufall, ich werde das besser abwägen und fairer gestalten.Soa, habe ich was vergessen? Ich bin gespannt ob ich so vielleicht mehr motivieren kann an dem Wettbewerb teilzunehmen. Betrachtet diesen Durchgang einfach mal als Testlauf, letztendlich lag es doch mehr an mir als an eure AI's, dass die Auswertung so ausgefallen ist. LG.

-
Soa ihr lieben, der Abgabetermin ist vorüber, insgesamt sind 3 Einsendungen angekommen! Sind 2 mehr als wie ich erwartet hatte.

Aufgrund der geringen Teilnehmerzahl habe ich letztendlich jede AI gegeneinander spielen lassen. Der Bug den Mars einen Post über mir angesprochen hat wurde vor der Bewertung natürlich noch gefixt. Bei 1000 Runden auf ein 10x10 Feld wurden folgende Punktzahlen erzielt:
Spieler 1
Punkte
vs
Punkte
Spieler 2
chip
20'357
-
2'531
Kanashius
Kanashius
133
-
25'158
Mars
chip
7'599
-
16'879
Mars
Zuerst dachte ich, dass ich irgendwo einen schwerwiegenden Fehler im Programm hätte, daraufhin habe ich einzelne Log Files (Stichprobenartig ein paar Runden) mit den jeweiligen AI's überprüft und verglichen. Dies sind also die tatsächlichen Leistungen der einzelnen AI's. Dadurch ergibt sich folgende Platzierungen:
Platz #1 -> Mars
Platz #2 -> chip
Platz #3 -> KanashiusDies war mein erster Wettbewerb in dieser Form. Nun bin ich auf Rückmeldungen gespannt! Wie war der Wettbewerb für euch? Zu schwierig, zu leicht oder nur langweilig? Wie fandet ihr die Umsetzung und die Organisation? Schreibt einfach eure Meinung, ich möchte dies für die Zukunft besser machen!
Ansonsten: Woran lag es dass es nur so wenige Teilnehmer waren? Keine Lust gehabt oder sagte euch einfach der Wettbewerb nicht zu? Was kann ich besser machen? Vor allem: Besteht weiterhin Interesse?
PS: Im Anhang findet ihr die Log Files.

-
Auch wenn deine Wunder-Glaskugel dir schon so viel verraten hat Mars, es wäre wohl sicher hilfreicher wenn wir von lottchen die Fehlermeldung bekommen würden. Vielleicht auch einfach das Skript.

-
Servus

Im laufe meines bisherigen Lebens haben viele versucht mich mit Fangfragen oder Rätseln in die Irre zu führen, klappte aber nur in den seltensten Fällen. Im folgenden findet ihr eine kleine Ansammlung von mir bekannten Tricks. Kennt ihr auch solche oder hat es bei euch jemand versucht? Wie habt ihr reagiert und konntet ihr überhaupt diese Fangfragen beantworten? Schreibt!
Kann man mit einen roten Stift grün schreiben?
Lösung
Ja, nimm einfach einen roten Stift und schreibt „Grün“ auf.
Ihr überholt in einer Autokolonne den zweiten Wagen, an welcher Position fahrt ihr dann?
Lösung
An der zweiten Stelle natürlich!
Ihr steht vor Bahnschienen, auf der anderen Seite findet ihr einen Friedhof. Auf den Bahnschienen fahren ununterbrochen Züge welches ein Überqueren unmöglich machen. Wie könnt ihr dennoch den Friedhof zu Fuß am schnellsten erreichen?
Lösung
Ihr springt einfach vor einen Zug, wo ihr dann beerdigt werdet liegt wohl auf der Hand.
(Achtung, diese Aufgabe sollte nur mündlich gestellt werden!)
Ein Bus ohne Fahrgäste fährt von der ersten Haltestelle los. An der nächsten Haltestelle steigen 5 Personen ein. Bei der nächsten steigen wieder 3 Personen aus. Wieder an der nächsten Haltestelle steigen 7 Personen ein und 4 aus. An der darauffolgenden Haltestelle steigt weder jemand aus noch ein. An der letzten Haltestelle steigen 2 Personen ein.
1. An wie vielen Haltestellen ist der Bus vorbei gefahren?
2. Wie viele Personen befinden sich im Bus?Lösung
1. Der Bus ist an 6 Haltestellen vorbei gefahren.
2. Es befinden sich 8 Personen im Bus, 7 Fahrgäste und der Busfahrer.Ihr habt lediglich einen 3 und einen 5 Liter Eimer sowie eine unerschöpfliche Wasserquelle zur Verfügung. Wie könnt ihr nur mithilfe dieser 3 Hilfsmittel exakt 4 Liter Wasser abmessen?
Lösung
Zuerst füllt ihr den 3 Liter Eimer bis zum Rand voll. Die 3 Liter werden in den 5 Liter Eimer geschüttet. Danach füllt ihr wieder den 3 Liter Eimer bis zum Rand voll. Nun kippt ihr aus den 3 Liter Eimer soviel Wasser in den 5 Liter Eimer, dass dieser bis zum Rand gefüllt wurde. Nun habt ihr 5 Liter Wasser im 5 Liter Eimer und 1 Liter im 3 Liter Eimer. Schüttet nun den 5 Liter Eimer aus und kippt die 1 Liter Wasser in den 5 Liter Eimer. Nun braucht ihr lediglich den 3 Liter Eimer wieder bis zum Rand auffüllen und diese 3 Liter ebenfalls in den 5 Liter Eimer geben. Im 5 Liter Eimer befinden sich nun exakt 4 Liter.
Ihr steht vor einer Autobahn auf der ununterbrochen Autos fahren. Auf der anderen Straßenseite liegt ein 1000€ Schein. Wie kommt ihr an den Schein heran?
Lösung
Was juckt euch der blöde 1000€ Schein? Er ist garantiert gefälscht, es gibt nämlich keine 1000€ Scheine.
(Ein kleiner Trick womit ihr 90% der Leute einen kleinen Geldbetrag aus der Tasche ziehen könnt.)
Geht zu einem Freund und wettet mit ihm um 5€ (oder so ^^) dass ihr es in den nächsten 5 Minuten schafft ihn dazu zu bringen die Farbe „Blau“ auszusprechen. Einzige Bedingung ist, dass er euch eure nächste Frage wahrheitsgemäß beantworten muss, die ihn aber jedoch nicht dazu zwingt die Farbe Blau auszusprechen. Sind diese Regeln festgelegt (und von euren Gegenüber verstanden) worden, fragt ihr ihn einfach folgendes: „Welche Farben hat die deutsche Nationalflagge?“ Die Antwort wird natürlich „Schwarz, Rot und Gold“ lauten. Der Trick ist jetzt, dass ihr einfach behauptet dass er die Farbe „Rot“ ausgesprochen und damit die Wette verloren hätte. 90% werden höchstwahrscheinlich mit dem Protest „Aber es ging um die Farbe Blau“ argumentieren, dass er gar nicht verloren hätte. In diesem Moment hat er aber die Farbe ausgesprochen und die Wette tatsächlich verloren.
(Noch eine Wette die aber gemeiner ist.)
Wenn ihr das nächste mal mit Freunden einen trinkt, wettet einfach mal dass ihr euer Glas, Flasche oder was auch immer schneller leeren könnt als sie. Während die anderen jetzt so schnell wie möglich versuchen werden ihre Gläser auszutrinken, kippt ihr einfach den Inhalt eures Glases weg. Euer Glas ist leer und somit habt ihr die Wette gewonnen. Mit einem kleinen Wetteinsatz spornt ihr eure Saufkompanen noch dazu an richtig Gas zu geben, umso mehr werden sie sich später ärgern.
(Und noch eine kleine Wette...)
Wettet einfach darum dass euer Gegenüber es nicht unter einen Tisch aushält, während ihr 3 mal auf dessen Tischplatte schlagt. Geht dieser die Wette ein so schlagt ihr 2 mal auf die Tischplatte und geht einfach weg. Mal schauen wie lange es dauert bis dieser wieder unter dem Tisch hervorkriecht.
-
Danke, ja das ist schlimm... Da verwechselt man schnell was.

Solch eine Übersicht habe ich auch in meinen Mathe Duden.Dadurch reduziert sich natürlich die Schleifendurchläufe extrem, da ich bei meinen Berechnungen mit falschen Werten gerechnet habe, kommt alles von der Zeitabschätzung kreuz und quer durcheinander. Das Thema war mir sowieso immer ein Dorn im Auge obwohl ich ja eigentlich sehr gut in Mathematik bin.

Kann man sich ja nochmal anschauen, ich bedanke mich für das ganze Material was ich jetzt bekommen habe.
-
Da kann ich dir so nicht helfen, ich brauche da dann entweder den kompletten ausführbaren Sourcecode oder ein Minimal-Beispiel welches den Fehler reproduziert.
-
Spoiler anzeigen
ZitatDann machst du mehrfache Vergleiche.Eben nicht, du verrechnest dich da irgendwo. Wenn ich jedes Objekt miteinander vergleiche sind (n-1)! -1 Schleifendurchgänge nötig. Ich erläutere dir das mal anhand eines Beispieles.Wir haben 5 Objekte, jedes Objekt soll mit jedem verglichen werden. Dabei sind folgende Variationen möglich:Es ist ein eindeutiges Muster zu erkennen was uns an Fakultät erinnert. Der Rest dürfte erkennbar sein. Habe keine Lust das weiter auszuschmücken. Man könnte das selbe Prinzip nun für 1000 Objekte durchführen und erkennen, dass die Rechnung 999! -1 zutrifft. Das Minimalbeispiel sollte aber zur Veranschaulichung ausreichen.Wie du auf dein Ergebnis kommst ist mir dabei ein Rätsel.€dit: Ach komm,... ich habe da doch ein Rechenfehler drin. Danke für den Hinweis, ich berechne das mal neu (der Interesse wegen).

Viel mir aber erst auf als ich das nochmal durchgelesen habe. -
Dieses Phänomen lässt sich im Grunde ganz einfach erklären. Du weißt deinen IMAGE Objekt den HBITMAP Objekt zu. Das Problem ist aber, dass du das IMAGE Objekt zuerst löscht. Dadurch besteht weiterhin die Abhängigkeit auf auf einen leeren Speicherbereich. Dadurch kommt es zu dem Programmabsturz. Tausche einfach beide Funktionen in ihrer Reihenfolge und es läuft.

-
Was nuetzt es mir Bibliotheken zu nutzen wenn ich das Prinzip dahinter noch nicht verstanden habe? Ich hab ja nicht vor das unbedingt selber zu implantieren, jedoch sollte ich doch zumindest theoretisch verstehen was da vor sich geht. Aber danke, ich schau es mir spaeter mal an.
-
Zitat
Du musst dir je nach Anwendung einfallen lassen, was du genau willst.
Bei deinem Beispiel in Post#3 reicht eine "einfache" Abfrage auf doppelt vorhandene Positionen.Das stimmt wohl, habe ja auch sehr allgemein gefragt.
Danke für eure Antworten, ich nehme mal die Erkenntnisse die ich aus dem Thread gewonnen habe mit. Jedoch verwirrt mich noch dieser k-d-Baum etwas, da finde ich kein für mich verständliches Material im Netz.

-
@AspirinJunkie
Ich schaue mir das mal an, danke für den Hinweis! Die Begriffe habe ich zuvor noch nie gehört.
@Andy
Diese Idee mag nur für Objekte funktionieren, die ein einzelnes Feld besetzen. Aber was ist mit den Objekten die mehrere Felder belegen? Bleiben wir mal bei der Einheit Pixel. Bei 20x20px Quadrate sind somit 400 Einträge notwendig. Selbst wenn man die Felder von 1x1px auf 20x20px vergrößern würde, kann es immer noch vorkommen dass ein Objekt 2 oder gar 4 Felder in irgend einer Weise anschneidet. Dann kommt aber noch die Überprüfung hinzu in welchen Feld sich jetzt das Objekt befindet. Bei einfachen Geometrischen Formen mag das vielleicht einfach gehen, aber bei Polygone sieht alles anders aus. Es kann aber auch sein dass ich deine Idee falsch interpretiert habe bei der Uhrzeit oder ich bei meiner Milchmädchenrechnung was falsch mache.
-
Das ist ein sehr guter Tipp zur Optimierung. Bleiben wir mal bei den 20 Objekten bei einem Spielfeld von 10x10. Teile ich also nun das Spielfeld in 4 Bereiche auf und gehe davon aus dass sich in jedem Feld 5 Objekte befinden beträgt die Anzahl der Durchläufe immerhin noch 4 * (4! -1) = 92 Durchläufe. Aber nur wenn keiner der Objekte an einer der Stellen zwischen den Spielbegrenzungen liegt. Gibt es noch weitere Optimierungsmöglichkeiten?
-
Servus, ich habe mir gerade einige Gedanken zu Kollisionsabfragen gemacht. Nehmen wir einmal an, wir hätten ein Spielfeld mit 1000 beweglichen Objekten. Jedes Objekt prallt von einem anderen Objekt ab. Wie kann man da die Kollisionsabfrage realisieren? Es ist ziemlich zeitaufwendig jedes einzelne Objekt mit jedem zu vergleichen. Das wären immerhin 999! -1 Schleifendurchläufe.
999! -1
402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753471999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
Gibt es da geeignetere Methoden? Selbst wenn es nur 20 Objekte wären sind immerhin 121645100408831999 Schleifendurchläufe notwendig um jedes Objekt auf Kollision mit jedem Objekt zu prüfen.
-
Mach mal ein Screen von deiner MessageBox. Ich weiß gerade nicht wie du das genau meinst.
-
Sicherheit? Das ich nicht lache. Rein theoretisch können sich auch fremde Prozesse einklinken und lesen was das Zeug hält. Es liegt am Programm dafür zu sorgen dass ein wechselnder Schreibe und Lesezugriff entsteht, da müssen gewisse Mechanismen eben selber programmiert werden. Die DLL ist dafür nicht ausgelegt, aber man könnte dies bei Gelegenheit tatsächlich noch implantieren.
Dafür hat man aber völlige Kontrolle, man bekommt den Speicherplatz und kann ihn nutzen wie man will. Ein direkter Zugriff ohne Umwege, die schnellste Möglichkeit der Interprozesskommunikation. Dafür fehlt aber sämtliche Sicherheit.

Wenn ich (oder Andy [was mir lieber wäre xD]) die Lust oder Zeit finden, dann könnte man noch die nötigen Sicherheitsvorkehrungen treffen. Wäre aber halt Arbeit.

-
Interprozesskommunikation mit gleichen Speicherzugriff funktioniert am besten mit einer DLL. Da können sich beliebig viele Prozesse einklinken und dann auf ein und denselben Speicherbereich zugreifen. Im Anhang findest du ein Beispiel mit den nötigen flatassembler Code. Solltest du einen entsprechenden Compiler haben, kannst du den Speicherbereich selber erhöhen, ich habe dir das mal mit 256kb kompiliert. Dazu auch ein Beispielskript, einfacher Zugriff über DllStructs...
