在Java中设置私有类

时间:2016-04-14 20:41:25

标签: java class private

新用户。

我一直致力于"框架"或者在我的面向对象编程课程中为基于文本的冒险游戏起草。我把它展示给我的TA,他说它看起来不错,但我应该尝试将这个机芯放在自己的私人课堂上。我应该这样做的任何理由?我应该怎么做?

提前感谢您的帮助。

这是我的主要课程的代码:

public class Main {

public static void main(String args[]) {

    // This is where we will build rooms

    // Load inventory
    ArrayList<String> inventory = new ArrayList<>();

    // Start game
    boolean playing = true;

    while (playing) {

        String input = Input.getInput();

        // Movement commands
        if (input.equals("north")) {
            if (y > 0) {
                y--;
                Rooms.print(room, x, y);
            } else {
                System.out.println("You can't go that way.");
            }
        } else if (input.equals("south")) {
            if (y < HEIGHT - 1) {
                y++;
                Rooms.print(room, x, y);
            } else {
                System.out.println("You can't go that way.");
            }
        } else if (input.equals("east")) {
            if (x > 0) {
                x--;
                Rooms.print(room, x, y);
            } else {
                System.out.println("You can't go that way.");
            }
        } else if (input.equals("west")) {
            if (x < WIDTH - 1) {
                x++;
                Rooms.print(room, x, y);
            } else {
                System.out.println("You can't go that way.");
            }
        }

        // Look commands
        else if (input.equals("look")) {
            Rooms.print(room, x, y);
        }

        // Look at item commands
        else if (input.equals("look thing")) {
            //print item description
        }

        /* Take command
        else if statement

        Drop command
        else if statement

        */

        // Inventory commands
        else if (input.equals("i") || input.equals("inv")
                || input.equals("inventory")) {
            Inventory.print(inventory);
        }

        // Quit commands
        else if (input.equals("quit")) {
            System.out.println("Goodbye!");
            playing = false;

        // Catch-all for invalid input
        } else {
            System.out.println("Invalid input");
        }
    }
    System.exit(0);
}

}

2 个答案:

答案 0 :(得分:1)

您希望将该动作置于其自己的类中的一个原因是启用所谓的Separation of Concerns。遵循这一原则,您希望尽可能保持您的课程独特和独特。

随着程序规模和复杂程度的增长,这种方法使调试/开发变得更加容易。

至于将课程私有化,我不知道我一定同意这一点。我只需要创建一个movement类来处理所有与运动相关的函数和数据。将它放在它自己的文件中,该文件与您的主文件分开,但在您的项目中。

您可以针对游戏广告资源,攻击(如果存在),设置等采用相同的方法!

正如我的评论所述: 我可以给你的一个提示是将你的所有System.out.println("You can't go that way.");重构成一个函数并调用它。您正在重复这一行几次,您可能希望稍后更改它,更容易在1函数中执行,而不是查找该字符串的每次出现。

public static void moveError() {
     System.out.println("You can't go that way.");
}

评论中的一些人建议转换为switch语句。我同意这种方法;它不仅更容易看。但也更容易维护。您可以使用作为代码中特定函数的字符串/整数/字符传递的特定“命令”:

switch (direction) {
   case "up":
      // code to move up and error handle
      break;
   case "down":
      // code to move down and error handle
      break;
}

您还可以为拾取项目,调整设置或其他任何您想象的内容实施特定命令。

答案 1 :(得分:0)

也许您的TA要求您将其包含在私人课程中的房间运动功能与您的外部课程完全相关,因此如果独立存在则没有意义。