Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hi, ich möchte ein kleines Spiel gestalten. Das ist ganz einfach aufgebaut: ohne Grafik, Singleplayer und auch ansonsten nicht viel. Allerdings brauche ich ein Konzept, um die einzelnen Texte richtig abzuspielen, sodass ich unter den (vielen) if-Schnittstellen herumwechseln kann und so einerseits einen "Entscheidungsbaum" habe, andererseits auch beliebig zwischen den einzelnen Ästen herumwechseln kann, damit ich auch, falls der Charakter einfach ein bisschen zurücklaufen sollte, dies bewerkstelligen kann.
Ich hoffe, ihr habt verstanden, was ich meinte.
Marcineks Frage war durchaus berechtigt. Du hast doch dein Spielkonzept im Prinzip schon (klingt nach 'nem simplen Textadventure). In so einem hat man Orte (Tree-Nodes) in denen Optionen zu anderen Orten führen. Damit legt sich eine gewisse Programmstruktur doch eigentlich schon fast von alleine fest und wartet nur darauf umgesetzt zu werden.
Hast Du das gleichnamige Buch gelesen ?
Ein Konzept sollte man selber erarbeiten. Deine Vorstellungen zum Spiel sind so etwas in grob.
Allerdings gehören zur Umsetzung auch gute Programmierkenntnisse.
Zuerst einmal der Hinweis, dass so ein Spiel ziemlich nah an einem endlichen Automaten ist: Eine Menge Zustände, und eine Menge "Übergangsregeln" zwischen den Zuständen.
Nun wird man so etwas kaum mit eine if-else-Kaskade umsetzen. Du solltest dir überlegen, das Spielgeschehen irgenwie (am besten in einem strukturierten Format wie XML, JSON oder so) in einer Datei abzubilden, ganz grob etwa so:
Code:
<game start="before_the_castle" end="room_of_the_princess">
<room name="before_the_castle" description="You stand in front of a mighty castle with two statues next to the front door">
<var name="front_door" state="locked">
<var name="has_key" state="false">
<move direction="south">Your way is blocked by rocks</move>
<move direction="north">Your way is blocked by a river</move>
<move direction="east">You don't want to go back where you came from</move>
<move direction="west" condition="front_door=locked">The front door of the castle is locked</move>
<move direction="west" condition="front_door=unlocked" next_room="entrance">You proceed to the entrance</move>
<action name="Unlock front door" condition="has_key=true" result="front_door=unlocked">You have unlocked the door</action>
<action name="Investigate left statue">You find nothing</action>
<action name="investigate right statue" condition="has_key=false" result="has_key=true">You find a key!</action>
<action name="investigate right statue" condition="has_key=true">You have already found the key</action>
</room>
...
</game>
Es ist wichtig, möglichst von Anfang an ein Format zu finden, das alle gewünschten Möglichkeiten bietet, also überlege dir genau, was alles möglich sein soll, bevor du weitermachst. Soll z.B. alles fest vorgegeben sein, oder sollen manche Ereignisse nur mit einer bestimmten Wahrscheinlichkeit auftreten?
Der nächste Schritt ist, den Inhalt dieser Date nach Java zu bekommen. JAXB nimmt dir hier die Arbeit ab: Du schreibst Klassen wie Move, Action, Room, Game u.s.w., und mit ein paar Annotationen bekommst du alles eingelesen.
Dann überlegst du dir, wie du in deiner Game-Loop mit diesen Modell-Klassen das Spiel steuerst.
public void Spiel() {
Stage ort = Game.loadFirstStage();
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println(ort.describe());
ort = ort.doAction(sc.nextLine());
if(Spiel.checkFinish()) {
break;
}
}
}
Ob nun mit oder ohne besagtem switch-case, die ifs lassen sich so schon mal ortsabhängig unterteilen. Man benötigt dazu noch ein entsprechendes Interface "Stage" welches die Methoden "describe" und "doAction" deklariert. Einzelne konkrete Orte müssen diese dann nur noch individuell implementieren. Ganz zu Anfang der "doAction"-Methode dabei evtl. ortsunabhängige Actions (Richtungen usw.) auswerten, das lässt sich ebenfalls noch mal wunderbar kapseln.
[EDIT]@All: Ich habe mir dieses "Konzept" grad' selber aus dem Ärmel geschüttelt, aber so ungefähr würd' ich's machen. Ist hoffentlich nicht verwerflich, wenn man die Orte in einer entsprechenden Collection, Map oder Tree verwaltet.[/EDIT]