Ich muss als Hausarbeit ein Textadventure in Java programmieren. War bisher auch nicht weiter schwer, weil wir ne Vorgabe hatten, an der wir uns orientieren konnten.
Wir haben verschiedene Klassen angelegt (Spiel, Raum, Spieler, Gegenstand und noch ein paar, weiß ich jetzt grad gar nicht alle aus dem Kopf) bzw. die vorhandenen übernommen. Die haben wir dann mit Methoden gefüllt, also dass man sich was angucken kann, dass man sich bewegen kann, etwas mitnehmen oder liegenlassen kann etc. Das sind aber alles so allgemeine Sachen, wo ich also sage, dass jedes Item mitgenommen werden (außer es hat ein bestimmtes Gewicht was über der Last liegt, die ich tragen kann) oder ich mir jedes Item anschauen kann. Das ist ja dann recht allgemein gehalten.
Womit wir jetzt Probleme haben ist der Punkt, dass wir ja auch bestimmte Aktionen durchführen wollen. Also dass man einen ganz bestimmten Gegenstand einer ganz bestimmten Person geben kann. (Sie soll weder einen anderen Gegenstand erhalten können/wollen, noch will ich den Gegenstand einer anderen Person übergeben können).
Kann mir da vielleicht jemand einen Tipp geben, wie ich das umsetze? Mache ich das in einer neuen Klasse? Mache ich dann ganz genaue Abfragen, mit if und else oder so?
Ich kann heute abend das Spiel, soweit wir es bisher haben, gern mal hochladen, zusammen mit dem Programm BlueJ, das man braucht, ums zum Laufen zu kriegen. Bin nur leider im Moment nicht zu Hause, sonst hätt ich das gleich gemacht. Aber vielleicht weiß ja so schon jemand ungefähr, wie man das machen könnte. Manchmal reicht bei mir auch schon ein Denkanstoss, dann klappt das (aber auch nicht immer, je nachdem *G*)
Das kommt ganz darauf an, wie dein Programm bisher ausschaut. Eine generelle Lösung wäre es, der Spielerklasse eine Liste mit Gegenständen, sozusagen als eine Art Inventar zu geben. Diese Liste enthält dann Objekte der Klasse Item, von der du die speziellen Items ableiten kannst (sofern es denn nötig ist, wenn ein Item nur "da" sein muss, und keine nennenswerten Eigenschaften besitzt, reicht ein einfacher String aus).
Die Liste (wenn du eine standard-Java-Bibliothek nimmst) kann dann ja einfach mit "contains(Object o)" überprüfen, ob der Gegenstand enthalten ist.
Poste einfach einmal deinen Quellcode, dann finden wir schon irgendwie eine Lösung
Oh cool, vielen Dank Dachte schon, mir antwortet keiner mehr und die Zeit rennt mir grad echt davon Zu dumm, dass ich mich grundästzlich mit meiner zeit verkalkuliere :-/
Mit Quelltext posten ist schlecht, ist viel zu viel *g* Ich kann aber mal das ganze Spiel hochladen auf meinen Webspace, zusammen mit dem Programm, was man zum ausführen braucht und du kannst es dir ja mal angucken Das wär echt nett.
Ach ja, kleine Anmerkung: Die kommentare sind teilweise nicht ganz richtig, weil ich an manchen Stellen was kopiert und dann geändert hab, aber die Kommentare noch nicht ausgebessert hab. Das mach ich jetzt aber gleich, weil ich ja eh nix anderes machen kann *g*
Wenn man bluej installiert hat, muss man den Ordner FHQuestVersuch (nachdem man die Rar-Datei extrahiert hat), mit blue J öffnen, der erkennt den kompletten Ordner als Datei.
edit: ach ja, noch zwei kleinigkeiten die wir eigentlich gestern abend beheben wollten, es aber nicht hingekriegt haben *schäm* In der Klasse Spiel haben wir versucht, ein Kommando 'zurück' zu basteln, eigentlich soll das so funktionieren, dass man in den letzten Raum zurückkommt, den man gerade verlassen hat, uns teleportiert er aber immer in den Anfangsraum, kann mir da vielleicht jemand sagen, woran das liegt?
Und wir haben versucht es so zu machen, dass die Charaktere per zufall in einen Raum gesetzt werden, soweit kein Problem, nur wärs irgendwie ganz cool, wenn die immer wieder neu 'verteilt' werden, wenn ich einen Raum verlasse, so als würden die sich bewegen?! Geht das irgendwie (also mit dem was wir da schon gemacht haben, wenn man das dann etwas umschreibt/erweitert)?
*geht jetzt die Kommentare weiter bearbeiten*
Gut, ich hab mir das Dingen mal angesehen... mit blueJ kann ich leider nicht viel anfangen, da du mir die Windows-Variante gegeben hast, und ich zu faul bin, mir das Programm so zu besorgen. Aber die Java-Files sind ja da
Zum Raum-problem: Ihr setzt ganz richtig den aktuellen Raum auf den letzten Raum, leider vergesst ihr, den letzten Raum (also lastRoom) zu setzen. In der Methode goRoom(...) musst du folgendes ändern:
Ausserdem steht in irgendeiner Zeile lastRoom2, das musst du halt noch auf lastRoom ändern.
Umherspazierende Leute: Du könntest theoretisch jedes Mal, wenn ein Raum betreten wird, sämtliche Charaktere aus allen Räumen entfernen, und sie (durch zufall) wieder auf die Räume aufteilen...
Gegenstände: Okay, du möchtest jetzt also z.B. den Gegenstand "viel Geld" an den Chara "MuadDib" geben. Ich würde das so realisieren, indem du deinen Charakteren ebenfalls eine Itemliste gibst, und du in einer Methode die Überprüfung machst:
eine bessere Lösung gibt es sicher, nur fällt sie mir bei eurem Ansatz nicht wirklich ein, damit dürftet ihr aber auch auskommen...
btw. das Adventure macht ziemlich Spaß! Erinnert mich an meine alten 386-Zeiten
Werd das gleich mal ausprobieren. Hab jetzt grad schon 2 Stunden an dem Ding rumgebastelt und die Kommentare ausgetauscht, da sind mir zum Glück noch ein paar Geistesblitz (besser spät als nie) gekommen. Ich hoffe, ich krieg das ganze bis heute abend noch fertig
Viele dank jedenfalls, hoffentlich krieg ich den Rest allein hin
Wenn ich jetzt dem Charakter ein Item geben will, mach ich das dann so, wie bei den Räumen? Also in der Klasse spiel werden ja die Räume erzeugt und dann einem raum ein Item hinzugefügt.(raum.additem("name", gewicht, "beschreibung"))
da hab ich mir gedacht, dass ich genauso auch mit den Charakteren mache. Nur wenn ich in der Klasse Spiel sage, dass ich Charaktere erzeugen möchte und denen dann auf ähnliche Weise Items hinzufüge, wie mach ich das dann, dass ich einem raum den bestimmten Charakter hinzufüge?