안녕하세요.


일단 휴먼 클래스 코드를 보시죠.






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Human.java
 
package study;
 
class Human {
 
    String name;
    int hp = 100;
 
    public Human(String n) {
        name = n;
    }
 
    public void attack(Slime s) {
 
        System.out.println("인간은 " + s.name + "를 공격했다");
        s.hp = s.hp - 10;
        System.out.println("현재 " + s.name + "의 체력은 " + s.hp + "이다\n");
        
    }
 
}
 
cs

17행과 18행을 추가해줬습니다.

기존의 방식대로 했다면 이 두행이 슬라임의 객체수만큼 메인함수에 적혀있어서 코드가 복잡해 보였지만 객체인수 기법을 사용하여 휴먼 클래스에 한번만 적어주면 어떤 슬라임을 공격하든 대응이 가능해졌습니다.

이제 슬라임 클래스도 한번 보시죠.




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
// Slime.java
 
package study;
 
import javax.swing.JOptionPane;
 
class Slime {
 
    String name;
    int hp = 80;
 
    // 생성자
    public Slime(String n) {
 
        name = n;
 
    }
 
    // 공격
    public void attack(Human h) {
 
        System.out.println(name + "는 " + h.name + "을 공격했다");
        h.hp = h.hp - 10;
 
        if (h.hp < 1) {
            JOptionPane.showMessageDialog(null"Game Over");
            System.exit(0);
        }
 
        System.out.println("현재 " + h.name + "의 체력은 " + h.hp + "이다\n");
 
    }
 
}
 
cs


이런식으로 메인함수에 써줬던 내용을 넣어줄 수 있습니다.


27행의 함수는 프로그램을 끝내는 함수입니다. 통으로 외우시면 되겠습니다.


마지막으로 스터디01로 가봅시다.





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
// Study01.java
 
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        // 슬라임과 인간 객체 생성
        Slime s1 = new Slime("슬라삐");
        Slime s2 = new Slime("슬라디");
        Human h = new Human("알렉스");
 
        System.out.println(s1.name + "와 " + s2.name + "이 나타났다! 당신의 이름은 " + h.name + "이다\n");
 
        while (true) {
 
            // 인풋박스
            int target = Integer
                    .parseInt(JOptionPane.showInputDialog("어느 슬라임을 공격하겠습니까? 1은 " + s1.name + " 2는 " + s2.name));
 
            if (target == 1) {
 
                // 인간의 공격
                h.attack(s1);
                
                // 슬라임의 반격
                s1.attack(h);
 
            } else if (target == 2) {
 
                h.attack(s2);
                s2.attack(h);
 
            } else {
                
                JOptionPane.showMessageDialog(null"올바른 숫자를 입력하세요");
                
            }
 
        } // while 끝
    }
 
}
 
cs


어떤가요? 코드가 상당히 간결해지고 이해하기 쉬워졌죠? (두번째 슬라임의 이름을 바꿨습니다)


만약에 어택함수의 자세한 내용이 궁금해지면 attack에다가 마우스 포인터를 갖다대고 컨트롤을 누른 상태에서 클릭하면 어택함수가 정의된 곳으로 순간이동합니다^^





그런데말입니다. 인풋박스를 취소할때마다 뜨는 에러 어떻게 안될까요? 일일이 정지버튼을 누르기도 번거럽죠? 다음 시간에는 이 점을 해결해보도록 하겠습니다.


감사합니다.

+ Recent posts