• JAVA_객체지향프로그래밍, 템플릿 메서드 응용 (게임 레벨)

    2021. 8. 4.

    by. KAEY


      - 해당 코드를 참조만 하시고, 복사 붙여넣기를 통한 과제를 진행하시면 도움이 정말 하나도 안됩니다. 부디 직접해보시고, 다른 사람의 솔루션이 어떤 지 참조하시는 정도로만 사용해주세요.


    Player가 있고, 이 Player가 게임을 합니다.

     

    초보자 레벨 : 달릴 수(run) 있습니다.

    중급자 레벨 : 달리고(run) 점프할(jump) 수 있습니다.

    고급자 레벨 : 달리고(run) 점프하고(jump) 턴(turn)할 수 있습니다.

     

    모든 레벨에서 go(int count) 메소드를 제공합니다.

     

    go()는 한번 run하고, 매개변수로 전달된 count만큼 jump 하고, 한 번 turn 합니다.

    해당 레벨에서 불가능한 기능을 요청하면 할 수 없다는 메시지를 출력합니다.


    Player.java

    package java0804;
    
    public class Player {
    	
    	private PlayerLevel level;
    	
    	public Player(){
    		level= new BeginnerLevel();
    		level.showLevelMessage();
    	}
    	
    	public PlayerLevel getLevel() {
    		return level;
    	}
    	
    	public void upgradeLevel(PlayerLevel level) {
    		this.level = level;
    		level.showLevelMessage();
    	}
    	
    	public void play(int count){
    		level.go(count);
    	}
    
    }

    PlayerLevel.java

    package java0804;
    
    public abstract class PlayerLevel {
    	public abstract void run();
    	public abstract void jump(int count);
    	public abstract void turn();
    	public abstract void showLevelMessage();
    	
    	int count;
    	
    	final public void go(int count) {
    		run();
    		jump(count);
    		turn();
    	}
    }

    MainBoard.java

    package java0804;
    
    public class MainBoard {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Player player = new Player();
    		player.play(1);
    		
    		AdvancedLevel aLevel = new AdvancedLevel();
    		player.upgradeLevel(aLevel);
    		player.play(6);
    		
    		SuperLevel sLevel = new SuperLevel();
    		player.upgradeLevel(sLevel);
    		player.play(3);
    		
    	}
    
    }

    AdvancedLevel.java

    package java0804;
    
    public class AdvancedLevel extends PlayerLevel  {
    	public void run() {
    		System.out.println("천천히 달립니다.");
    	}
    	
    	public void jump(int count) {
    		for(int i = 0; i < count; i++)
    			System.out.println("Jump!");
    	}
    	
    	public void turn() {
    		System.out.println("Turn 할 줄 모르지롱.");
    	}
    	
    	public void showLevelMessage() {
    		System.out.println("***** 어드밴스드 레벨 입니다. *****");
    	}
    }

    BeginnerLevel.java

    package java0804;
    
    public class BeginnerLevel extends PlayerLevel {
    	public void run() {
    		System.out.println("천천히 달립니다.");
    	}
    	
    	public void jump(int count) {
    		System.out.println("Jump 할 줄 모르지롱.");
    	}
    	
    	public void turn() {
    		System.out.println("Turn 할 줄 모르지롱.");
    	}
    	
    	public void showLevelMessage() {
    		System.out.println("***** 초보자 레벨 입니다. *****");
    	}
    }

    SuperLevel.java

    package java0804;
    
    public class SuperLevel extends PlayerLevel {
    	public void run() {
    		System.out.println("천천히 달립니다.");
    	}
    	
    	public void jump(int count) {
    		for(int i = 0; i < count; i++)
    			System.out.println("Jump!");
    	}
    	
    	public void turn() {
    		System.out.println("Super Turn!");
    	}
    	
    	public void showLevelMessage() {
    		System.out.println("***** 슈퍼 레벨 입니다. *****");
    	}
    
    }

    결과 화면


    댓글 (비로그인 댓글 허용하지 않습니다.)