안녕하세요.
일단 휴먼 클래스 코드를 보시죠.
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에다가 마우스 포인터를 갖다대고 컨트롤을 누른 상태에서 클릭하면 어택함수가 정의된 곳으로 순간이동합니다^^
그런데말입니다. 인풋박스를 취소할때마다 뜨는 에러 어떻게 안될까요? 일일이 정지버튼을 누르기도 번거럽죠? 다음 시간에는 이 점을 해결해보도록 하겠습니다.
감사합니다.
'자바로 게임 만들기' 카테고리의 다른 글
[자바로 게임 만들기] 36. 에러를 방지하자(null값과 빈값) 2 (0) | 2019.02.01 |
---|---|
[자바로 게임 만들기] 35. 에러를 방지하자(null값과 빈값) (0) | 2019.01.29 |
[자바로 게임 만들기] 33. 코드 성형수술(리팩토링과 객체인수) (0) | 2019.01.25 |
[자바로 게임 만들기] 32. 난 여기서 나가야겠어(break) (3) | 2019.01.24 |
[자바로 게임 만들기] 31. 무한반복의 수레바퀴(while문) (0) | 2019.01.23 |