Keeping track of rooms in Java adventure game?

I am trying to create a Java adventure game in which you can move north, south, east, and west. However you cannot move these directions depending on whether each room's direction boolean value is true or false (ie if north is true for that room, you can move north). My issue is I am not sure how to go about keeping track of what room the player is currently in/move to a new room. What would be an ideal way to go about keeping track of the current room the player is in, and moving to new rooms?

Code:

import java.util.Hashtable;
import java.util.Scanner;

public class Adventure {
    // Create each room
    Room1 Room1 = new Room1();
    Room2 Room2 = new Room2();
    Room3 Room3 = new Room3();
    Room4 Room4 = new Room4();
    Room5 Room5 = new Room5();
    Room6 Room6 = new Room6();
    Room7 Room7 = new Room7();
    Room8 Room8 = new Room8();
    Room9 Room9 = new Room9();
    Room10 Room10 = new Room10();
    boolean allIngredients = false;

    public void RoomSetup() {
        // Create HashTable and add rooms to the HashTable
        Hashtable<Integer, Room> RoomSet = new Hashtable<Integer, Room>();
        RoomSet.put(1, Room1);
        RoomSet.put(2, Room2);
        RoomSet.put(3, Room3);
        RoomSet.put(4, Room4);
        RoomSet.put(5, Room5);
        RoomSet.put(6, Room6);
        RoomSet.put(7, Room7);
        RoomSet.put(8, Room8);
        RoomSet.put(9, Room9);
        RoomSet.put(10, Room10);

        // Set Room 1 Properties
        Room1.setIntro(
                "You are in a dark cave. In the middle, there is a cauldron boiling. With a clasp of thunder, three witches suddenly appear before you.");
        Room1.setFirstVisit(
                "The witches speak in unison: "Mortal, we have summoned thee, make haste! And go forth into the farrow'd waste.Find eye of newt, and toe of frog,And deliver thus to this Scottish bog. Lizard's leg, and owlet's wing, And hair of cat that used to sing. These things we need t' brew our charm; Bring them forth -and suffer no 'arm. Leave us and go!  'Tis no more to be said,Save if you fail, then thou be stricken, dead."");
        Room1.setPreAction("The witches stand before you, glaring; they seem to be expecting something from you.");
        Room1.setPostAction(
                "The witches look at your items with suspicion, but decide to go through with the incantation of the spell: "Take lizard's leg and owlet's wing, And hair of cat that used to sing. In the cauldron they all shall go; Stirring briskly, to and fro. When the color is of a hog, Add eye of newt and toe of frog. Bubble all i' the charmed pot; Bubble all 'til good and hot. Pour the broth into a cup of stone, And stir it well with a mummy's bone." You take the resulting broth offered to you and drink... As the fog clears, you find yourself at a computer terminal; your adventure is at an end.");

        // Set Room 2 Properties
        Room2.setFirstVisit(
                "You're transported back in time ... you find yourself in Georgia during the midst of a congressional campaign.");
        Room2.setPreAction(
                "There is a campaign poster of Newt Gingrich, the Speaker of the House of Representatives, on the wall, with his large eyes looking right at you.");
        Room2.setPostAction("There is a defaced poster of Newt Gingrich on the wall.");

        // Set Room 3 Properties
        Room3.setFirstVisit(
                "You open the door and step in. It looks exactly like your own bedroom from back at home for some reason...");

        // Set Room 4 Properties
        Room4.setFirstVisit("You get transported to a Nickleback concert. Better get out quick!");

        // Set Room 5 Properties
        Room5.setFirstVisit(
                "You get teleported onto the death star. You can hear darth vader breathing heavily somewhere...");

        // Set Room 6 Properties
        Room6.setFirstVisit("You find yourself in a frozen tundra. you must be in Antartica or something...");

        // Set Room 7 Properties
        Room7.setFirstVisit(
                "You find yourself walking into a scene where the cast of Monty Python's Flying Circus is performing the "Crunchy Frog" sketch. You see the confectioner as he replies, "If we took the bones out it wouldn't be crunchy now, would it?");
        Room7.setPreAction(
                "You see a box of "Crunchy Frog" chocolates, the contents of which contains a dozen nicely cleaned whole frogs that have been carefully hand-dipped in the finest chocolate.");
        Room7.setPostAction(
                "There's an onpen box of "Crunchy Frog" Chocolates with one of the frogs missing its leg");

        // Set Room 8 Properties
        Room8.setFirstVisit("You open the door into a room that's pure white. The door you came through dissapears.");

        // Set Room 9 Properties
        Room9.setFirstVisit(
                "As you step through the time portal, your head begins to spin you're disoriented and then awaken. You find yourself at the outside door of a dormitory kitchen. Listening, you hear the Chef yelling, "Stop! Stop!" while several cats inside are singing a serenade of the "Meow Mix" commercial theme. Suddenly, the repeated thump of a cleaver puts an abrupt end to the music.");

        // Set Room 10 Properties
        Room10.setFirstVisit(
                "You are in the kitchen. Looking out into the cafeteria, you see students reaching for Pepto-Bismol while trying to stomach the latest version of the Chef's Surprise. You see the Chef as he finishes dumping fresh meat into his 50-quart stewing pot.");
        Room10.setPreAction(
                "There are clumps of cat hair on the butcher's block. You hear the Chef muttering to himself, "Prepared properly, cat tastes much like chicken..."");
        Room10.setPostAction("There's strands of cat hair all over the floor, and the kitchen smells foul!");
    }

    public void Play() {
        Scanner sc = new Scanner(System.in);
        System.out.println(Room1.getIntro());
        while(allIngredients == false){
            System.out.println("What would you like to do?");
            String Question = sc.nextLine();
            if(Question.equalsIgnoreCase("quit")){
            System.exit(0);
        }
            if(Question.toLowerCase().contains("move")||Question.toLowerCase().contains("go")){
                Question = (Question.replaceAll(" ",""));
                move(Question);
            }
            }

    }

    private void move(String question) {
        if()

    }

}

EDIT: So to link the rooms, would this be a good way to link them? if the user enters, north, south, east, or west, the directions are actually associated with the room that is in that direction. Here's an example of one of the rooms doing this:

public class Room6 {
Room4 north; 
Room8 south; 
Room1 west; 
Room9 east; 
}

Create a player object that holds a reference to the room the player is in.

public class Player {
  Room currentLocation;
  ...
}

As others have pointed out, rooms have to be connected to each other in a way. Again, you can add references to the "Room" object, like room_north, room_south, ....

Your question is really hard to answer more precisely, because your code sample is so far away from a working game. I hope my attempt is helpful for you.


Well the idea that comes to mind would be to create a node structure between the rooms, and add a pointer to the player class.

For Example:

public class Player {
    Room r;

    public Player() {
        r = new Room(/*Implementation of the room*/);
    }
}

public class Room {
    Room left;
    Room right;
    Room up;
    Room down;
    boolean Locked;

    public Room(Room up, Room down, Room left, Room right, boolean status) {
        this.up = up;
        this.down = down;
        this.left = left;
        this.right = right;
        Locked = status;
    }

    public Room getLeft() {
        return left;  //Return the left node of this current node
    }

    public boolean roomIsLocked() {
        return Locked;
    }

    //Or to see if you can move
    public boolean canMoveLeft() {
        if (getLeft() != null)
            return getLeft().isThisRoomOpen();
        return false;
    }

    public boolean canMoveDown(){
        if (getDown() != null)
            return getDown().isThisRoomOpen();
        return false;
    }
}

Using this type of structure you can use the players "getRoom()" method to get the room the player is in, and then you can also create "getLeft" ect. for the Room class so that when you want to move your player you can say something along the lines:

player.setRoom(player.getRoom().getLeft());
链接地址: http://www.djcxy.com/p/32032.html

上一篇: 将分配给对象的变量更改为另一个对象?

下一篇: 跟踪Java冒险游戏中的房间?