혼자서 개발새발

JAVA) 상속을 이용해 다마고치 만들기!

휴일이 2022. 10. 5. 22:56

 

선생님이 상속을 배우면 다마고치를 만들어볼거라고 해서

자습 시간에 혼자 예습한 상속을 이용해 한번 만들어보았다 ㅋㅋㅋ

 

 

 

 

아참!

이번엔 인텔리제이 툴을 이용해보았다ㅎㅎ

 

 

 

 

조상 클래스

 

import java.util.Scanner;

public class MonsterVO {

    private int level; //레벨
    private int ex; //경험치
    private String mon;

    public String getMon() {
        return mon;
    }

    public void setMon(String mon) {
        this.mon = mon;
    }

    Scanner sc = new Scanner(System.in);

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
    }

    public int getEx() {
        return ex;
    }

    public void setEx(int ex) {
        this.ex = ex;
    }

    public int getEnergy() {
        return energy;
    }

    public void setEnergy(int energy) {
        this.energy = energy;
    }

    private int energy; //에너지
    private String tribe; //종족


    MonsterVO() {
        super();

    }
    public void printStet() {
        System.out.println(mon+"의 레벨 : "+level+" 경험치 : "+ex+" 에너지 : "+energy);
    }

    public void eat() {
        System.out.println("밥을 먹었습니다");
        energy+=20;
        ex++;
        levelUp();
        printStet();
    }

    public void sleep() {
        System.out.println("잠을 잡니다");
        energy+=20;
        ex++;
        levelUp();
        printStet();
    }

    public void play() {
        System.out.println("놀아주었습니다");
        energy-=20;
        ex++;
        levelUp();
        printStet();
        dead();
    }

    public void workout() {
        System.out.println("운동을 합니다");
        energy-=20;
        ex++;
        levelUp();
        printStet();
        dead();
    }

    public void levelUp() {
        if(ex==3) {
            System.out.println("레벨 업!");
            printStet();
            level++;
            ex=0;
        }
    }
    public void dead() {
        if(energy<=0) {
            System.out.println("사망했습니다");
            System.exit(0);
        }
    }



    public void PlayGames(Scanner sc) {
        boolean flag = true;
        int i = 0;
        while (flag) {
            System.out.println("1.밥먹기 2.재우기 3.놀아주기 4.운동 5.종료");
            i = sc.nextInt();
            switch (i) {
                case 1:
                    eat();
                    break;
                case 2:
                    sleep();
                    break;
                case 3:
                    play();
                    break;
                case 4:
                    workout();
                    break;
                case 5:
                    System.out.println("게임 종료");
                    break;
            }
        }
    }
}

 

 

자손 클래스들

 

 

public class Picachoo extends MonsterVO {


    Picachoo() {

        super();
        super.setMon("피카츄");
        super.setEx(0);
        super.setEnergy(50);
        super.setLevel(0);

    }



}

 

public class Ggobugi extends MonsterVO {


    Ggobugi() {

        super();
        super.setMon("꼬부기");
        super.setEx(0);
        super.setEnergy(40);
        super.setLevel(0);

    }

}

 

public class Isanghae extends MonsterVO {

    Isanghae() {

        super();
        super.setMon("이상해씨");
        super.setEx(0);
        super.setEnergy(40);
        super.setLevel(0);

    }

}

 

 

 

메인

 

import java.util.Scanner;

public class PlayMain {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int a=0;

        System.out.println("1.피카츄");
        System.out.println("2.꼬부기");
        System.out.println("3.이상해씨");
        System.out.print("캐릭터 선택 : ");

        a = sc.nextInt();

        boolean flag = true;
        if(a==1) { //피카츄 선택
            Picachoo p = new Picachoo();
            p.PlayGames(sc);
        } else if(a==2) { //꼬부기 선택
            Ggobugi g = new Ggobugi();
            g.PlayGames(sc);
        } else if(a==3) { //이상해씨 선택
            Isanghae i = new Isanghae();
            i.PlayGames(sc);
        }

    }
}

 

 

결과

 

좋은 만남이었다 꼬부기야...

 

 

시간이 더 있었으면 좀 더 깔끔하게 만들 수 있었을 것 같다...!!

다음에 학원 과제로 만들면

좀 더 다듬어서 만들어봐야겠다!!

 

 

오늘 유튜브 영상으로 강의를 듣다가

상속을 통해 확장이 예상되면,

private 대신 protected 접근 제어자를 써도 괜찮다고 한다

protected -> 같은 패키지 또는 자손클래스(다른 패키지도 가능)만 접근 가능

얘는 어차피 같은 클래스여서 private 썼는데

다음엔 protected로 만들어봐야겠다!

728x90