鱼C论坛

 找回密码
 立即注册
查看: 2667|回复: 2

[已解决]请前辈指点课本题,小游戏一共2个类,初始化对象指对象,对象又指对象

[复制链接]
发表于 2018-12-17 13:46:50 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 wow7jiao 于 2018-12-17 14:07 编辑

package castle;

import java.util.Scanner;

public class Game {
    private Room currentRoom;
        
    public Game()
    {
        createRooms();
    }

    private void createRooms()
    {
        Room outside, lobby, pub, study, bedroom;//-------------------------------------------->请问这些本地变量是不是出了构造函数就没有了?
      
        //        制造房间
        outside = new Room("城堡外");
        lobby = new Room("大堂");
        pub = new Room("小酒吧");
        study = new Room("书房");
        bedroom = new Room("卧室");
        
        //        初始化房间的出口
        outside.setExits(null, lobby, study, pub);//------>这里本地变量初始化有先后顺序要求?
        lobby.setExits(null, null, null, outside);//
        pub.setExits(null, outside, null, null);//
        study.setExits(outside, bedroom, null, null);//
        bedroom.setExits(null, null, null, study);//

        currentRoom = outside;  //        从城堡门外开始-------------------上面的本地变量lobby,pub,study,bedroom是不是相互之间setExits,被成员变量currentRoom揉合在一起,其实最后只初始化了currentRoom。这个outside指向study(Room),study又指向benroom(Room),
    }

    private void printWelcome() {
        System.out.println();
        System.out.println("欢迎来到城堡!");
        System.out.println("这是一个超级无聊的游戏。");
        System.out.println("如果需要帮助,请输入 'help' 。");
        System.out.println();
        System.out.println("现在你在" + currentRoom);
        System.out.print("出口有:");
        if(currentRoom.northExit != null)
            System.out.print("north ");
        if(currentRoom.eastExit != null)
            System.out.print("east ");
        if(currentRoom.southExit != null)
            System.out.print("south ");
        if(currentRoom.westExit != null)
            System.out.print("west ");
        System.out.println();
    }

    // 以下为用户命令

    private void printHelp()
    {
        System.out.print("迷路了吗?你可以做的命令有:go bye help");
        System.out.println("如:\tgo east");
    }

    private void goRoom(String direction)
    {
        Room nextRoom = null;
        if(direction.equals("north")) {
            nextRoom = currentRoom.northExit;
        }
        if(direction.equals("east")) {
            nextRoom = currentRoom.eastExit;
        }
        if(direction.equals("south")) {
            nextRoom = currentRoom.southExit;
        }
        if(direction.equals("west")) {
            nextRoom = currentRoom.westExit;
        }

        if (nextRoom == null) {
            System.out.println("那里没有门!");
        }
        else {
            currentRoom = nextRoom;
            System.out.println("你在" + currentRoom);
            System.out.print("出口有: ");
            if(currentRoom.northExit != null)
                System.out.print("north ");
            if(currentRoom.eastExit != null)
                System.out.print("east ");
            if(currentRoom.southExit != null)
                System.out.print("south ");
            if(currentRoom.westExit != null)
                System.out.print("west ");
            System.out.println();
        }
    }
       
        public static void main(String[] args) {
                Scanner in = new Scanner(System.in);
                Game game = new Game();
                game.printWelcome();

        while ( true ) {
                        String line = in.nextLine();
                        String[] words = line.split(" ");
                        if ( words[0].equals("help") ) {
                                game.printHelp();
                        } else if (words[0].equals("go") ) {
                                game.goRoom(words[1]);
                        } else if ( words[0].equals("bye") ) {
                                break;
                        }
        }
        
        System.out.println("感谢您的光临。再见!");
        in.close();
        }

}
最佳答案
2018-12-17 13:46:51
请问这些本地变量是不是出了构造函数就没有了?
是的。

这里本地变量初始化有先后顺序要求?
我觉得没有。方法调用顺序随便

从城堡门外开始-------------------上面的本地变量lobby,pub,study,bedroom是不是相互之间setExits,被成员变量currentRoom揉合在一起,其实最后只初始化了currentRoom。这个outside指向study(Room),study又指向benroom(Room)
是的,不然对象会被回收

最佳答案

查看完整内容

请问这些本地变量是不是出了构造函数就没有了? 是的。 这里本地变量初始化有先后顺序要求? 我觉得没有。方法调用顺序随便 从城堡门外开始-------------------上面的本地变量lobby,pub,study,bedroom是不是相互之间setExits,被成员变量currentRoom揉合在一起,其实最后只初始化了currentRoom。这个outside指向study(Room),study又指向benroom(Room) 是的,不然对象会被回收
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-17 13:46:51 | 显示全部楼层    本楼为最佳答案   
请问这些本地变量是不是出了构造函数就没有了?
是的。

这里本地变量初始化有先后顺序要求?
我觉得没有。方法调用顺序随便

从城堡门外开始-------------------上面的本地变量lobby,pub,study,bedroom是不是相互之间setExits,被成员变量currentRoom揉合在一起,其实最后只初始化了currentRoom。这个outside指向study(Room),study又指向benroom(Room)
是的,不然对象会被回收
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-17 13:47:28 | 显示全部楼层
package castle;

public class Room {
    public String description;
    public Room northExit;
    public Room southExit;
    public Room eastExit;
    public Room westExit;

    public Room(String description)
    {
        this.description = description;
    }

    public void setExits(Room north, Room east, Room south, Room west)
    {
        if(north != null)
            northExit = north;
        if(east != null)
            eastExit = east;
        if(south != null)
            southExit = south;
        if(west != null)
            westExit = west;
    }

    @Override
    public String toString()
    {
        return description;
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 05:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表