Altspiel variieren - The Bard's Tale (1985)

Einstiegsfragen, Mathematik, Physik, künstliche Intelligenz, Engine Design
Antworten
Benutzeravatar
Terep
Beiträge: 53
Registriert: 17.01.2008, 21:20
Wohnort: Hannover Region

Altspiel variieren - The Bard's Tale (1985)

Beitrag von Terep »

Tales of the Unknown: Volume I - The Bard's Tale (1985)

Dies ist die Art Rollenspiel, wie ich es proggen möchte.

Zurzeit progge ich unter Java und schaue mir C# an.
Vorher hatte ich mit C++ angefangen. Nachdem ich mal Delphi getestet hatte, merkte ich, wie schnell man in einer anderen Programmiersprache seinen persönlichen Level nahe kommt.

Mit Java mache ich eigentlich gute Fortschritte. Zurzeit schreibe ich ein Brettspiel, bei denen die Figuren sich bewegen. Als nächstes wollte ich ein Wurmspiel schreiben, danach etwas wie Tetris.

Nur, das sind nicht die Sachen, die ich mit Hingabe machen möchte. Daher die Frage. Wenn ich zielgerichtet eine Art Bard’s Tale machen will, wie sieht da der Lernplan aus?

Nach Möglichkeit will ich den Code selbst schreiben.

Was würdet Ihr mir raten?
Kann ich es erst mal mit Java machen und später auf C# bzw. C++ umsteigen? Ich denke, dass ich mich mit C++ überfordere.

Wenn ich mit diesem Projekt starte, will ich in der ersten Stufe nicht planen, sondern erst mal eine Art Machbarkeitsprobe erstellen. Planung macht bei mir erst einen Sinn, wenn ich weiß, was ich tue.

Was mir jetzt helfen würde, ist eine konkrete Auflistung von Softwaretechniken, die dazu nötig sind.
Wenn dann noch eine Reihenfolge dabei ist, was ich als erstes beherrschen sollte, hätte ich eine Art Fahrplan.

Terep :)
Avatar = „Odyssee im Weltraum“ Film von Stanley Kubrick (Warner Brothers);
nach dem Buch von Arthur C. Clarke. It will becoming true ?!!
Niki
Establishment
Beiträge: 309
Registriert: 01.01.2013, 21:52

Re: Altspiel variieren - The Bard's Tale (1985)

Beitrag von Niki »

Learning by doing! Einfach mal den Mut haben ins kalte Wasser zu springen und Fehler zu machen. Was hast du denn zu verlieren? Nichts! Also ist es doch fast egal ob das ganze nach hinten losgeht. Da lernst du nur um so mehr, wenn du plötzlich feststellst was alles nicht gut ist. Einen super-vollkommenen Fahrplan gibt es nicht. Mit steigender Erfahrung lernt man sich den Fahrplan so offen zu halten, so dass man nicht total stecken bleibt wenn man mal in einer Sackgasse landet. Aber für Erfahrung muss man lernen, und Fehler machen gehört nun mal dazu.

Ein Tetris hilft dir bei einem Rollenspiel jedenfalls nicht extrem viel weiter. Es hilft mit Grundlagen, aber ansonsten ist das Spielprinzip total anders. Und Grundlagen kann man auch mit andere Spielprinzipien lernen. Du solltest dir aber vorher wenigstens mal eine Game- und Render-Loop reingezogen haben, und damit ein wenig rumspielen. Da gibt es jede Menge Tutorials zu. Ich weiß aber offen gestanden nicht wo man gute Infos für Java-Spiele findet. Und ja, das heißt Grafik, und auch da muss man sich nur mal zu zwingen :)
joeydee
Establishment
Beiträge: 1039
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: Altspiel variieren - The Bard's Tale (1985)

Beitrag von joeydee »

Der Prototyping-Weg mit einem Genre oder Remake im Hinterkopf ist nicht unüblich, um einen interessanten Einstieg in die Spieleprogrammierung zu finden. Aber von einem festen Fahrplan solltest du absehen. Trenne vor allem Logik von Darstellung.
Z.b. eine Pacman-Logik findet erstmal immer auf einem virtuellen 2D-Karoraster statt. Egal ob 2D dargestellt, oder Iso-2.5D, oder als 3D-Egoshooter... falsch wäre z.B. mit einer Iso-Ansicht zu beginnen und dann versuchen, darauf irgendwelche Kollisionsberechnungen oder KI anzupassen. Sei dir also im Klaren, wie ein möglichst abstrahiertes Modell der Logik aussehen muss und denke dir fürs Prototyping eine möglichst einfache Darstellung zur Kontrolle dieser aus. Fürs Testen einer Pacman-KI würde auch ein Textraster mit X-en, Leerzeichen etc. genügen.

Vor allem die Logik teilst du in kleine Häppchen, die du nach Belieben in kleinen Prototypen "as easy as possible" unabhängig voneinander ausprobierst. Z.B. in deinem Fall (kenne das Spiel nicht so genau)
- ein paar Grundeigenschaften für Charaktere ausdenken und überlegen was passiert wenn diese gegeneinander antreten und wie man das verrechnen kann.
- Handel?
- wie könnte ein Dialogsystem aufgebaut werden?
- Storytelling? Denk dir eine kurze Story aus oder nimm einen Teil einer bekannten und versuche sie rüberzubringen. Mit "as easy..." meine ich auch: Kämpfe kannst du an dieser Stelle auch noch mit J/N-Taste entscheiden. Beim Storytelling-Prototyp darf es nicht um das Kampfsystem gehen.
- ...
Später irgendwann:
- gibt es Parallelen zwischen einzelnen Modulen? Kann man da was verallgemeinern? Gemeinsame Basis? Was gehört zusammen, was wird strikt getrennt? Plane deinen Klassenaufbau. Das macht erst Sinn wenn du mal einige Prototypen programmiert, verworfen, verbessert, umgestaltet hast.
- Wie soll die Darstellung aussehen? -> Daten aus der Logik abgreifen und "schön" auf den Schirm bringen. Testet man meist irgendwann zwischendrin weils Spaß macht, aber denk dran dass sich die Schnittstelle Daten->Grafik noch zigtausendmal ändern wird.
- Ist die Darstellung schnell genug? Aktualisiert sich hier etwas live pro Frame oder erst nach jeder Benutzereingabe? Kann man sich Teile bei der Neudarstellung sparen?
- User-Interface: was wird benötigt, lohnt sich eine fertige Bibliothek oder selfmade? -> Wieder Prototyping...

So mal im Groben was ich dir empfehlen kann um mal "irgendwo" anzufangen.
Benutzeravatar
Terep
Beiträge: 53
Registriert: 17.01.2008, 21:20
Wohnort: Hannover Region

Re: Altspiel variieren - The Bard's Tale (1985)

Beitrag von Terep »

Hallo Niki, hallo joeidee

Einfach ins kalte Wasser springen, habe ich hinter mir. Ich hatte viel am „Drumherum“ gemacht aber es war kein Skelett vorhanden oder anders ausgedrückt ich hatte auf Sand gebaut.

Daher hatte ich mich von C++ verabschiedet und Grundlagen gelernt.
Nach den Grundlagen gibt es reichlich viele Themen. Wenn ich die alle abarbeiten würde, dann komme ich nie dazu, mein Spiel zu schreiben.

Meine Hauptsorge ist, dass irgendwelche Techniken vorausgesetzt werden, die mir noch fehlen.

Darstellung und Story habe ich im Kopfe stecken. Dort spukt es schon lange genug rum.

Zur Logik hast Du recht. Am Anfang ohne viel Schnickschnack eine einfache Machbarkeitsstudie. Ich werde so anfangen:
Den Bildschirm teile ich senkrecht, waagerecht in 4 gleich große Stücke.
Oben links kommt eine Art Display. Hier zeigt sich das laufende Spiel.
Oben rechts ein Scrollfenster. Alle Arten von Nachrichten laufen darüber.
Unten links der Avatar und seine Gefährten.
Unten rechts für Sonstiges.

Im Bildschirm oben links werden pro Spielfeld immer 4 Blickrichtungen gezeigt.
Wenn es möglich ist, wie zum Beispiel bei einem Weg oder einer Tür, kann man ein Feld vorrücken.
Unter dem Bildschirm kann man an einem Schalten die Sichtweise um 90 Grad drehen. Ein weiterer Schalter ist für das „ein Feld vorwärts“ gehen gedacht.

Mein Ziel ist es, durch eine gute Story, Aufgaben, Rätsel usw. Anreize zu schaffen. Grafisch und technisch gesehen, bin ich wohl out. Das ist mir aber egal. Ich kann mich ja von Version zur Version steigern.

Werde mich wohl auch reichlich mit Gimp beschäftigen. Na ja, immer nur proggen, ist auch stressig.

Terep :)
Avatar = „Odyssee im Weltraum“ Film von Stanley Kubrick (Warner Brothers);
nach dem Buch von Arthur C. Clarke. It will becoming true ?!!
joeydee
Establishment
Beiträge: 1039
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: Altspiel variieren - The Bard's Tale (1985)

Beitrag von joeydee »

"Oben rechts ein Scrollfenster" etc. ist schon zu viel gedacht. Sorge erstmal dafür dass du sinnvolle Daten bekommst, die da angezeigt werden. Wie entstehen die, wie werden die verändert,... baue erstmal das Skelett auf. Die Daten selbst kannst du solange auch als Endlostext ausgeben, scrollen musst du da erstmal gar nichts. Dasselbe gilt für den Rest.

Wenn du Sorge irgendwas vorausgesetzt wird was dir noch fehlt - dann lernst du es eben dann wenn es soweit ist. Erfahrung ist durch nichts zu ersetzen.
Benutzeravatar
Terep
Beiträge: 53
Registriert: 17.01.2008, 21:20
Wohnort: Hannover Region

Re: Altspiel variieren - The Bard's Tale (1985)

Beitrag von Terep »

Spieldaten speichern

Vorab, um was es geht. Ich progge in Java mein erstes „big Game“. Grafik kommt mittels Gimp zustande. Auf GUI-Teile wie Buttons oder anderes verzichte ich. Ausnahme: JOptionPane.showInputDialog fürStory, Außergewöhnliches. Gesteuert wird das Spiel über eine aufwendige Key-Verwaltung. Der Stand:

Das Spiel wird als erstes fragen, ob eine weibliche oder männliche Karriere geplant ist.
Die Story ist entsprechend angepasst und soll einen wesentlichen Beitrag zum Spielspaß leisten, um die „schwache Grafik“ auszugleichen. Mit der Story sollen auch konkrete Aufgaben hochkommen, um einen Pfaden zu haben.

Der Bildschirm ist geviertelt.
Oben links das Grafik- bzw. Spielfenster.
Rechts daneben 12 Zeilen Textmöglichkeit.
Unten links die Avatare-Daten.
Rechts für Besonderheiten wie zum Beispiel eine detailgetreue Map vom gesamten Spielfeld.

Die Stadt ist 20 x 20 Felder groß. In der habe ich Wege und Häuser gezeichnet. In der Stadt kann man sich mittels Pfeiltasten in den 4 Himmelsrichtungen bewegen, soweit es Wege gibt. Wobei man auf dem Spielfenster immer nur ein Feld voll und 8 andere teilweise sieht. Es gibt Häuser, in denen man gehen kann.
Dies funktioniert, die Grafik kann natürlich noch verbessert werden.

Die Party besteht aus 6 Avataren. Diese kommen aus den üblichen Rassen, Professions usw., 42 mögliche Variationen. Bis zu 30 Avatare können so mit eingegrenzten Zufallswerten angeworben werden. Daraus holt man sich die 6 Abenteurer in die Party. Das Erzeugen, Löschen, Umgruppieren ist zu 98 % fertig. Letzte Arbeiten bei der Party.

Als nächstes wird die Party in die Stadt gehen können. Zum proggen stehen dann Gegner, shop, Ausrüstungsgegenstände, entsprechende Auswertungssysteme, Zeittakt usw. an.
Danach kommen konkrete Aufgabenstellungen und verschiedene Örtlichkeiten etc.


Jetzt bin ich aber so langsam in der Phase, in der es nervt zum Testen immer alles neu erzeugen zu müssen, um an den relevanten Teil zu kommen.

Daher möchte ich gerne den aktuellen Spielstatus speichern.

Da ich dies noch nie wirklich gebraucht habe, kommt jetzt die eigentliche Frage.

Wie speichere ich den Spielstand?

Gibt es unter Java ein Tool, das alle Parameter einfach auf Knopfdruck einfriert und zum Wiederhochladen anbietet?

Oder ist die graue Wirklichkeit so, dass ich alle Parameter einzeln mit der Methode write abspeichere und mit einer Startroutine alles wieder hochlade und so auch die bei mir immer anwesenden Fehlerquellen abarbeiten muss?

Wie ist es in Java üblich?

Terep :)
Avatar = „Odyssee im Weltraum“ Film von Stanley Kubrick (Warner Brothers);
nach dem Buch von Arthur C. Clarke. It will becoming true ?!!
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Altspiel variieren - The Bard's Tale (1985)

Beitrag von Chromanoid »

Was Du suchst ist eine Möglichkeit zur (De-)Serialisierung Deiner Objekte. Wenn Du schnell zu Ergebnissen kommen möchtest, dann kannst Du einfach die eingebaute Serialisierung von Java nutzen. Dazu musst Du die Klassen, die gespeichert werden können sollen, die Marker-Schnittstelle Serializable implementieren lassen. Felder, die nicht serialisiert werden sollen bzw. können markierst Du mit dem Modifier "transient". Es gibt noch weitere Details, die Du am Besten selbst herausfindest. Mit dem ObjectOutputStream kannst Du dann Deine Daten in eine Datei schreiben und mit dem Gegenstück ObjectInputStream wieder einlesen.
NytroX
Establishment
Beiträge: 358
Registriert: 03.10.2003, 12:47

Re: Altspiel variieren - The Bard's Tale (1985)

Beitrag von NytroX »

Oder du speicherst die generierten Daten in einer Datenbank.
Ist eine einfache und leicht erweiterbare Lösung, die auch für komplexe Datenzusammenhänge gut funktioniert.
(z.B. SQLite mit Java-Wrapper )

Ich glaube aber, dass ein Feature wie speichern/laden nur dann richtig gut funktioniert, wenn man das in seinem Game von vornherein mit einplant.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Altspiel variieren - The Bard's Tale (1985)

Beitrag von Chromanoid »

Wenn es eine Datenbank sein soll, dann bitte gleiche eine in pur Java :). Die H2 Database wäre da so ein Beispiel. Wenn Du kein Object-Relational-Mapping benutzen möchtest (nimmt Dir das Mappen der Objekte in DB Daten ab), dann kannst Du Dir mal JOOQ anschauen. Für große Datenmengen, die nicht mehr gut in eine HashMap passen und persistiert werden müssen, ist auch MapDB ganz interessant.

Solange Du mit den einfachen Mitteln der Java-Serialisierung zurecht kommst., würde ich an Deiner Stelle erst mal keine Datenbank nutzen, das macht es nur unnötig kompliziert.
Benutzeravatar
Terep
Beiträge: 53
Registriert: 17.01.2008, 21:20
Wohnort: Hannover Region

Re: Altspiel variieren - The Bard's Tale (1985)

Beitrag von Terep »

Danke für die Hinweise

Die Bemerkung von NytroX gibt mir zu Denken. Mit gut 2000 Zeilen ist mein Programm wohl noch überschaubar. Ich werde das Speichern so vornehmen, dass es nur innerhalb der Gilde, sprich Ausgangspunkt des Spiels gemacht werden kann. Dann habe ich klar definierte Zustände.

Wenn ich jetzt eine Zeitlang das Spiel programmiert habe, stelle ich fest, dass mein Programm eine Ähnlichkeit mit einem Schachspiel bekommt. Es treten dann Merkwürdigkeiten auf. Allein bei meiner Key-Steuerung habe ich erst im dritten Anlauf eine solide Lösung gefunden.
Heute zum Beispiel tauchen Null-Objekte auf, die gar nicht auftauchen dürfen. Also ist irgendwo eine unsaubere Stelle. Wenn ich die Speicherroutine schreibe, werde ich sämtliche Arrays im Objektaufbau, Bezeichnung und Zusammenspiel neu überarbeiten. Kostet mich wahrscheinlich 2 Wochen. Danach ist das Thema Null-Objekte hoffentlich vom Tisch.

Das mit dem Einplanen ist so eine Sache. Hier fehlt mir einfach die Erfahrung umfangreiche Programme zu schreiben. Im Prinzip ist mein derzeitiges Projekt eine Art Grob-Planung fürs nächste Projekt. Wenn das Spiel läuft, weiß ich viel konkreter, was zu bedenken ist. Naja, in diesem Jahr werde ich bestimmt nicht fertig. Egal, jetzt stehen Null-Objekte und die Speicherung an.

Nochmals danke für die Tipps. Ich werde versuchen, eine eigene Routine zu schreiben, das zwingt mich, das Ganze noch einmal zu durchdenken. Grauzonen sind tückisch. Die schlagen irgendwann zu, wie die heutigen Null-Arrays.

Terep :)
Avatar = „Odyssee im Weltraum“ Film von Stanley Kubrick (Warner Brothers);
nach dem Buch von Arthur C. Clarke. It will becoming true ?!!
Benutzeravatar
Terep
Beiträge: 53
Registriert: 17.01.2008, 21:20
Wohnort: Hannover Region

Re: Altspiel variieren - The Bard's Tale (1985)

Beitrag von Terep »

Hallo Leute

Mein Urlaub ist fast zu Ende. Programmiermäßig hatte ich abgeschaltet.

Mein Spiel hat schon gewisse Fortschritte. Die Avatarverwaltung ist fertig.

Bis jetzt habe ich noch alle Merkwürdigkeiten beseitigen können und es läuft stabil. Grafikmäßig habe ich mich mittlerweile mit Gimp beschäftigt. Gemäß alter Bards Tale Manie wurden die Bilder gepixelt.
Daher bin ich auf das Forum http://www.pixelplaza.de/?referrerID=16317 gestoßen.
Hier habe ich bereits 2 Werke vollbracht. Wer sie sich ansehen will, kann sie leicht finden, bin dort auch unter Terep gemeldet.
In der Anlage habe ich die Stadt als Skizze hinterlegt. Im Spiel sind immer nur 3 mal 3 Felder sichtbar. Statt der Farben sind dann entsprechende Gebäude, Wege, usw. sichtbar.

Dann kam der Einbruch. Ein interessierter Kollege meinte, ich könnte das Original-Bardstale mittels DOS-Box spielen. Und er hat recht. Ich mache jetzt erstmal Studien an der Originalvorlage und zocke. Es macht Spaß und hat ein sehr spezielles Flair.

Was ich anfangs total unterschätzt habe, ist die viele Detailarbeit, die hochpopt. Allein die Key-Verwaltung, welcher Buchstabe wann welche Wirkung hat und wann er keine haben darf, grenzt nicht nur an Arbeit, es ist Arbeit.

Storymäßig werde ich zwischen den weiblichen und männlichen Spieler unterscheiden. Die Story und damit der Spielinhalt wird sich von Bards-Tale unterscheiden. Hier versuche ich einen eigenen Spielreiz zu erzeugen.

Die jetzige Version zu veröffentlichen bringt nichts. Es funktioniert, aber wenn es dann in die Stadt geht, kann man nur auf den vorgezeichneten Wegen laufen und es passiert nichts.

Die 2. Schwierigkeit sind die Grafiken. Bei über 50 verschiedenen Charakteren, alle mit eigener Bildhinterlegung habe ich Bilder aus dem Internet verwendet. Der Aufwand, Bilder zu pixeln, ist wahnsinnig hoch und genauso zeitraubend wie die Programmierung selbst.

Bilder brauche ich für das Spiel ohne Ende. Veröffentlichen kann ich es so nicht. Ich werde also mehr pixeln müssen, in Pixel Plaza tut sich hier eine eigene WELT auf.

Naja, bin nach heutigem Stand auch noch 1 bis 2 Jahre davon entfernt. In der Zwischenzeit werde ich darüber nachdenken, wie dies zu lösen ist. Im Hinterkopf habe ich die Ultima-Spielserie (natürlich auch uralt und nicht weniger genial). Vielleicht geht’s später mehr in diese Richtung.

Mit diesem Posting wollte ich mich mal wieder melden und mich selbst daran erinnern nicht mehr nur zu zocken.

Bis denn :)
Terep
Dateianhänge
map400x400.png
Avatar = „Odyssee im Weltraum“ Film von Stanley Kubrick (Warner Brothers);
nach dem Buch von Arthur C. Clarke. It will becoming true ?!!
Benutzeravatar
captain
Beiträge: 25
Registriert: 25.03.2002, 11:49
Wohnort: berlin
Kontaktdaten:

Re: Altspiel variieren - The Bard's Tale (1985)

Beitrag von captain »

Machst Du das Spiel denn wit AWT/Swing oder mit einer Engine wie libgdx?

Ich habe gerade eine Spiel mit Java und reinem AWT/Swing hinter mir und würde wohl als nächstes eine Engine verwenden. Ansonsten lohnt es sich soviel wie möglich zu kapseln, d.h. "lade" die Spielstände erstmal in einer Dummyklasse, dann kannst Du hinterher eine andere Implementierung austauschen. Genauso wie für die Bilder -> erstmal ein paar aus dem Internet nehemn (oder eine paar dummy bilder "hinpixeln"), und wenn der Code einigermaßen rund läuft austauchen.

Ansonsten hilft es ungemein die OO-Fähigkeiten von Java auszusnutzen, gerade bei "statischen" Spielen wie Bards Tale, die nicht sooo auf Speed und Echtzeit ausgerichtete sind!

Viel Erfolg :)
Benutzeravatar
Terep
Beiträge: 53
Registriert: 17.01.2008, 21:20
Wohnort: Hannover Region

Re: Altspiel variieren - The Bard's Tale (1985)

Beitrag von Terep »

Hallo captain

Im Prinzip will ich es so umsetzen wie Du es beschrieben hast.

Ich habe Klassen für die Objekte, Avatare, Bilder, Swing (Graphics2D g2 = (Graphics2D) g;), TastaturEreignis, TownMap angelegt und als Verknüpfung verwende ich die Klasse Spielaufbau. Die Objekte sind so ziemlich alle in Arrays abgelegt. Von der GUI nutze ich nichts, keine Button; Labels oder Sonst was.

Eine Engine verwende ich nicht. Die Klassenbibliothek eigentlich nur für das Fenster und die Ereignisabwicklung. Gimp für das Pixeln und Anpassen von Bildern.

Wenn alles im Wesentlichen funktionsfähig ist, werde ich neu ansetzen. Irgendwie ist es bei mir so, dass ich immer mehr draufsattle und der Code immer unklarer wird. Wenn ich dann neu starte, komme ich meistens weiter. Nur ist dieses Projekt für mich reichlich groß. Erst einmal muss ich durch, das heißt, eine spielfähige Version proggen.

Terep
Avatar = „Odyssee im Weltraum“ Film von Stanley Kubrick (Warner Brothers);
nach dem Buch von Arthur C. Clarke. It will becoming true ?!!
Antworten