![]() |
Conway's Game Of Life (GoL); auch noch von mir
Liste der Anhänge anzeigen (Anzahl: 1)
Hi zusammen!
Ich habe (wie viele andere ja auch) irgendwann mal ein Game Of Life programmiert. In letzter Zeit habe ich es nun noch um einiges verbessert und erweitert und vor Allem übersichtlicher gestaltet :) Den Source habe ich inzwischen auch beigelegt. Vielleicht könnt ihr ja trotz der mangelnden Überschaubarkeit etwas damit anfangen :oops: Ich freue mich über Kritik und Verbesserungsvorschläge! Ich bin mir nicht sicher, ob ich das hier posten darf, aber hier ist schonmal eine Vorschau als ![]() Hier ein paar Features: - variable Feldgröße mit Torusfunktion (was z.B. rechts rausgeht kommt links wieder rein) - anpassbare Geschwindigkeit - beliebiges setzen von Figuren aus einer Auswahl von ca. 370 Stück (fast alle aus ![]() - Farbe anpassbar (mit 'Rainbow'-Funktion: automatischer Farbwechsel) - Zufallsfüllung der Fläche - Generationenzähler - Möglichkeit, eigene Figuren zu speichern - Vollbildmodus und Hauptfenstertransparenz (aus irgendeinem Grund funktioniert die Transparenz nicht ganz mit den Optionen: danach sind sie immer hinter der Hauptform...) - Zoom //edit: Hier ist die neue Version! Danke für die Hinweise 8) :-D Falls euch noch was stört: sagt Bescheid |
Re: Conway's Game Of Life (GoL); auch noch von mir
Zitat:
1. Die Anzahl der Zellen ist unabhängig von den Fensterabmessungen. Ich erinnere mich dunkel, daß ich mal ein solches Programm hatte (sicher irgendwo gebrannt, doch dafür werde ich mich nicht durch den CD-Stapel kämpfen, sieh mir das bitte nach), das bei vergrößertem Zoom, am besten maximiert, mehr Zellen zur Verfügung stellt. Das bietet Dein Programm leider nicht. 2. Aaaaaber: Was links am Rand verschwindet, taucht rechts wieder auf, analog alle anderen Richtungen. Damit wird Dein Spielfeld letztlich ein Baustein einer periodischen Parkettierung einer unendlichen Ebene. Mit diesem Trick eine unendliche Fläche (fast) zu simulieren, so etwas erlebte ich bei solchen zellulären Automaten noch nicht. Viel Freude beim weiteren Feinschliff! |
Re: Conway's Game Of Life (GoL); auch noch von mir
Zitat:
|
Re: Conway's Game Of Life (GoL); auch noch von mir
Zitat:
|
Re: Conway's Game Of Life (GoL); auch noch von mir
Was ich unhandlich finde ist, daß immer nur beim Loslassen der Maustaste ein Feld gesetzt wird.
> ich fännde es prakischer, wenn dieses beim Drücken und auch beim Verschieben pasiert. (OnMouseDown und OnMouseMove) Da gibt es doch rechts und unten soeine Begrenzungslinie ... da hätte ich erwartet, daß die Figuren/Felder nur innerhalb (links über) des "Spielfeldes" bleiben und nicht auch auf der anderen Seite (außerhalb). Beim Einfügen von Figuten wäre es schön, wenn vorm Einfügen man die Figur schon sehen kann, also z.B. wie so ein Schatten im Spielfeld, da wo dann die Felder eingefügt werden, wenn man klickt. Die [O.K.] Buttons in Figure Settings und Speed Options würde ich Close nennen, da die Einstellungen ja sofort übernommen werden und damit nur das Festerchen geschlossen wird. Und nun noch das Wichtiges: Mach bitte den globalen Tastaturhook raus! Hab mich schon gewundert, was hier los ist und warum soeine Titelleiste ständig über's Bild husch, wärend ich diesen Beitrag hier verfaßte und deine Anwendung im Hintergrund lief, bis ich merkte, daß sie auf die Tastatureingaben im FF regaierte. PS: wozu ist eigentlich das Setup? (hab die 7zip (exe) direkt entpackt und nötig scheint diese ja nicht zu sein :gruebel: [add] ach ja, diese kleinen Optionsdialog könnten doch gleich neben dem Spielfeld positioniert sein, damit man sie nicht erst noch verschieben muß. Ansonsten isses ja ganz nett :thumb: |
Re: Conway's Game Of Life (GoL); auch noch von mir
Zitat:
Jetzt mal im Ernst, wozu braucht man bei einer normalen Anwendung einen globalen Tastaturhook? |
Re: Conway's Game Of Life (GoL); auch noch von mir
Sehr schönes Programm, aber:
Der Generationszähler wird genau wann zurück gesetzt? :) Sherlock |
Re: Conway's Game Of Life (GoL); auch noch von mir
So, danke erstmal an alle!
Zitat:
- Das mit der Positionierung der Menüs dürfte eigentlich kein Problem sein. - Naja, das Setup... :) Ich weiß, dass es Leute gibt, die sich mit PCs sehr schwer tun (mein Bruder zum Beispiel) und wenn die es immerhin geschafft hätten, die 7zip zu entpacken, wüssten die wohl immernoch nicht, wie sie das Programm starten sollen. - Den globalen Tastaturhook hab ich drin, weil ich zuerst ein TMainMenu drin hatte und dann auf eine TToolBar umgestiegen bin. Dafür musste ich beim Menü automerge einstellen und dann waren plötzlich die Shortcuts nicht mehr da und ich bin auf getasynckeystate umgestiegen... Wie bekomme ich das besser hin? - Den Torus kann man ausschalten - Es stehen sehr wohl mehr Zellen zur Verfügung (Options -> Size of Workspace...). Allerdings werde ich wohl noch die TPaintBox in eine TScrollBox packen und eine Zoomfunktion einbauen. - Und bei den Buttons gebe ich dir auch Recht ;) So, wenn ich dann wieder zu Hause bin werde ich mich mal drum kümmern. :) |
Re: Conway's Game Of Life (GoL); auch noch von mir
So, die neue Version ist fertig. Viel Spaß damit ;-)
Achja, fast vergessen: Wenn ich beim zoomen das Feld zu groß mache, kommt ziemlich bald die Fehlermeldung "Für diesen Befehl ist nicht genügend Speicher verfügbar!" Woran liegt das? Ich vermute, dass es irgendwie mit der ScrollBox, dem Image oder der PaintBox zusammenhängt, von denen letztere ja immer größer werden. Das Image nicht mitwachsen zu lassen hat aber nicht viel gebracht und im Taskmanager wird auch garnicht so viel verbrauchter Speicher angezeigt (Firefox hat bei mir viel, viel mehr :) )... |
Re: Conway's Game Of Life (GoL); auch noch von mir
Ich gehe mal davon aus, dass du die Werte in einem dynamischen Array speicherst. Wenn du nun die Größe des Arrays mit SetLength bestimmst, wird dafür Speicher reserviert. Wenn nun der Array zu groß wird, muss nun zu viel Speicher reserviert werden, was zu deiner Fehlermeldung führt.
|
Re: Conway's Game Of Life (GoL); auch noch von mir
Zitat:
|
Re: Conway's Game Of Life (GoL); auch noch von mir
Die Fehlermeldung komm ja, wenn nicht genug Speicher verfügbar "war",
also es wird dann kein Speicher mehr reserviert und im Taskmanager kann man da garnichts erkennen. Debugge doch einfach mal die entsprechenden Stellen und schau wo/wann es genau "knallt". |
Re: Conway's Game Of Life (GoL); auch noch von mir
Diese Meldung ist mir ab und an begegnet, wenn ich mit GDI Ressourcen etwas großzügig wurde. Erstellst du evtl. oft und schnell hintereinander Bitmaps o.ä. neu? Wenn ja, versuch mal immer nur ein Mal zu erstellen, und dann immer wieder neu befüllen, statt schnellles Spiel aus .Free und .Create.
|
Re: Conway's Game Of Life (GoL); auch noch von mir
Problem mehr oder weniger gelöst: Habe jetzt die Image-/PaintBox-Größe auf 3000 Pixel beschränkt. Bei mir kam immer erst danach der Fehler.
.free und .create habe ich hier selber eigentlich garnicht verwendet (ist wie gesagt ein älteres Programm, das ich bearbeitet habe und damals kannte ich das noch nicht so). |
Re: Conway's Game Of Life (GoL); auch noch von mir
Aha! Okay, das heisst dass dein Bitmap (oder wo auch immer du drauf zeichnest) einfach riesig geworden ist. Das erklärt das auch, da diese seitens Windows gewissen Grenzen unterworfen sind. Die "saubere" lösung wäre hier PaintBox/Bitmap/Image selbst auch wirklich nur genau so groß zu halten wie den tatsächlich sichtbaren Bereich, aber nur das hinein zu zeichnen was man gerade sehen soll. Das heisst dass du das Scrolling nicht "faul" (überspitzt gesagt) den Steuerelementen überlassen, sondern das selbst in die Hand nehmen solltest. Das wäre auch der übliche Weg bei allen möglichen grafischen Angelegenheiten. (Auch bei Direct3D z.B. wird mittels teilweise sehr aufwendigen Methoden im Vorfeld bestimmt welche Elemente man überhaupt sehen wird, bevor sie an DX zum Zeichnen geschickt werden. Auf lange Sicht zahlt sich das generell mächtig aus, in Ressourcensparsamkeit und oft auch Geschwindigkeit.)
|
Re: Conway's Game Of Life (GoL); auch noch von mir
Schade, das hört sich ziemlich aufwändig zu programmieren an...
Ich stell mir das jetzt so vor: Ich hol das Image und die PaintBox aus der ScrollBox raus und mache unten und rechts je eine ScrollBar hin. Dann müsste ich wahrscheinlich den Maximalwert der ScrollBars immer an den Array anpassen, etwas davon abziehen, damit man plötzlich nicht garnichts mehr sieht und im OnPaint nur ab deren Positionen zeichnen. Mit irgendeinem Anderen Regler könnte man dann die Zellengröße bestimmen... Ist das so im Ansatz richtig? Heute werde ich aber höchstwahrscheinlich wegen der Schule keine Zeit mehr dafür haben. Mal sehen, wie das Wochenende aussieht. |
Re: Conway's Game Of Life (GoL); auch noch von mir
Also so wie ich das gelesen habe stimmt das ;)
Also wenn du nur die Pixel X=10-20 und y=5-15 sehen kannst, dann zeichnest du nur diese Pixel, aber rechnest natürlich immer mit allen Pixeln! MfG xZise |
Re: Conway's Game Of Life (GoL); auch noch von mir
So, erstmal großes Dankeschön an alle! Die eigene 'ScrollBox' dürfte soweit fertig sein und funktioniert bei mir bis jetzt wunderbar :-D .
Zwischenzeitlich habe ich sogar noch Zeit gefunden, das Schnellstartmenü etwas zu erweitern und in beide Menüs eigene kleine Icons einzufügen. Ich hoffe, es gefällt euch! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz