안녕하세요.
지난시간에 상속에 대한 개념을 잡았으니 이번 시간에는 기존의 슬라임 클래스를 상속받은 블루슬라임 클래스를 만들어보도록 하겠습니다.
자, 설명 들어갈게요.
생성자는 지난시간하고 동일하니 또 설명 안드려도 될 것 같네요.
생성자 아래에 치료함수를 추가해줬습니다. 인수로 슬라임을 지정해서 자기 자신을 포함한 모든 슬라임을 치료할 수 있도록 했습니다. (만약 슬라임 대신에 블루슬라임을 넣으면 나중에 만들 예정인 '레드슬라임'은 치료가 불가능해집니다)
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(350, 350); 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(30, 170, 122, 30); btn2.setBounds(182, 170, 122, 30); frm.getContentPane().add(btn1); frm.getContentPane().add(btn2); // [end] 버튼 설정 // 라벨 설정 lbl = new JLabel(); lbl.setBounds(30, 210, 274, 50); lbl.setText("게임을 시작합니다"); lbl.setHorizontalAlignment(JLabel.CENTER); // 수평 가운데 정렬 frm.getContentPane().add(lbl); // 라벨2 설정 lbl2 = new JLabel(); lbl2.setBounds(30, 240, 274, 50); 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(30, 30, 122, 130); imgLbl.setHorizontalAlignment(JLabel.CENTER); frm.getContentPane().add(imgLbl); // [end] // [start] 이미지 라벨2 생성 JLabel imgLbl2 = new JLabel(); imgLbl2.setIcon(bsImg); imgLbl2.setBounds(182, 30, 122, 130); 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까지 다 설계해놓으면 될것을, 굳이 번거롭게 슬라임 클래스부터 먼저 만들어서 상속받게 해놓을 필요가 있는가... 하는 의문요.
다음시간에는 이 의문을 풀어보겠습니다.
감사합니다.
'자바로 게임 만들기' 카테고리의 다른 글
[자바로 게임 만들기] 65. 공격력 조정(오버라이드) (0) | 2019.04.05 |
---|---|
[자바로 게임 만들기] 64. 상속의 필요성 (0) | 2019.03.28 |
[자바로 게임 만들기] 62. 말과 유니콘(상속) (0) | 2019.03.26 |
[자바로 게임 만들기] 61. 마돌이의 탄생(생성자 오버로딩) (0) | 2019.03.25 |
[자바로 게임 만들기] 60. 슬라임 퇴치 2탄 완성! (2) | 2019.03.21 |