본문 바로가기
혼자서 개발새발

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

by 휴일이 2022. 10. 5.

 

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

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

 

 

 

 

아참!

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

 

 

 

 

조상 클래스

 

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