- [Java] 23. 개념 응용하기: 함수와 메서드를 이용한 응용문제2024년 04월 16일
- Song hyun
- 작성자
- 2024.04.16.:49
728x90반응형응용 문제 1.
객체 지향 프로그래밍의 개념을 응용하여, 간단한 게임을 만들어보자.
(1) Warrior, Magician, Archer 총 3개의 클래스를 만들어라.
(2) 3개의 클래스를 인스턴스화하고, 각각 초기화해라.
(3) 사용받은 값에 따라 직업을 선택하고, 몬스터와 전투한 뒤 체력에 따라 승리/패배를 출력하는 코드를 작성해라.
풀이 과정.
1. 클래스 파일 생성
(1) Warrior, Magician, Archer 총 3개의 클래스 파일을 생성하고,
(2) 각각의 클래스에 이름, 레벨, 체력, 힘, 돈, 크리티컬과 같은 요소들을 변수로 선언한다.
(3) 사용자의 정보를 입력받아 쓸 수 있게끔 사용자 지정 생성자를 만든다.
(4) 다른 캐릭터를 공격할 때, 공격 받았을 때, 레벨업 할 때, 상태창을 볼 때 등의 경우를 메서드로 작성한다.
2. 실행 파일 작성
(1) 작성한 클래스, 메서드들을 실험해볼 TestBattleSituation을 메인 함수와 함께 생성한다.
(2) 사용자가 입력받은 값에 따라 캐릭터를 선택할 수 있게 하고(1,2,3)
(3) 선택한 캐릭터를 호출한 뒤,
(4) 전투 시뮬레이션을 시작한다.
(5) 전투 시뮬레이션은 총 3개의 선택지로 구성되어 있는데, (전투, 도망, 종료)
(5)-1. 전투를 선택 시, 선택한 캐릭터에 맞는 공격력을 바탕으로 적 몬스터를 공격하게 한다.
(ex: a 캐릭터 때릴 때의 메서드+b캐릭터 맞을 때의 메서드)
(5)-2. 도망을 선택 시, 돈(money 변수)을 0으로 초기화하고, 캐릭터 선택 화면으로 돌아간다.
(5)-3. 종료를 선택 시, break, flag=false를 통해 if 문과 반복문을 종료하게끔 한다.
(6) (1)~(5)까지의 코드를 while문으로 감싸, 전투 실행을 반복할 수 있게끔 한다.
(7) critical이 10 이상 쌓이거나, 전투에서 승리 시 레벨업을 통해 체력, 힘, 돈이 추가되게끔 한다.
Warrior 클래스
package basic.ch09; public class Warrior { String name; int level; int health; int power; int money; int critical; public Warrior(String A, int a, int b, int c) { name = A; level = a; health = b; power = c; critical = 0; } // 상태창 public void checkMe() { System.out.println("---- 상태창 ----"); System.out.println(" 닉네임: " + name); System.out.println(" 레벨: " + level); System.out.println(" HP: " + health); System.out.println(" MP: " + power); System.out.println(" 소지금: " + money); System.out.println("------***------"); } public void showInfo() { System.out.println(" HP: " + health); System.out.println(" MP: " + power); } // 전사 공격하기 public void hit(Warrior warrior) { power -= 3; warrior.health -= 15; critical++; System.out.println(name + "가 검을 휘둘렀다!"); System.out.println(critical + " 콤보!"); System.out.println(warrior.name + "는 15의 데미지를 입었다."); } // 마법사 공격하기 public void hit(Magician magician) { power -= 3; magician.health -= 15; critical++; System.out.println(name + "가 검을 휘둘렀다!"); System.out.println(critical + " 콤보!"); System.out.println(magician.name + "는 15의 데미지를 입었다."); } // 궁수 공격하기 public void hit(Archer archer) { power -= 3; archer.health -= 15; critical++; System.out.println(name + "가 검을 휘둘렀다!"); System.out.println(critical + " 콤보!"); System.out.println(archer.name + "는 15의 데미지를 입었다."); } // 전사-맞았을 때 public void attackedWa() { health -= 15; } // 마법사-맞았을 때 public void attackedMa() { health -= 30; } // 궁수-맞았을 때 public void attackedAr() { health -= 15; } // 도망치기 public void run() { System.out.println("무서워서 그만 도망쳐 버렸다!"); System.out.println("가진 돈을 모두 잃었다..."); critical = 0; money = 0; } // 전투 후 리셋 public void reSet(Warrior warrior) { this.health = 30; this.power = 30; } // 레벨업 public void levelUp() { if (critical >= 10) { level++; health += 30; power += 30; money += 10; System.out.println("레벨이 올라갔다!"); checkMe(); } } }
Magician 클래스 파일
package basic.ch09; public class Magician { String name; int level; int health; int power; int money; int critical; public Magician(String A, int a, int b, int c) { name = A; level = a; health = b; power = c; critical = 0; } // 상태창 public void checkMe() { System.out.println("---- 상태창 ----"); System.out.println(" 닉네임: " + name); System.out.println(" 레벨: " + level); System.out.println(" HP: " + health); System.out.println(" MP: " + power); System.out.println(" 소지금: " + money); System.out.println("------***------"); } public void showInfo() { System.out.println(" HP: " + health); System.out.println(" MP: " + power); } // 전사 공격하기 public void hit(Warrior warrior) { power -= 3; warrior.health -= 20; critical++; System.out.println(name + "가 주문을 외웠다!"); System.out.println(critical + " 콤보!"); System.out.println(warrior.name + "는 15의 데미지를 입었다."); } // 마법사 공격하기 public void hit(Magician magician) { power -= 3; magician.health -= 15; critical++; System.out.println(name + "가 주문을 외웠다!"); System.out.println(critical + " 콤보!"); System.out.println(magician.name + "는 15의 데미지를 입었다."); } // 궁수 공격하기 public void hit(Archer archer) { power -= 3; archer.health -= 15; critical++; System.out.println(name + "가 주문을 외웠다!"); System.out.println(critical + " 콤보!"); System.out.println(archer.name + "는 15의 데미지를 입었다."); } // 전사-맞았을 때 public void attackedWa() { health -= 15; } // 마법사-맞았을 때 public void attackedMa() { health -= 30; } // 궁수-맞았을 때 public void attackedAr() { health -= 15; } // 도망치기 public void run() { System.out.println("무서워서 그만 도망쳐 버렸다!"); System.out.println("가진 돈을 모두 잃었다..."); critical = 0; money = 0; } // 레벨업 public void levelUp() { if (critical >= 10) { level++; health += 30; power += 30; money += 10; System.out.println("레벨이 올라갔다!"); checkMe(); } } }
Archer 클래스 파일
package basic.ch09; public class Archer { String name; int level; int health; int power; int money; int critical; public Archer(String A, int a, int b, int c) { name = A; level = a; health = b; power = c; critical = 0; } // 상태창 public void checkMe() { System.out.println("---- 상태창 ----"); System.out.println(" 닉네임: " + name); System.out.println(" 레벨: " + level); System.out.println(" HP: " + health); System.out.println(" MP: " + power); System.out.println(" 소지금: " + money); System.out.println("------***------"); } public void showInfo() { System.out.println(" HP: " + health); System.out.println(" MP: " + power); } // 전사 공격하기 public void hit(Warrior warrior) { power -= 3; warrior.health -= 15; critical++; System.out.println(name + "가 화살을 쐈다!"); System.out.println(critical + " 콤보!"); System.out.println(warrior.name + "는 15의 데미지를 입었다."); } // 마법사 공격하기 public void hit(Magician magician) { power -= 3; magician.health -= 15; critical++; System.out.println(name + "가 화살을 쐈다!"); System.out.println(critical + " 콤보!"); System.out.println(magician.name + "는 15의 데미지를 입었다."); } // 궁수 공격하기 public void hit(Archer archer) { power -= 3; archer.health -= 15; critical++; System.out.println(name + "가 화살을 쐈다!"); System.out.println(critical + " 콤보!"); System.out.println(archer.name + "는 15의 데미지를 입었다."); } // 전사-맞았을 때 public void attackedWa() { health -= 15; } // 마법사-맞았을 때 public void attackedMa() { health -= 30; } // 궁수-맞았을 때 public void attackedAr() { health -= 15; } // 도망치기 public void run() { System.out.println("무서워서 그만 도망쳐 버렸다!"); System.out.println("가진 돈을 모두 잃었다..."); critical = 0; money = 0; } // 레벨업 public void levelUp() { if (critical >= 10) { level++; health += 30; power += 30; money += 10; System.out.println("레벨이 올라갔다!"); checkMe(); } } }
실행 파일
package basic.ch09; import java.util.Scanner; public class BattleSituation { public static void main(String[] args) { Warrior warrior1 = new Warrior("홍길동", 1, 100, 30); Archer archer1 = new Archer("임꺽정", 1, 60, 70); Magician magician1 = new Magician("마법사", 1, 30, 100); Warrior warrior2 = new Warrior("지나가는 오크", 1, 30, 30); boolean flag = true; while (flag) { System.out.println("----------------"); System.out.println("게임을 시작합니다."); System.out.println(); warrior2.reSet(warrior2); System.out.println("----------------"); System.out.println("캐릭터를 선택하세요."); System.out.println("1. 전사 / 2. 마법사 / 3. 궁수"); Scanner sc = new Scanner(System.in); int choice = sc.nextInt(); System.out.println("----------------"); System.out.println(); if (choice == 1) { System.out.println("전사를 선택했습니다."); System.out.println("전투를 시작합니다."); System.out.println("----------------"); System.out.println(); warrior1.checkMe(); System.out.println(); boolean keep = (warrior1.health) > 0; while (keep) { System.out.println("무엇을 할까요?"); System.out.println("1.공격하기 / 2.도망치기 / 3.종료하기"); System.out.println(); int choice2 = sc.nextInt(); if (choice2 == 1) { warrior1.hit(warrior2); System.out.println(); System.out.println(); if (warrior1.health < 0) { System.out.println("이런, 전투에서 패배했다..."); System.out.println("가진 돈을 모두 잃었다."); System.out.println("마을로 돌아가자."); warrior1.money = 0; warrior1.checkMe(); break; } else if (warrior1.critical == 10) { warrior1.levelUp(); System.out.println(); } else if (warrior2.health <= 0) { System.out.println("야호! 전투에서 승리했다!"); System.out.println(); warrior1.levelUp(); warrior1.checkMe(); break; } warrior2.hit(warrior1); System.out.println("이런!" + warrior1.health + "만큼의 체력이 남았다."); System.out.println(); } else if (choice2 == 2) { warrior1.run(); warrior1.checkMe(); break; } else { System.out.println("전투를 종료합니다."); warrior1.checkMe(); flag = false; break; } } } if (choice == 2) { System.out.println("마법사를 선택했습니다."); System.out.println("전투를 시작합니다."); System.out.println("----------------"); System.out.println(); magician1.checkMe(); System.out.println(); boolean keep = (magician1.health) > 0; while (keep) { System.out.println("무엇을 할까요?"); System.out.println("1.공격하기 / 2.도망치기 / 3.종료하기"); System.out.println(); int choice2 = sc.nextInt(); if (choice2 == 1) { magician1.hit(warrior2); System.out.println(); System.out.println(); if (magician1.health <= 0) { System.out.println("이런, 전투에서 패배했다..."); System.out.println("가진 돈을 모두 잃었다."); System.out.println("마을로 돌아가자."); magician1.money = 0; magician1.checkMe(); break; } else if (magician1.critical == 10) { magician1.levelUp(); System.out.println(); } else if (warrior2.health <= 0) { System.out.println("야호! 전투에서 승리했다!"); System.out.println(); warrior1.levelUp(); magician1.checkMe(); break; } warrior2.hit(magician1); System.out.println("이런!" + magician1.health + "만큼의 체력이 남았다."); System.out.println(); } else if (choice2 == 2) { magician1.run(); magician1.checkMe(); break; } else { System.out.println("전투를 종료합니다."); magician1.checkMe(); flag = false; break; } } } if (choice == 3) { System.out.println("궁수를 선택했습니다."); System.out.println("전투를 시작합니다."); System.out.println("----------------"); System.out.println(); archer1.checkMe(); System.out.println(); boolean keep = (archer1.health) > 0; while (keep) { System.out.println("무엇을 할까요?"); System.out.println("1.공격하기 / 2.도망치기 / 3.종료하기"); System.out.println(); int choice2 = sc.nextInt(); if (choice2 == 1) { archer1.hit(warrior2); System.out.println(); System.out.println(); if (archer1.health <= 0) { System.out.println("이런, 전투에서 패배했다..."); System.out.println("가진 돈을 모두 잃었다."); System.out.println("마을로 돌아가자."); archer1.money = 0; archer1.checkMe(); break; } else if (archer1.critical == 10) { archer1.levelUp(); System.out.println(); } else if (warrior2.health <= 0) { System.out.println("야호! 전투에서 승리했다!"); System.out.println(); archer1.levelUp(); magician1.checkMe(); break; } warrior2.hit(archer1); System.out.println("이런!" + archer1.health + "만큼의 체력이 남았다."); System.out.println(); } else if (choice2 == 2) { archer1.run(); archer1.checkMe(); break; } else { System.out.println("전투를 종료합니다."); archer1.checkMe(); flag = false; break; } } } } } }
728x90반응형'Java > 기본 개념 및 클래스' 카테고리의 다른 글
[Java] 25. getter/setter 메서드 (0) 2024.04.17 [Java] 24. 접근 제어 지시자와 정보 은닉 (0) 2024.04.17 [Java] 22. 객체 지향 패러다임 (0) 2024.04.16 [Java] 21. 생성자: 기본 생성자와 사용자 정의 생성자 (0) 2024.04.16 [Java] 20. 함수, 인스턴스화, 메서드 연습 문제 (0) 2024.04.16 다음글이전글이전 글이 없습니다.댓글