0

私はこのZuulGamefor classに取り組んでおり、currentRoom変数をGameクラスからPlayerクラスにリファクタリングする必要があります。ほとんどのコードにはかなり自信がありますが、シンボルが見つかりません-コンパイルしようとするとメソッドエラーが発生し続けます。助けてください。

ゲームクラスは次のとおりです。

class Game {
    private Parser parser;
    private Scenario scenario;

    /**
     * Create the game and initialise its internal map.
     */
    public Game() {
        scenario = new Scenario();
        parser = new Parser();
    }

    /**
     *  Main play routine.  Loops until end of play.
     */
    public void play() {
        printWelcome();

        // Enter the main command loop.  Here we repeatedly read commands and
        // execute them until the game is over.

        boolean finished = false;
        while (!finished) {
            Command command = parser.getCommand();
            finished = processCommand(command);
        }
        System.out.println("Thank you for playing.  Good bye.");
    }

    /**
     * Print out the opening message for the player.
     */
    private void printWelcome() {
        System.out.println();
        System.out.println("Welcome to the world of Zuul!");
        System.out.println("Zuul is a new, incredibly boring adventure game.");
        System.out.println("Type 'help' if you need help.");
        System.out.println();
        System.out.println(getCurrentRoom().getLongDescription());
    }

    /**
     * Given a command, process (that is: execute) the command.
     * If this command ends the game, true is returned, otherwise false is
     * returned.
     */
    private boolean processCommand(Command command) {
        boolean wantToQuit = false;

        if (command.isUnknown()) {
            System.out.println("I don't know what you mean...");
            return false;
        }

        String commandWord = command.getCommandWord();
        if (commandWord.equals("help"))
            printHelp();
        else if (commandWord.equals("go"))
            goRoom(command);
        else if (commandWord.equals("quit")) {
            wantToQuit = quit(command);
        }
        return wantToQuit;
    }

    // implementations of user commands:

    /**
     * Print out some help information.
     * Here we print some stupid, cryptic message and a list of the 
     * command words.
     */
    private void printHelp() {
        System.out.println("You are lost. You are alone. You wander");
        System.out.println("around at the university.");
        System.out.println();
        System.out.println("Your command words are:");
        parser.showCommands();
    }

    /** 
     * Try to go to one direction. If there is an exit, enter the new
     * room, otherwise print an error message.
     */
    private void goRoom(Command command) {
        if (!command.hasSecondWord()) {
            // if there is no second word, we don't know where to go...
            System.out.println("Go where?");
            return;
        }

        String direction = command.getSecondWord();

        // Try to leave current room.
        Room nextRoom = getCurrentRoom().getExit(direction);

        if (nextRoom == null)
            System.out.println("There is no door!");
        else {
            getCurrentRoom() = nextRoom;
            System.out.println(getCurrentRoom().getLongDescription());
        }
    }

    /** 
     * "Quit" was entered. Check the rest of the command to see
     * whether we really quit the game. Return true, if this command
     * quits the game, false otherwise.
     */
    private boolean quit(Command command) {
        if (command.hasSecondWord()) {
            System.out.println("Quit what?");
            return false;
        } else
            return true; // signal that we want to quit
    }
}

これはプレイヤークラスです:

public class Player {
    private Room currentRoom;

    /**
     * Constructor for objects of class Player
     */
    public Player() {
        currentRoom = getBeginRoom();
    }

    /**
     * Sets the current room that the player is in.
     */
    public void setCurrentRoom(Room room) {
        currentRoom = room;
    }

    /**
     * Returns the current room that the player is in.
     */
    public Room getCurrentRoom() {
        return currentRoom;
    }
}

そして、これがシナリオクラスです。

public class Scenario {
    private List rooms; // List of all rooms in the game
    private Room beginRoom;
    private Random random;

    /**
     * Create a complete scenario (with all rooms).
     */
    public Scenario() {
        Room outside, theatre, pub, lab, office, transporter;

        // create the rooms
        outside = new Room("outside the main entrance of the university");
        theatre = new Room("in a lecture theatre");
        pub = new Room("in the campus pub");
        lab = new Room("in a computing lab");
        office = new Room("in the computing admin office");
        transporter = new TransporterRoom("in a dark place", this);

        // initialise room exits
        outside.setExit("east", theatre);
        outside.setExit("south", lab);
        outside.setExit("west", pub);

        theatre.setExit("west", outside);
        theatre.setExit("north", transporter);

        transporter.setExit("south", theatre);

        pub.setExit("east", outside);

        lab.setExit("north", outside);
        lab.setExit("east", office);

        office.setExit("west", lab);

        beginRoom = outside; // start game outside

        rooms = new ArrayList();
        rooms.add(outside);
        rooms.add(theatre);
        rooms.add(pub);
        rooms.add(lab);
        rooms.add(office);
        rooms.add(transporter);

        random = new Random();
    }

    /**
     * Return the room where players start the game.
     */
    public Room getBeginRoom() {
        return beginRoom;
    }

    /**
     * Return a random room in this game.
     */
    public Room getRandomRoom() {
        return (Room) rooms.get(random.nextInt(rooms.size()));
    }
}

ありがとうございました!

4

2 に答える 2

1

クラスは、Playerのインスタンスではなく、それ自体(または見えない場所に静的にインポートされた静的メソッド)Gameを呼び出しています。getCurrentRoom

于 2013-02-28T18:41:12.810 に答える
0

クラスパスにこれらの各ファイルへのパスがあることを確認してください。

于 2013-02-28T18:38:24.177 に答える