Spiele-Rumpfprogramm

Für Fragen von Einsteigern und Programmieranfängern...
400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Spiele-Rumpfprogramm

Beitrag von 400kmh »

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.

Teekeks
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

Beitrag von Teekeks »

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

pluto
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

Beitrag von pluto »

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.
MFG
Michael Springwald

MAC
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

Beitrag von MAC »

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

Code: Alles auswählen

tasten:set of byte
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

Code: Alles auswählen

if 83 in tasten then gehvor; // ka ob 83 richtig ist --> ASCII tabelle
Für OpenGL emfpielt es sich das durchzulesen: http://wiki.delphigl.com/index.php/Tutorial_Quickstart" onclick="window.open(this.href);return false;

Code: Alles auswählen

Signatur := nil;

bembulak
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

Beitrag von bembulak »

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;

pluto
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

Beitrag von pluto »

Wenn dann bitte schön:

Code: Alles auswählen

if VK_RIGHT then GEHE nach Rechts;
oder

Code: Alles auswählen

if myarray[VK_RIGHT] then GEHE nach Rechts;
MFG
Michael Springwald

400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Re: Spiele-Rumpfprogramm

Beitrag von 400kmh »

Erstmal Danke für die Antworten.
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.
Welches Problem gibt es, wenn man in SDL etwas in 3D machen möchte?

Was sind die Unterschiede zwischen SDL und OpenGL?
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.
Das habe ich schon versucht. Das Problem ist, dass es sich zu langsam zeichnet und flimmert.
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.
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.

@MAC
Die Lösung hört sich gut an.

@bembulak
Danke für den Link.

Teekeks
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

Beitrag von Teekeks »

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?
Soweit ich weiß, ist SDL nur für 2D benutzbar.
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.

pluto
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

Beitrag von pluto »

Das habe ich schon versucht. Das Problem ist, dass es sich zu langsam zeichnet und flimmert.
Da gegen kann man was tun.
Ich möchte ein Aurorennspiel mit geteiltem Bildschirm für zwei Spieler programmieren
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*.
Welches Problem gibt es, wenn man in SDL etwas in 3D machen möchte?
Gar keins. Du musst dann SDL und OpenGL verwenden. Dann kann SDL auch 3D.
Was sind die Unterschiede zwischen SDL und OpenGL?
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.
Soweit ich weiß, ist SDL nur für 2D benutzbar.
Wie gesagt, Selten wird SDL Alleine verwenden.
MFG
Michael Springwald

carli
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

Beitrag von carli »

400kmh hat geschrieben:Was sind die Unterschiede zwischen SDL und OpenGL?
Was ist der Unterschied zwischen Straße und Auto?

pluto
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

Beitrag von pluto »

Was ist der Unterschied zwischen Straße und Auto?
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*.
MFG
Michael Springwald

carli
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

Beitrag von carli »

pluto hat geschrieben:
Was ist der Unterschied zwischen Straße und Auto?
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*.
Man kann OpenGL auch ohne SDL zum Laufen bringen.
Zum Beispiel mit GLUT.
Wem das alles zu plattformunabhängig ist, der kann es auch mit WinAPI oder Xlib versuchen.

400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Re: Spiele-Rumpfprogramm

Beitrag von 400kmh »

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;
Auf der Seite steht:
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.
Wo platziere ich die DGLOpenGL.pas-Datei bei Lazarus? Einen lib-Ordner finde ich nicht. Meine bisherigen Platzierungsversuche endeten immer mit folgender Fehlermeldung:
unit1.pas(1,1) Fatal: Can't find unit DGLOpenGL used by Unit1
Muss man ansonsten was OpenGl angeht irgendwelche Unterschiede zwsichen Delphi und Lazarus beachten?
pluto hat geschrieben:
Das habe ich schon versucht. Das Problem ist, dass es sich zu langsam zeichnet und flimmert.
Da gegen kann man was tun.
Was kann man dagegen tun?
carli hat geschrieben:
pluto hat geschrieben:
Was ist der Unterschied zwischen Straße und Auto?
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*.
Man kann OpenGL auch ohne SDL zum Laufen bringen.
Zum Beispiel mit GLUT.
Wem das alles zu plattformunabhängig ist, der kann es auch mit WinAPI oder Xlib versuchen.
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. :?

bembulak
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

Beitrag von bembulak »

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;

carli
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

Beitrag von carli »

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. :?
Nicht wirklich.
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.

Antworten