java_HashMap实现简易文字小城堡游戏(封装,继承的练习,低耦合)

界面以及控制端

//城堡游戏
	import java.util.HashMap;
    import java.util.Scanner;

	public class Game {
	    private Room currentRoom;
	    private HashMap<String,Handler> handlers =new HashMap<String ,Handler>();//用于存放指令
	    
	    public Game() 
	    {

	    	handlers.put("bye", new HandlerBye(this));
	    	handlers.put("help", new HandlerHelp(this));
	    	handlers.put("go", new HandlerGo(this));
	    	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.setExit("east", lobby);
	        outside.setExit("south",study);
	        outside.setExit("west",pub);
	        lobby.setExit("west", outside);
	        pub.setExit("east", outside); 
	        study.setExit("east", bedroom);
	        study.setExit("north", outside);
	        bedroom.setExit("west", study);
	        lobby.setExit("up", bedroom);
	        bedroom.setExit("down", lobby);

	        currentRoom = outside;  //	从城堡门外开始
	    }

	    private void printWelcome() {//最开始展示界面
	        System.out.println();
	        System.out.println("欢迎来到城堡!");
	        System.out.println("这是一个超级无聊的游戏。");
	        System.out.println("如果需要帮助,请输入 'help' 。");
	        show();
	    }
	    public void goRoom(String direction) // 输入后的判断房间是否有方位
	    {
	        Room nextRoom = currentRoom.getexit(direction);
	        if (nextRoom == null) {
	            System.out.println("那里没有门!");
	        }
	        else {
	            currentRoom = nextRoom;
	            show();
	        }
	     
	    }
	    
	    private void show() {//展示界面
        	System.out.println("现在你在" + currentRoom);
            System.out.print("出口有: ");
            System.out.print(currentRoom.roomexit());
            System.out.println();
        }
		
	    public void play() {//控制输入输出
	    	Scanner in = new Scanner(System.in);
	    	 while ( true ) {
	        		String line = in.nextLine();
	        		String[] words = line.split(" ");
	        		Handler handler = handlers.get(words[0]);
	        		String value ="";
	        		if(words.length>1) {
	        			value=words[1];
	        		}
	        		if(handler != null) {
	        			handler.doCmd(value);
	        			if(handler.isBye()) {
	        				break;
	        			}
	        		}
	        }
	         in.close();
	    }
	    
		public static void main(String[] args) {
			Game game = new Game();
			game.printWelcome();
            game.play();
	        System.out.println("感谢您的光临。再见!");
		}
}

存储房间以及方向

import java.util.HashMap;

public class Room {//管理房间的方位
    private String description;
    private HashMap<String,Room> exits= new HashMap<String,Room>();
    public Room(String description) 
    {
        this.description = description;
    }

    public void setExit(String dir,Room room)
    {
        exits.put(dir, room);
    }

    @Override
    public String toString()
    {
        return description;
    }
    public String roomexit() {//文字描述
    	StringBuffer sb = new StringBuffer();//存入这个类里可以修改
    	for(String k : exits.keySet()) {
    		sb.append(k);//运行一次后面加一个k
    		sb.append(" ");
    	}
    	return sb.toString();
    }
    public Room getexit(String direction) {//给出方向判断
    
        return exits.get(direction);
    }
}

管理指令的父类

public class Handler {//管理指令的父类 
	protected Game game;
	public Handler(Game game) {
		this.game=game;
	}
	public void doCmd(String word) {}
	public boolean isBye() {
			return false;
	}

}

各个指令子类

public class HandlerBye extends Handler {
	public HandlerBye(Game game) {
		super(game);
	}
	@Override
	public boolean isBye() {
		return true;
	}
}
public class HandlerGo extends Handler {
	public HandlerGo(Game game) {
		super(game);
	}
	@Override
	public void doCmd(String word) {
		game.goRoom(word);
	}
}
public class HandlerHelp extends Handler{
	public HandlerHelp(Game game) {
		super(game);
	}

	@Override
	public void doCmd(String word) {
		System.out.println("迷路了吗?你可以做的命令有:go bye help");
        System.out.println("如:\tgo east");
	}

}

实现图
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值