冒险类的基于文本的冒险游戏

时间:2016-04-29 23:38:37

标签: java oop

在我的游戏中,我写了几个课程,包括房间,灯,胸部,java,播放器,按键和地图。这些都已经过测试并且是正确的,所以现在我正在写我的冒险课,这是该计划的驱动程序。我需要将球员的位置设置为[0] [0],我无法弄清楚如何。这是我到目前为止在我的房间和冒险课上所拥有的。

public class Adventure {

    Scanner in = new Scanner(System.in);
    private Room room;

    public Adventure() {
        Player player = new Player();
        Map map = new Map();
        player.setX(0);
        player.setY(0);
        int x = 0;
        int y = 0;
        map.getRoom(x, y).getDescription(); 
    }
}

public class Room {

    private String description;
    private boolean north;
    private boolean south;
    private boolean east;
    private boolean west;
    private boolean isDark;

    private Lamp theLamp;
    private Key theKey;
    private Chest theChest;

    /**
     * Returns the text description of this room
     */
    public String getDescription() {
        return description;
    }

    /**
     * Returns true if the player can go north from this room
     */
    public boolean canGoNorth() {
        return north;
    }

    /**
     * Returns true if the player can go south from this room
     */
    public boolean canGoSouth() {
        return south;
    }

    /**
     * Returns true if the player can go east from this room
     */
    public boolean canGoEast() {
        return east;
    }

    /**
     * Returns true if the player can go west from this room
     */
    public boolean canGoWest() {
        return west;
    }

    /**
     * Returns the lamp object in this room.
     * If no lamp is present, returns null
     */
    public Lamp getLamp() {
        return theLamp;
    }

    /**
     * Sets the lamp variable in this room to null
     */
    public void clearLamp() {
        theLamp = null;
    }

    /**
     * Returns the key object in this room. 
     * If no key is present, returns null
     */
    public Key getKey() {
        return theKey;
    }

    /**
     * Sets the key variable in this room to null
     */
    public void clearKey() {
        theKey = null;
    }

    /**
     * Returns the chest object in this room.
     * If no chest is present, returns null
     */
    public Chest getChest() {
        return theChest;
    }

    /**
     * Returns true if there is no light in this room,
     * veeeeeeeery dangerous!
     */
    public boolean isDark() {
        return isDark;
    }


    /**
     * Hey wassup dawg?  I'ma constructor.  I make the objects round these parts, 
     * sometimes without even trying, knowwhatimssayin?
     * Yall don't haveta worry 'bout me for this'ere game, but look me up in 
     * Chapter 6 sometime. Kay?
     *   
     */
    public Room(String description, boolean north, boolean south, boolean east,
            boolean west, boolean isDark, Lamp theLamp, Key theKey,
            Chest theChest) {
        super();
        this.description = description;
        this.north = north;
        this.south = south;
        this.east = east;
        this.west = west;
        this.isDark = isDark;
        this.theLamp = theLamp;
        this.theKey = theKey;
        this.theChest = theChest;
    }
}

我必须将房间位置设置为0,0,以便打印出地图类中的描述。

1 个答案:

答案 0 :(得分:0)

您已经拥有Room对象,因此是否真的有必要存储每个房间的X / Y坐标?您可以创建Room对象的结构,这些对象通过North / South / East / West Room对象(如果适用)相互链接。

然后,您可以在播放器类中添加变量,例如" currentRoom"或" location"。包含一个获取和设置此位置的函数,您现在可以设置和访问角色的当前位置。

如果X / Y对你来说非常重要,我想在你的冒险课中你可以创建一个Room对象的二维数组,然后使用X / Y坐标来定位这个结构中的房间(即&# 34; x"可能引用该行," y"指的是用于查找存储在数组中的位置的列。

然而,当你去的时候创建Room对象并通过exit / Room指针将它们链接到其他房间对象可能更容易,更少浪费,更可扩展。

public class Player {
    private Room location = null;
    public void setLocation(Room newLocation) {
        location = newLocation;
    }
}

public class Room {
    private Room NorthExit = null;

    public Room getNorthExit() {
        return NorthExit;
    }

    public setNorthExit(Room newRoom) {
        NorthExit = newRoom;
    }
}


// In main somewhere...
Room room1 = new Room();
Room room2 = new Room();
room1.setNorthExit(room2);

Player player1 = new Player();
player1.setLocation(room1);

您可以在上面的代码中看到我们创建并链接两个房间,如果我们在第一个房间,用户可以将room1设置为他们的位置,并从他们的位置对象访问有关room1的所有信息。我们还可以通过我们的位置对象访问任何相邻的房间,通过每个出口的位置对象/参考。