Spiele-Rumpfprogramm
Spiele-Rumpfprogramm
Hallo, ich habe folgendes Problem:
Ich möchte ein Spiel programmieren, jedoch mangelt es mir dabei an den nötigen Grundkenntenissen. Es soll über die Tastatur bedient werden, und mindestens 25 Bilder pro Sekunde sollen ausgegeben werden. An diesen beiden Punkten hakt es. Der Rest ist, glaube ich, nicht so schwer.
Die Bildschirm(abschnitt)-Ausgabe muss sich schnell erneuern ohne Flimmern und Stocken, und Tastendrücke müssen erkannt werden und sich auf das Spiel auswirken können. Ich denke, das sind Grundprinzipien, die zu sehr vielen Spielen gehören. Daher hoffe ich, dass mir vielleicht jemand den Code für eine Art Rumpfprogramm für solche Spiele nennen kann. Welche Auswirkungen die Tastendrücke konkret haben, könnte man dann leicht selbst festlegen. Variablen würden sich je nach dem jeweiligen Tastendruck ändern und dadurch auch die mithilfe von ihnen berechneten Bildschirm(abschnitt)ausgaben, die ja automatisch kurzperiodisch erfolgen sollen.
Kann mir da jemand helfen? Ich suche schon länger nach einer Lösung, verstehe aber bei dem, was ich finde, nur Bahnhof. Daher denke ich, dass Abschauen und Nachahmen hier die effizienteste Lernmethode ist.
Ich möchte ein Spiel programmieren, jedoch mangelt es mir dabei an den nötigen Grundkenntenissen. Es soll über die Tastatur bedient werden, und mindestens 25 Bilder pro Sekunde sollen ausgegeben werden. An diesen beiden Punkten hakt es. Der Rest ist, glaube ich, nicht so schwer.
Die Bildschirm(abschnitt)-Ausgabe muss sich schnell erneuern ohne Flimmern und Stocken, und Tastendrücke müssen erkannt werden und sich auf das Spiel auswirken können. Ich denke, das sind Grundprinzipien, die zu sehr vielen Spielen gehören. Daher hoffe ich, dass mir vielleicht jemand den Code für eine Art Rumpfprogramm für solche Spiele nennen kann. Welche Auswirkungen die Tastendrücke konkret haben, könnte man dann leicht selbst festlegen. Variablen würden sich je nach dem jeweiligen Tastendruck ändern und dadurch auch die mithilfe von ihnen berechneten Bildschirm(abschnitt)ausgaben, die ja automatisch kurzperiodisch erfolgen sollen.
Kann mir da jemand helfen? Ich suche schon länger nach einer Lösung, verstehe aber bei dem, was ich finde, nur Bahnhof. Daher denke ich, dass Abschauen und Nachahmen hier die effizienteste Lernmethode ist.
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Re: Spiele-Rumpfprogramm
Siehe dir doch einmal SDL an, nach nur ein wenig Einlesen in dieses Thema habe auch ich entsprechende Grundkenntnisse erlangt und ich kannte mich damit auch nicht aus.
Da sind auch deine 25Fps nicht das Problem.
Auch die Auswertung von Tastendrücken ist ziemlich simpel.
Wenn du jedoch etwas in 3D erstellen möchtest (was ich dir nicht Empfehle wenn du noch keinerlei Erfahrung in diesem Gebiet hast) wäre OpenGL dein Ansprechpartner.
Einen generellen Programmrumpf wird denke ich einmal keiner parat haben, sowas finde ich auch ungünstig da es so etwas auch nicht gibt.
Die Rümpfe sind auch nicht das Problem.
Es ist vl eher ein Problem das du die Verteilung des Aufwandes falsch einschätzt.
Die Spielelogik ist viel schwieriger als die Ausgabe auf dem Bildschirm.
Ich hoffe dir geholfen zu haben.
Gruß Teekeks
Da sind auch deine 25Fps nicht das Problem.
Auch die Auswertung von Tastendrücken ist ziemlich simpel.
Wenn du jedoch etwas in 3D erstellen möchtest (was ich dir nicht Empfehle wenn du noch keinerlei Erfahrung in diesem Gebiet hast) wäre OpenGL dein Ansprechpartner.
Einen generellen Programmrumpf wird denke ich einmal keiner parat haben, sowas finde ich auch ungünstig da es so etwas auch nicht gibt.
Die Rümpfe sind auch nicht das Problem.
Es ist vl eher ein Problem das du die Verteilung des Aufwandes falsch einschätzt.
Die Spielelogik ist viel schwieriger als die Ausgabe auf dem Bildschirm.
Ich hoffe dir geholfen zu haben.
Gruß Teekeks
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Spiele-Rumpfprogramm
Ich habe vor kurzem ein Snake Clone hier gepostet, als Beispiel. Auf LazForge findest du außerdem ein Pac-Man Clone. Vielleicht hilft es dir weiter.
Wenn nicht: Ein Spiel Zu erstellen ist relativ einfach. Je nach dem was du vorhast. Ich würde erst einmal Canvas verwenden. Für einfache Spiele reicht das voll und ganz.
Versuch z.b. ein Snake, oder ein Top-Down Shooter zu erstellen. Du hast in beiden Spielen, ähnliche Probleme. Beides Spiele lassen sich mit Canvas erstellen.
Du könntest auch meine 2D Engine nutzen. Die vereinfacht vieles. Außerdem wird CPU Zeit gespart, indem nicht ständig alles neu gezeichnet wird, sondern nur das was sich geändert hat. Sie nutzt auch intern Canvas.
An was für ein Spiel hast du gedacht, was du Programmieren möchtest? Ein Pong wäre auch noch gut, für den Einstig.
Wenn nicht: Ein Spiel Zu erstellen ist relativ einfach. Je nach dem was du vorhast. Ich würde erst einmal Canvas verwenden. Für einfache Spiele reicht das voll und ganz.
Versuch z.b. ein Snake, oder ein Top-Down Shooter zu erstellen. Du hast in beiden Spielen, ähnliche Probleme. Beides Spiele lassen sich mit Canvas erstellen.
Du könntest auch meine 2D Engine nutzen. Die vereinfacht vieles. Außerdem wird CPU Zeit gespart, indem nicht ständig alles neu gezeichnet wird, sondern nur das was sich geändert hat. Sie nutzt auch intern Canvas.
An was für ein Spiel hast du gedacht, was du Programmieren möchtest? Ein Pong wäre auch noch gut, für den Einstig.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Spiele-Rumpfprogramm
Also Tastatur abfrage ist relativ einfach,
Die kann man im ganz normalen Form.OnKeyDown machen.
Wenn du aber nicht willst das der Spieler ein Satz nach forne macht, dann 3 sekunden wartet und dann losrent, dann nimmst du dir ein
und fügst beim OnKeyDown die gedrückten hinzu und bei OnkeyUp löschst du die wieder...
in einem Timer oder OnIdle wird der Tastendruck ausgewertet
Für OpenGL emfpielt es sich das durchzulesen: http://wiki.delphigl.com/index.php/Tutorial_Quickstart" onclick="window.open(this.href);return false;
Die kann man im ganz normalen Form.OnKeyDown machen.
Wenn du aber nicht willst das der Spieler ein Satz nach forne macht, dann 3 sekunden wartet und dann losrent, dann nimmst du dir ein
Code: Alles auswählen
tasten:set of byte
in einem Timer oder OnIdle wird der Tastendruck ausgewertet
Code: Alles auswählen
if 83 in tasten then gehvor; // ka ob 83 richtig ist --> ASCII tabelle
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 370
- Registriert: Di 6. Feb 2007, 09:29
- OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
- CPU-Target: 32bit i386, ARM
- Wohnort: Oberösterreich
Re: Spiele-Rumpfprogramm
Ich würde an deiner Stelle einfach mal das FPC-SDL Tutorial durcharbeiten. Ich find' es ganz gut und es erklärt dir auch schon die wichtigsten Dinge. Alles weitere ergibt sich dann.
http://www.freepascal-meets-sdl.net/" onclick="window.open(this.href);return false;
http://www.freepascal-meets-sdl.net/" onclick="window.open(this.href);return false;
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Spiele-Rumpfprogramm
Wenn dann bitte schön:
oder
Code: Alles auswählen
if VK_RIGHT then GEHE nach Rechts;
Code: Alles auswählen
if myarray[VK_RIGHT] then GEHE nach Rechts;
MFG
Michael Springwald
Michael Springwald
Re: Spiele-Rumpfprogramm
Erstmal Danke für die Antworten.
Was sind die Unterschiede zwischen SDL und OpenGL?
@MAC
Die Lösung hört sich gut an.
@bembulak
Danke für den Link.
Welches Problem gibt es, wenn man in SDL etwas in 3D machen möchte?Teekeks hat geschrieben:Siehe dir doch einmal SDL an, nach nur ein wenig Einlesen in dieses Thema habe auch ich entsprechende Grundkenntnisse erlangt und ich kannte mich damit auch nicht aus.
Da sind auch deine 25Fps nicht das Problem.
Auch die Auswertung von Tastendrücken ist ziemlich simpel.
Wenn du jedoch etwas in 3D erstellen möchtest (was ich dir nicht Empfehle wenn du noch keinerlei Erfahrung in diesem Gebiet hast) wäre OpenGL dein Ansprechpartner.
Was sind die Unterschiede zwischen SDL und OpenGL?
Das habe ich schon versucht. Das Problem ist, dass es sich zu langsam zeichnet und flimmert.pluto hat geschrieben: Wenn nicht: Ein Spiel Zu erstellen ist relativ einfach. Je nach dem was du vorhast. Ich würde erst einmal Canvas verwenden. Für einfache Spiele reicht das voll und ganz.
Ich möchte ein Aurorennspiel mit geteiltem Bildschirm für zwei Spieler programmieren. Für den Anfang soll die Strecke einfach eine Gerade sein, eventuell mit Hindernissen (Verkehr, Bodenwellen). Windschatten soll eine Rolle spielen, ebenso die Fahrzeugabstimmung hinsichtlich z. B. Getriebeübersetzung, Treibstoffmenge, Bodenabstand. Bei Überbelastung sollte der Motor kaputt gehen. Der Einfachheit halber soll die Fahrtrichtung fix sein. - Lenken soll sich einfach in einer Verschiebung des Autos ohne Fahrtrichtungsänderng ausdrücken. Richtig schwierig erscheint mir bei der Programierung neben den im ersten Beitrag genannten Punkten nur die Grafik sein, aber ich gebe mich erst einmal mit Quadern als Autos zufrieden, was es sehr vereinfacht. In Canvas habe ich die 3D-Darstellung solcher Quader schon geschafft (Ein-Fluchtpunkt-Perspektive), nur Canvas ist eben zu langsam.pluto hat geschrieben:An was für ein Spiel hast du gedacht, was du Programmieren möchtest? Ein Pong wäre auch noch gut, für den Einstig.
@MAC
Die Lösung hört sich gut an.
@bembulak
Danke für den Link.
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Re: Spiele-Rumpfprogramm
Soweit ich weiß, ist SDL nur für 2D benutzbar.400kmh hat geschrieben:Welches Problem gibt es, wenn man in SDL etwas in 3D machen möchte?
Was sind die Unterschiede zwischen SDL und OpenGL?
Jedoch ist es im Vergleich zu OpenGL (mit dem man sowohl 2D als auch 3D arbeiten kann) wesentlich einfacherer zu erlernen (meiner Erfahrung nach zumindest).
OpenGL dürfte allerdings auch noch etwas schneller sein als SDL, da es direkt die Hardware nutzt.
Aber das sollte bei deinem Projekt nicht ins Gewicht fallen.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Spiele-Rumpfprogramm
Da gegen kann man was tun.Das habe ich schon versucht. Das Problem ist, dass es sich zu langsam zeichnet und flimmert.
Bei einfacher Grafiken und Geschickter Programmierung, dürfte das Sogar mit Canvas Möglich sein, aber es wird nicht einfacher und der Aufwand "Lohnt" sich wohl nicht. Selbst wenn du PSudo3D verwendest. Ich würde dir Raten gleich OpenGL zu nehmen. auf http://www.delphigl.com" onclick="window.open(this.href);return false; gibt es gute Tutorials. Sogar in Deutsch. "Etwas" Hintergrundwissen, solltest du aber schon mitbringen. Die Fangen dort nicht an, mit der Frage: Was macht eine IF oder FOR Anweisung. *G*.Ich möchte ein Aurorennspiel mit geteiltem Bildschirm für zwei Spieler programmieren
Gar keins. Du musst dann SDL und OpenGL verwenden. Dann kann SDL auch 3D.Welches Problem gibt es, wenn man in SDL etwas in 3D machen möchte?
Grob gesagt: SDL unterstützt keine GPU. Aus diesen Grund wird es mit OpenGL verbunden. Außerdem kann SDL von Sich aus nur 2D. Aber in Verbindung mit OpenGL kann es auch alles was OpenGL kann. Du könntest z.b. Andorra verwenden. Das ist eine Fertige 2D Engine, für OpenGL, die auch 3D können soll. Oder Schau dir mal GLScene an. Das ist ein wahres Monster unter den OpenGL Libs für Lazarus.Was sind die Unterschiede zwischen SDL und OpenGL?
Wie gesagt, Selten wird SDL Alleine verwenden.Soweit ich weiß, ist SDL nur für 2D benutzbar.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Spiele-Rumpfprogramm
Was ist der Unterschied zwischen Straße und Auto?400kmh hat geschrieben:Was sind die Unterschiede zwischen SDL und OpenGL?
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Spiele-Rumpfprogramm
ich fand die Frage war berichtigt. Das eine braucht das andere, aber das andere kann ohne das eine, aber das eine nicht ohne das andere*G*.Was ist der Unterschied zwischen Straße und Auto?
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Spiele-Rumpfprogramm
Man kann OpenGL auch ohne SDL zum Laufen bringen.pluto hat geschrieben:ich fand die Frage war berichtigt. Das eine braucht das andere, aber das andere kann ohne das eine, aber das eine nicht ohne das andere*G*.Was ist der Unterschied zwischen Straße und Auto?
Zum Beispiel mit GLUT.
Wem das alles zu plattformunabhängig ist, der kann es auch mit WinAPI oder Xlib versuchen.
Re: Spiele-Rumpfprogramm
Auf der Seite steht:MAC hat geschrieben: Für OpenGL emfpielt es sich das durchzulesen: http://wiki.delphigl.com/index.php/Tutorial_Quickstart" onclick="window.open(this.href);return false;
Wo platziere ich die DGLOpenGL.pas-Datei bei Lazarus? Einen lib-Ordner finde ich nicht. Meine bisherigen Platzierungsversuche endeten immer mit folgender Fehlermeldung:Bevor man wirklich loslegen kann, muss noch die runtergeladene DGLOpenGL.pas an den richtigen Ort gebracht werden. Gut wäre z.B., sie in das Verzeichnis "\lib" in Eurem Delphiverzeichnis zu legen.
Muss man ansonsten was OpenGl angeht irgendwelche Unterschiede zwsichen Delphi und Lazarus beachten?unit1.pas(1,1) Fatal: Can't find unit DGLOpenGL used by Unit1
Was kann man dagegen tun?pluto hat geschrieben:Da gegen kann man was tun.Das habe ich schon versucht. Das Problem ist, dass es sich zu langsam zeichnet und flimmert.
Kann man OpenGL auch einfach nur mit Lazarus zum Laufen bringen? Oder braucht man da unbedingt sowas wie die hier erwähnten SDL, Andorra, GLScene, GLUT, WinAP und Xlib. Das würde es verkomplizieren. Ich habe den Eindruck, dass, das Ganze überhaupt erst einmal funktionstüchtig zu machen, viel schwerer ist als die eigentliche Programmierlogik.carli hat geschrieben:Man kann OpenGL auch ohne SDL zum Laufen bringen.pluto hat geschrieben:ich fand die Frage war berichtigt. Das eine braucht das andere, aber das andere kann ohne das eine, aber das eine nicht ohne das andere*G*.Was ist der Unterschied zwischen Straße und Auto?
Zum Beispiel mit GLUT.
Wem das alles zu plattformunabhängig ist, der kann es auch mit WinAPI oder Xlib versuchen.

-
- Beiträge: 370
- Registriert: Di 6. Feb 2007, 09:29
- OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
- CPU-Target: 32bit i386, ARM
- Wohnort: Oberösterreich
Re: Spiele-Rumpfprogramm
Alternativ könnte man statt OGL auch ZenGL nehmen:
http://www.lazarus.freepascal.org/index ... 283.0.html" onclick="window.open(this.href);return false;
http://www.lazarus.freepascal.org/index ... 283.0.html" onclick="window.open(this.href);return false;
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Spiele-Rumpfprogramm
Nicht wirklich.400kmh hat geschrieben: Kann man OpenGL auch einfach nur mit Lazarus zum Laufen bringen? Oder braucht man da unbedingt sowas wie die hier erwähnten SDL, Andorra, GLScene, GLUT, WinAP und Xlib. Das würde es verkomplizieren. Ich habe den Eindruck, dass, das Ganze überhaupt erst einmal funktionstüchtig zu machen, viel schwerer ist als die eigentliche Programmierlogik.
Du wendest halt mal ein/zwei Stunden dafür auf, um dir das aufzusetzen, aber beim zweiten Projekt weißt du ja schon wie's geht.
Ich empfehle dir SDL, weil es da am einfachsten ist.