코딩항해기

[실습/JAVA] 동물의 숲 주민 만들기 본문

problem solving/과제&실습 코딩

[실습/JAVA] 동물의 숲 주민 만들기

miniBcake 2024. 7. 4. 11:27

 

 

고양이 주민 1호와, 개구리 주민 레이니와 아이다를 만든다.

 

모든 주민은 주민을 상속받는다.

주민은 타입과 이름을 가지고, hello()와 action(도구)을 할 수 있다.

타입(고양이, 개구리 등)은 무조건 존재한다. 이름은 주민을 생성할 때 반드시 설정되어야한다.

hello() : 행복함/무난함/슬픔/화남 중에서 1개를 랜덤으로 출력함

action(도구) : 잠자리채, 낚싯대, 삽을 도구로 받아 곤충채집, 생선낚시, 땅파기를 한다.

 

모든 고양이 주민은 hello() 끝에 ", 야옹"을 붙인다.

모든 개구리 주민은 hello() 끝에 ", 개굴"을 붙인다.

 

[실습코드]

package class02;

import java.util.Random;

class Citizen {
	//필드
	String type; //무조건 있음
	String name; //주민을 생성할 때, 이름을 반드시 설정하며 만들어야함
	static String[] emotion = {"행복하다","무난하다","슬프다","화났다"}; //모두가 갖는 값이므로 static 지정
	static Random rand = new Random();
    //생성자
	Citizen(String type, String name){
		this.type=type;
		this.name=name;
	}
	//메소드
	//감정을 출력하는 메소드
	void hello(){
		System.out.println(randEmotion());
	}
	//감정을 랜덤 지정해주는 메소드
	String randEmotion() {
		return emotion[rand.nextInt(Citizen.emotion.length)];
	}
	//입력받은 도구에 따라 액션을 취하는 메소드
	void action(String equip) {
		String motion;//도구에 따른 행동
		if(equip.equals("잠자리채")) {
			motion = "곤충채집";
		}
		else if(equip.equals("낚싯대")) {
			motion = "생선낚시";
		}
		else if(equip.equals("삽")) {
			motion = "땅파기";
		}
		else {
			System.out.println(equip+" 도구는 사용할 수 없습니다.");
			return;
		}
		System.out.println(this.name+"(이)가 "+equip+"(으)로 "+motion+"(을)를 합니다.");
	}
}

//주민을 상속받는 고양이 클래스
class Cat extends Citizen {
	Cat(String name){
		super("고양이", name);
	}
	@Override
	void hello() {
		System.out.println(randEmotion()+", 야옹~");
	}
}

//주민을 상속받는 개구리 클래스
class Frog extends Citizen {
	Frog(String name){
		super("개구리", name);
	}
	@Override
	void hello() {
		System.out.println(randEmotion()+", 개굴~");
	}
}

public class Test01 {
	public static void main(String[] args) {
		Citizen[] datas = new Citizen[3];
		datas[0] = new Cat("1호");
		datas[1] = new Frog("아이다");
		datas[2] = new Frog("레이니");
		int cnt = 3;
		
		for(int i=0;i<cnt;i++) {
			datas[i].hello();
		}
		
		System.out.println();
		
		datas[0].action("나뭇가지");
		datas[0].action("잠자리채");
		datas[1].action("낚싯대");
		datas[2].action("삽");
	}
}

 

 

String[] emotion = {"행복하다","무난하다","슬프다","화났다"};

Random rand = new Random;

부분을 처음에는 randEmotion에 함께 넣어두었는데, 지도 후 모든 객체가 공통되는 부분이므로 static으로 뺐다.

static부분을 좀 더 고려하면 좋을 것 같다.

(new의 경우 사용될 때마다 heap메모리에 공간이 할당되므로 많이 사용하지 않는 편이 좋다)