Adventure mit C++ programmieren - Wie ist der Ablauf?
- cr0k3
- Komplettlösungsnutzer
- Beiträge: 27
- Registriert: 06.01.2006, 03:05
Adventure mit C++ programmieren - Wie ist der Ablauf?
Hallo,
ich kenne mich einigermaßen mit den Programmiersprachen Java, C und C++ aus, habe allerdings immer nur kleinere Beispiel-Programme programmiert und nie ein größeres Projekt realisiert. Dies möchte ich jetzt tun, um meine Kenntnisse in C++ zu vertiefen (eventuell benötige ich das für meinen späteren Job). Da kommt mir so ein Adventure gerade recht, da es zugleich auch Spaß macht! Die Güte des Adventures spielt dabei für mich weniger eine Rolle als das Vertiefen der Programmiersprache C++ anhand eines spannenden Projekts.
Nun meine Fragen: Wie ist der Ablauf bei der direkten Programmierung eines Adventures? Was wird zuerst programmiert? Was muss ich noch zusätzlich lernen (z. B. Grafikprogrammierung)? Wie geht man am besten Schritt für Schritt vor?
Ich habe schon die Suche bemüht und einige Beiträge zum Thema Adventure-Programmierung gefunden. Allerdings geht es darin meist um die Wahl der Programmiersprache, was mich nicht interessiert - es soll C++ sein. Weiterhin wird meist empfohlen, eine Engine wie AGS, Visionaire, Wintermute usw. zu benutzen, was mich auch nicht interessiert - es geht mir ja darum, C++ zu vertiefen! Es gab zwar hin und wieder einen kleinen Hinweis auf den Ablauf bei der Programmierung, doch aufgrund der Diskussionen drumherum wurde das nie weiter verfolgt.
Daher bitte ich euch, wenn sich jemand damit auskennt, mir ein wenig auf die Sprünge zu helfen, damit ich nicht völlig im Dunkeln tappe. Besonders schön wären Tipps von Leuten, die selbst schon eine Engine programmiert haben.
Vielen Dank für all eure Antworten! Das Forum hier ist echt super!
Schöne Grüße,
cr0k3
ich kenne mich einigermaßen mit den Programmiersprachen Java, C und C++ aus, habe allerdings immer nur kleinere Beispiel-Programme programmiert und nie ein größeres Projekt realisiert. Dies möchte ich jetzt tun, um meine Kenntnisse in C++ zu vertiefen (eventuell benötige ich das für meinen späteren Job). Da kommt mir so ein Adventure gerade recht, da es zugleich auch Spaß macht! Die Güte des Adventures spielt dabei für mich weniger eine Rolle als das Vertiefen der Programmiersprache C++ anhand eines spannenden Projekts.
Nun meine Fragen: Wie ist der Ablauf bei der direkten Programmierung eines Adventures? Was wird zuerst programmiert? Was muss ich noch zusätzlich lernen (z. B. Grafikprogrammierung)? Wie geht man am besten Schritt für Schritt vor?
Ich habe schon die Suche bemüht und einige Beiträge zum Thema Adventure-Programmierung gefunden. Allerdings geht es darin meist um die Wahl der Programmiersprache, was mich nicht interessiert - es soll C++ sein. Weiterhin wird meist empfohlen, eine Engine wie AGS, Visionaire, Wintermute usw. zu benutzen, was mich auch nicht interessiert - es geht mir ja darum, C++ zu vertiefen! Es gab zwar hin und wieder einen kleinen Hinweis auf den Ablauf bei der Programmierung, doch aufgrund der Diskussionen drumherum wurde das nie weiter verfolgt.
Daher bitte ich euch, wenn sich jemand damit auskennt, mir ein wenig auf die Sprünge zu helfen, damit ich nicht völlig im Dunkeln tappe. Besonders schön wären Tipps von Leuten, die selbst schon eine Engine programmiert haben.
Vielen Dank für all eure Antworten! Das Forum hier ist echt super!
Schöne Grüße,
cr0k3
- john_doe
- Logik-Lord
- Beiträge: 1302
- Registriert: 06.05.2001, 20:58
Zuerst solltest du dir natürlich überlegen, was deine Engine alles können soll, bevor du irgendwas programmierst.
1. Welche Grafik-Schnittstelle soll verwendet werden? (D3D/OpenGL für 2D/3D, SDL für 2D usw.). Dazu gehört auch, in welcher Farbtiefe das Spiel nachher laufen soll, und welche Dateiformate unterstützt werden sollen (z.B. PNG, JPG usw.).
2. Wie flexibel soll das Interface sein? (Etwas) einfacher ist es für den Anfang, wenn immer eine Interface-Art (also z.B. die Scumm-Verben oder eine Baphomets Fluch-Steuerung) verwendet wird.
3. Auch wichtig: Welche Art von Pathfinding (also mit der die Figuren herausfinden, wo sie laufen dürfen und welchen Weg sie von A nach B gehen sollen) soll verwendet werden?
Es gibt A* (was z.B. AGS verwendet) und Verfahren, die mit Polygonen arbeiten (Erklärung z.B. http://graphics.cs.ucdavis.edu/~okreylo ... nding.html).
4. Dann natürlich noch, wie die Spiele-Logik realisiert werden soll. Das kann über eine Scriptsprache (wie z.B. Lua, Python, Squirrel, Io) realisiert werden, oder über andere Strukturen (z.B. in Ini-/Xml-Dateien), in denen die Aktionen gespeichert werden (z.B. wie es Visionaire oder AGS im "scriptlosen" Modus machen).
Falls du eine Scriptsprache verwenden willst, würde ich Lua und Squirrel empfehlen, da sie im Vergleich zu den andern beiden recht einfach in eigene Programme einzubinden sind.
5. Dann noch Überlegungen wie z.B. wie die Resourcen des Spiels gespeichert werden, ob sie "offen" im Verzeichnis liegen (für den Anfang ok) oder später in Archivdateien (z.B. Zip) gepspeichert werden.
6. Natürlich noch wissen sollte man, ob die Engine nur für Windows sein soll oder auch unter Linux usw. laufen soll.
Ich würde mir mal die verschiedenen Bibliotheken ansehen, die zur Auswahl stehen, und mich mit denen Vertraut machen und kleinere Testprogramme machen (z.B. erstmal SDL kennen lernen).
Hier noch ein paar Links für den Anfang:
Lua: http://www.lua.org/
Squirrel: http://squirrel-lang.org/
Python: http://www.python.org/
Io: http://www.iolanguage.com/
SDL: http://www.libsdl.org/index.php
A*: http://www.policyalmanac.org/games/aSta ... al_de.html
1. Welche Grafik-Schnittstelle soll verwendet werden? (D3D/OpenGL für 2D/3D, SDL für 2D usw.). Dazu gehört auch, in welcher Farbtiefe das Spiel nachher laufen soll, und welche Dateiformate unterstützt werden sollen (z.B. PNG, JPG usw.).
2. Wie flexibel soll das Interface sein? (Etwas) einfacher ist es für den Anfang, wenn immer eine Interface-Art (also z.B. die Scumm-Verben oder eine Baphomets Fluch-Steuerung) verwendet wird.
3. Auch wichtig: Welche Art von Pathfinding (also mit der die Figuren herausfinden, wo sie laufen dürfen und welchen Weg sie von A nach B gehen sollen) soll verwendet werden?
Es gibt A* (was z.B. AGS verwendet) und Verfahren, die mit Polygonen arbeiten (Erklärung z.B. http://graphics.cs.ucdavis.edu/~okreylo ... nding.html).
4. Dann natürlich noch, wie die Spiele-Logik realisiert werden soll. Das kann über eine Scriptsprache (wie z.B. Lua, Python, Squirrel, Io) realisiert werden, oder über andere Strukturen (z.B. in Ini-/Xml-Dateien), in denen die Aktionen gespeichert werden (z.B. wie es Visionaire oder AGS im "scriptlosen" Modus machen).
Falls du eine Scriptsprache verwenden willst, würde ich Lua und Squirrel empfehlen, da sie im Vergleich zu den andern beiden recht einfach in eigene Programme einzubinden sind.
5. Dann noch Überlegungen wie z.B. wie die Resourcen des Spiels gespeichert werden, ob sie "offen" im Verzeichnis liegen (für den Anfang ok) oder später in Archivdateien (z.B. Zip) gepspeichert werden.
6. Natürlich noch wissen sollte man, ob die Engine nur für Windows sein soll oder auch unter Linux usw. laufen soll.
Ich würde mir mal die verschiedenen Bibliotheken ansehen, die zur Auswahl stehen, und mich mit denen Vertraut machen und kleinere Testprogramme machen (z.B. erstmal SDL kennen lernen).
Hier noch ein paar Links für den Anfang:
Lua: http://www.lua.org/
Squirrel: http://squirrel-lang.org/
Python: http://www.python.org/
Io: http://www.iolanguage.com/
SDL: http://www.libsdl.org/index.php
A*: http://www.policyalmanac.org/games/aSta ... al_de.html
Save the Cheerleader, save the World!
- max_power
- Zombiepirat
- Beiträge: 10065
- Registriert: 16.04.2002, 20:30
- Wohnort: Uppsala
- Kontaktdaten:
Während du dich in die genannten technischen Grundlagen einarbeitest, kannst du dir auch überlegen, wie du die Spielstruktur realisieren willst, also wie z.B. ein Raum gespeichert werden soll und wie er sich in das Spiel integriert.
Ich mache mir ab und zu Gedanken, wie ein Klassenmodell eines Adventures aussehen könnte, so etwas in der Art meine ich. Dann weißt du, wenn du richtig loslegen willst, welche Struktur das Ganze am Ende bekommen soll. Dazu könntest du dann in den entsprechenden Klassen die Funktionen zur grafischen Anzeige implementieren.
Wenn du dich vorher mit einfacheren Beispielen in die nötigen Techniken eingearbeitet hast, kannst du den alten Code dafür wieder verwenden – zumindest prinzipiell.
Ich mache mir ab und zu Gedanken, wie ein Klassenmodell eines Adventures aussehen könnte, so etwas in der Art meine ich. Dann weißt du, wenn du richtig loslegen willst, welche Struktur das Ganze am Ende bekommen soll. Dazu könntest du dann in den entsprechenden Klassen die Funktionen zur grafischen Anzeige implementieren.
Wenn du dich vorher mit einfacheren Beispielen in die nötigen Techniken eingearbeitet hast, kannst du den alten Code dafür wieder verwenden – zumindest prinzipiell.
„Es müsste immer Musik da sein, bei allem was du machst. Und wenn's so richtig Scheiße ist, dann ist wenigstens noch die Musik da. Und an der Stelle, wo's am allerschönsten ist, da müsste die Platte springen und du hörst immer nur diesen einen Moment.“ (Floyd, Absolute Giganten)
- cr0k3
- Komplettlösungsnutzer
- Beiträge: 27
- Registriert: 06.01.2006, 03:05
Vielen Dank erstmal für eure beiden Antworten!
Ich habe jetzt noch weitergehende Fragen: mal angenommen, ich habe mich für alle Features meiner zu programmierenden Engine entschieden und auch ein Klassenmodell meines Adventures erstellt. Womit beginne ich dann beim Programmieren?
Meine Vorstellung wäre so: ich versuche erstmal einen leeren Raum darzustellen, baue dann einen Charakter ein, der sich im Raum bewegen kann, füge Hindernisse in den Raum ein, um die er sich herum bewegen muss, brauche dafür natürlich Pathfinding, füge noch Hotspots ein, die ein Ereignis auslösen, wenn man mit der Maus drüberfährt usw.
Ist die Vorgehensweise ok oder liege ich da komplett falsch? Wie würdet ihr das ganze angehen?
Die nächste Frage wäre: wie sieht's mit den nächsten Räumen aus? Da muss man doch der Engine irgendwie mitteilen, welche Räume nacheinander an die Reihe kommen. Das war bestimmt gemeint mit dem Verweis auf ini- oder xml-Dateien. Aber wie geht man da am besten vor?
Wahrscheinlich seht ihr schon, dass ich da kaum Erfahrung habe. Ich habe zwar gelernt wie man kleinere Probleme mit C++ löst, aber dieses ganze Zusammenspiel ist mir (noch) total fremd!
Ich wäre sehr froh, wenn mir da jemand auf die Spünge helfen könnte! Herzlichen Dank!
Ich habe jetzt noch weitergehende Fragen: mal angenommen, ich habe mich für alle Features meiner zu programmierenden Engine entschieden und auch ein Klassenmodell meines Adventures erstellt. Womit beginne ich dann beim Programmieren?
Meine Vorstellung wäre so: ich versuche erstmal einen leeren Raum darzustellen, baue dann einen Charakter ein, der sich im Raum bewegen kann, füge Hindernisse in den Raum ein, um die er sich herum bewegen muss, brauche dafür natürlich Pathfinding, füge noch Hotspots ein, die ein Ereignis auslösen, wenn man mit der Maus drüberfährt usw.
Ist die Vorgehensweise ok oder liege ich da komplett falsch? Wie würdet ihr das ganze angehen?
Die nächste Frage wäre: wie sieht's mit den nächsten Räumen aus? Da muss man doch der Engine irgendwie mitteilen, welche Räume nacheinander an die Reihe kommen. Das war bestimmt gemeint mit dem Verweis auf ini- oder xml-Dateien. Aber wie geht man da am besten vor?
Wahrscheinlich seht ihr schon, dass ich da kaum Erfahrung habe. Ich habe zwar gelernt wie man kleinere Probleme mit C++ löst, aber dieses ganze Zusammenspiel ist mir (noch) total fremd!
Ich wäre sehr froh, wenn mir da jemand auf die Spünge helfen könnte! Herzlichen Dank!
-
- Komplettlösungsnutzer
- Beiträge: 44
- Registriert: 06.06.2006, 15:28
Ich würde dir als erstes Versuchen einfach einen Raum darzustellen. Den am besten schon als Klasse. So ungefähr (kenne die C++ syntax nicht genau). Der Vorteil ist du kannst neue Räume einfach erschaffen. Die Befehle stimmen nicht genau du musst selbst nachhschauen wie sie in c++ aussehen.
public class Raum (){
private img Bild;
private String beschr;
public Raum(String paraBildposition, String parabeschr){
bild = getBild(paraBildposition);
beschr = parabeschr;
}
public void Raumanzeigen(Graphic object g){
g.zeigeBild(Bild);
}
}
public class Raum (){
private img Bild;
private String beschr;
public Raum(String paraBildposition, String parabeschr){
bild = getBild(paraBildposition);
beschr = parabeschr;
}
public void Raumanzeigen(Graphic object g){
g.zeigeBild(Bild);
}
}
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Der Hauptpunkt: Du musst Dir Strukturen überlegen, in denen die einzelnen Bestandteile gespeichert werden, und Routinen, um diese zu verwalten.
Fang klein an, am Besten mit dem main-loop der engine.
Pseudocode:
Mit dem ersten Raum fängst Du genauso ganz klein an, eine simple Textdatei oder ein vergleichbares Format (XML) tuns am Anfang völlig.
z.B.Damit legst Du das Hintergrundbild und ein begehbares Rechteck fest.
Genauso verfährst Du mit dem Charakter: lies eine Textdatei ein, die den Startraum, die Startkoordinaten und den Pfad zum Sprite enthält.
Jetzt bringst Du die Engine dazu, den ersten Raum darzustellen, den Charakter anzeigen zu lassen und ihn nach einem Mausklick zu bewegen.
Wenn das hinhaut, baust Du die Engine und die Definitionsfiles sowie die Methoden, die diese lesen, immer weiter aus.
Bau nicht zu viel auf einmal ein, immer Schritt für Schritt.
Fang klein an, am Besten mit dem main-loop der engine.
Pseudocode:
Code: Alles auswählen
grafik und I-O initialisieren
strukturen initialisieren
startraum und startcharakter einlesen
loop {
darstellung aktualisieren
eingabe abfragen
reagieren
}
z.B.
Code: Alles auswählen
// Raum 1
d:\...\hintergrund.gif
10,130,310,230
Genauso verfährst Du mit dem Charakter: lies eine Textdatei ein, die den Startraum, die Startkoordinaten und den Pfad zum Sprite enthält.
Jetzt bringst Du die Engine dazu, den ersten Raum darzustellen, den Charakter anzeigen zu lassen und ihn nach einem Mausklick zu bewegen.
Wenn das hinhaut, baust Du die Engine und die Definitionsfiles sowie die Methoden, die diese lesen, immer weiter aus.
Bau nicht zu viel auf einmal ein, immer Schritt für Schritt.
Use gopher repellent on funny little man
-
- Süßwasserpirat
- Beiträge: 314
- Registriert: 17.02.2005, 15:46
Mal eine Frage nebenbei, wer hat sich denn schonmal dran gesetzt und einen eigene Engine geschrieben?
mfg hansa
mfg hansa
Zuletzt geändert von hansa_export am 27.09.2006, 18:32, insgesamt 1-mal geändert.
-
- Tastatursteuerer
- Beiträge: 675
- Registriert: 11.09.2005, 15:47
- max_power
- Zombiepirat
- Beiträge: 10065
- Registriert: 16.04.2002, 20:30
- Wohnort: Uppsala
- Kontaktdaten:
Ich denke nicht, dass du komplett falsch liegen kannst. Es sind bestimmt verschiedene Herangehensweisen möglich. Ich habe noch nie eine Engine programmiert, sondern mir nur Gedanken darüber gemacht.cr0k3 hat geschrieben:Ist die Vorgehensweise ok oder liege ich da komplett falsch? Wie würdet ihr das ganze angehen?
Beginnen würde ich mit der grafischen Darstellung eines Raums, da ich das für einen der einfachsten Punkte halte. Dann würde ich Objekte einfügen und Interaktionsmöglichkeiten einbauen. Die Figur würde ich erst später einsetzen, da es für mich zu den schwierigeren Dingen gehört.
„Es müsste immer Musik da sein, bei allem was du machst. Und wenn's so richtig Scheiße ist, dann ist wenigstens noch die Musik da. Und an der Stelle, wo's am allerschönsten ist, da müsste die Platte springen und du hörst immer nur diesen einen Moment.“ (Floyd, Absolute Giganten)
- cr0k3
- Komplettlösungsnutzer
- Beiträge: 27
- Registriert: 06.01.2006, 03:05
Ja, dann sag ich doch erstmal: Dankeschön für all eure Antworten! Das hilft mir schon mal sehr weiter! Ich denke, am Anfang ist es immer schwer und je mehr Erfahrung man sammelt, desto einleuchtender wird das Ganze!
Ich beschäftige mich zur Zeit mit SDL und finde es ziemlich cool! Ich mache langsam kleine Fortschritte und bin optimistisch, dass ich weiter vorankomme mit meiner Engine. Es wird natürlich sehr, sehr lange dauern, aber das macht überhaupt nix! Mir geht es ja hauptsächlich um die Programmierung mit C++...
Wenn jemand noch weitere Tipps hat, immer her damit! Zu viel wissen kann man gar nicht...
Schöne Grüße,
cr0k3
Ich beschäftige mich zur Zeit mit SDL und finde es ziemlich cool! Ich mache langsam kleine Fortschritte und bin optimistisch, dass ich weiter vorankomme mit meiner Engine. Es wird natürlich sehr, sehr lange dauern, aber das macht überhaupt nix! Mir geht es ja hauptsächlich um die Programmierung mit C++...
Wenn jemand noch weitere Tipps hat, immer her damit! Zu viel wissen kann man gar nicht...
Schöne Grüße,
cr0k3
- max_power
- Zombiepirat
- Beiträge: 10065
- Registriert: 16.04.2002, 20:30
- Wohnort: Uppsala
- Kontaktdaten:
Kannst ja mal von Zeit zu Zeit schreiben, was dir so widerfahren ist.
„Es müsste immer Musik da sein, bei allem was du machst. Und wenn's so richtig Scheiße ist, dann ist wenigstens noch die Musik da. Und an der Stelle, wo's am allerschönsten ist, da müsste die Platte springen und du hörst immer nur diesen einen Moment.“ (Floyd, Absolute Giganten)