안녕하세요.


지난시간에 상속에 대한 개념을 잡았으니 이번 시간에는 기존의 슬라임 클래스를 상속받은 블루슬라임 클래스를 만들어보도록 하겠습니다.




자, 설명 들어갈게요.


생성자는 지난시간하고 동일하니 또 설명 안드려도 될 것 같네요.


생성자 아래에 치료함수를 추가해줬습니다. 인수로 슬라임을 지정해서 자기 자신을 포함한 모든 슬라임을 치료할 수 있도록 했습니다. (만약 슬라임 대신에 블루슬라임을 넣으면 나중에 만들 예정인 '레드슬라임'은 치료가 불가능해집니다)


47행의 조건문은 자신의 체력과 치료받을 슬라임의 체력이 모두 0보다 커야된다는 조건입니다.


그리고 51행의 조건문은 치료후의 체력이 80을 넘으면 원래 체력을 초과해버리는 것이기 때문에 80으로 재조정하는 내용입니다.



이제 메인클래스에서 블루슬라임을 사용해봐야겠죠?



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// Study01.java
 
package study;
 
import java.awt.Font;
import java.util.Enumeration;
 
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.plaf.FontUIResource;
 
public class Study01 {
 
    // 라벨 변수 선언
    static JLabel lbl, lbl2;
 
    // ★ 슬라임과 인간 객체 생성
    static BlueSlime bs1 = new BlueSlime("슬라삐");
    static BlueSlime bs2 = new BlueSlime("슬라디");
    static Human h = new Human("알렉스");
 
    public static void main(String[] args) {
 
        // [start] 디자인 코드
 
 
        // 모든 글꼴 통일
        Enumeration<Object> keys = UIManager.getDefaults().keys();
        while (keys.hasMoreElements()) {
            Object key = keys.nextElement();
            Object value = UIManager.get(key);
            if (value instanceof FontUIResource)
                UIManager.put(key, new FontUIResource("굴림", Font.PLAIN, 14));
        }
 
        // [start] 프레임 설정
        JFrame frm = new JFrame();
        frm.setTitle("슬라임 퇴치하기");
        frm.setSize(350350);
        frm.setLocationRelativeTo(null);
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frm.getContentPane().setLayout(null);
        // [end] 프레임 설정
 
        // [start] ★ 버튼 설정
        JButton btn1 = new JButton(bs1.name);
        JButton btn2 = new JButton(bs2.name);
        btn1.setBounds(3017012230);
        btn2.setBounds(18217012230);
        frm.getContentPane().add(btn1);
        frm.getContentPane().add(btn2);
        // [end] 버튼 설정
 
        // 라벨 설정
        lbl = new JLabel();
        lbl.setBounds(3021027450);
        lbl.setText("게임을 시작합니다");
        lbl.setHorizontalAlignment(JLabel.CENTER); // 수평 가운데 정렬
        frm.getContentPane().add(lbl);
 
        // 라벨2 설정
        lbl2 = new JLabel();
        lbl2.setBounds(3024027450);
        lbl2.setText(h.name + "의 체력은 " + h.hp + "입니다");
        lbl2.setHorizontalAlignment(JLabel.CENTER); // 수평 가운데 정렬
        frm.getContentPane().add(lbl2);
 
        // [start] 이미지 라벨 생성
        JLabel imgLbl = new JLabel();
        ImageIcon bsImg = new ImageIcon(Study01.class.getResource("/study/img/slime(blue).png"));
        imgLbl.setIcon(bsImg);
        imgLbl.setBounds(3030122130);
        imgLbl.setHorizontalAlignment(JLabel.CENTER);
        frm.getContentPane().add(imgLbl);
        // [end]
 
        // [start] 이미지 라벨2 생성
        JLabel imgLbl2 = new JLabel();
        imgLbl2.setIcon(bsImg);
        imgLbl2.setBounds(18230122130);
        imgLbl2.setHorizontalAlignment(JLabel.CENTER);
        frm.getContentPane().add(imgLbl2);
        // [end]
 
        // 프레임이 보이도록 설정
        frm.setVisible(true);
 
        // [end]
 
        // ★ 버튼을 눌렀을때
        btn1.addActionListener(event -> {
 
            battle(bs1);
 
        });
 
        btn2.addActionListener(event -> {
 
            battle(bs2);
 
        });
 
    }
 
    public static void battle(BlueSlime bs) {
 
        // ★ 슬라임이 살아있을때만 공격
        if (bs.hp < 1) {
 
            lbl.setText(bs.name + "는 이미 죽어있다\n");
 
        } else {
 
            h.attack(bs);
            bs.heal(bs);
 
        }
 
        // ★ 슬라임이 모두 죽으면 게임 클리어
        if (bs1.hp < 1 && bs2.hp < 1) {
 
            JOptionPane.showMessageDialog(lbl2, "Game Clear!");
            System.exit(0);
        }
 
    }
 
}
 
cs


이렇게 되겠죠. s, s1, s2 앞에 모두 b가 붙은 점 유의해주세요.


이제 실행해봅시다.




치료함수가 잘 작동되는군요^^


근데 한가지 의문이 드는 분들이 계실지 모르겠습니다. 애초에 블루슬라임 클래스를 바로 만들어서 name부터 heal까지 다 설계해놓으면 될것을, 굳이 번거롭게 슬라임 클래스부터 먼저 만들어서 상속받게 해놓을 필요가 있는가... 하는 의문요.


다음시간에는 이 의문을 풀어보겠습니다.


감사합니다.


+ Recent posts