대상을 위한 프로그램 설계-성 게임

30504 단어
대상을 위한 프로그램 설계 - 자바 언어 절강대학 옹케
성 게임 프레임워크 + 데이터, 프로그램, 필기
옹케 선생님의 모과 과정, 자바 진급 과정 중의 성 게임, 원본 다운로드 가능: 성 게임 원본 다운로드 B 사이트 안내: 과정 후속에 원본 코드를 일련의 개조를 했습니다. 여기에 제 프로그램을 놓았습니다. 과정을 따라가지 못한 학생들은 참고할 수 있습니다. 프로그램 다운로드(추출: tvhd) 저는 캐슬의 가방을 놓았습니다.학생들이 직접 폴더를 새로 만들고 다운로드한 가방을 src에 넣어야 합니다.나는 프로그램에서 몇 가지 필기를 했으니, 비교적 이해하기 쉬울 것이다.
나도 신출내기라서 부족하면 함께 토론할 수 있기를 바란다
밑에 제 프로그램 올려주세요.
게임 클래스
package castle;

import java.util.HashMap;
import java.util.Scanner;

public class Game {
	private Room current_room;
	private HashMap<String, Handler> handlers = new HashMap<String,Handler>();
	
	//    ,game new         ,  handlers          
	// this    new   game
	public Game() {
		setRoom();
		//        new   value    ,              
		//    this.go\this.help,  key        ,bye     ,        
		handlers.put("go", new HandlerGo(this));
		handlers.put("help", new HandlerHelp(this));
		handlers.put("bye", new HandlerBye(this));
	}
	
	//      
	public void setRoom() {
		//       
		Room outside = new Room("   ");
		Room lobby = new Room("  ");;
		Room study = new Room("  ");
		Room bedroom = new Room("  ");
		Room pub = new Room("   ");
		
		//          ,           
		outside.setExit("east", lobby);
		outside.setExit("south", study);
		outside.setExit("west", pub);
		lobby.setExit("west", outside);
		study.setExit("north", outside);
		study.setExit("east", bedroom);
		bedroom.setExit("west", study);
		pub.setExit("east", outside);		
		lobby.setExit("up", pub);
		pub.setExit("down", lobby);
		
		current_room=outside;
	}
	
	//   :         、                 
	public void print_info(Room current_room) {
		System.out.println("    :"+current_room);
		System.out.print("     :");
		
		System.out.println(current_room.getExitDescription());
	}
		
	//     
	public void welcome() {
		System.out.println("        !");
		System.out.println("       help。");
		
		print_info(current_room);		
	}
	
	//       ,           ,     ,    HandlerGo   
	public void goGame(String direction) {
		Room next_room = current_room.nextRoomDetermine(direction);
       //      ,        
		if(next_room==null)
		{
			System.out.println("      !");
		}
		else
		{
			current_room=next_room;
			print_info(current_room);
			
		}
		
	}
	
	//         
	public void run() {
		
		Scanner in=new Scanner(System.in);
		while (true) {
			String[] order = in.nextLine().split(" ");//             
			Handler handler = handlers.get(order[0]);//      value         handler,              
			String value="";
			if(order.length>1)
			{
				value = order[1];
			}
			if(handler!=null)
			{
				// value    : (help\bye)、  (go direction)
				// doCmd  help go    ,  handler       (     )
				handler.doCmd(value);//    order[1],       ArrayIndexOutOfBoundsException
				// bye     isBye,     HandlerBye     
				if(handler.isBye())//              ,      false
				{
					break;
				}				
			}
			
		}
		in.close();		
	}

	public static void main(String[] args) {
		Game game = new Game();
		game.welcome();
		
		game.run();

		System.out.println("      。  !");
	}

}


Room 클래스
package castle;

import java.util.HashMap;

public class Room {
	private String description;
	//       
	private HashMap<String, Room> exits=new HashMap<String,Room>();// 
	
	// print       
	public Room(String description) {
		this.description = description;
	}	
	
	//            ,               ---        
	public void setExit(String direction, Room room) {
		exits.put(direction, room);
	}

	//       map,     ,  map       ,               
	public String getExitDescription() {
		StringBuffer sb = new StringBuffer();
		
		for(String dir : exits.keySet())
		{
			sb.append(dir);
			sb.append(" ");
		}
		
		return sb.toString();
	}
	
	//   direction   ,      ,          
	public Room nextRoomDetermine(String direction) {
		
		return exits.get(direction);

	}
	
	@Override
	public String toString() {
		return description;
	}
}


Handler 클래스
package castle;

public class Handler {
	
	protected Game game;

	public Handler(Game game) {
		this.game = game;
	}

	public void doCmd(String direction) {		
	}

	public boolean isBye() {
		return false;
	}
}


HandlerBye 클래스
package castle;

public class HandlerBye extends Handler{

	public HandlerBye(Game game) {
		super(game);
	}
	
	@Override
	public boolean isBye() {
		return true;
	}
}


HandlerHelp 클래스
package castle;

public class HandlerHelp extends Handler {
	
	public HandlerHelp(Game game) {
		super(game);
	}
	
	@Override
	public void doCmd(String direction) {
		System.out.println("         :help,bye,go(  go east)");
	}
}


HandlerGo 클래스
package castle;

public class HandlerGo extends Handler {

	public HandlerGo(Game game) {
		super(game);
	}
	
	@Override
	public void doCmd(String direction) {
		game.goGame(direction);
	}
	

}

좋은 웹페이지 즐겨찾기