사용자로부터 자신과 상대방 캐릭터 정보를 입력받아 게임 결과를 출력하는 코드를 작성해보았다.
<주요기능>
1. 게임에서 필요한 정보를 가진 캐릭터 클래스(객체) 정의
2. 자신과 상대방의 정보를 입력받아 출력 -> Scanner, 배열 활용
3. 한번 공격시 상대방 체력에서 (나의 공격력/상대방의 방어력)을 감소시키고, 상대방 체력이 0 이하이면 게임을 종료함 -> while 문 사용
단편적으로 기능 구현에 초점을 맞춰서 private 등 접근 제어자는 사용하지 않고 코드를 작성했다.
객체지향적인 코드 작성을 위해서는 필요한 부분을 캡슐화하고 getter, setter를 활용해 정보를 다루는 방식도 연습이 필요할 것 같다.
[게임 캐릭터 클래스 및 관련 메서드 정의]
package game;
import java.util.Scanner;
class LoL_char { // TRPG 게임 캐릭터 클래스
Scanner scanner = new Scanner(System.in);
String name;
String ad;
String def;
String hp;
void user_info(String name, String ad, String def, String hp) { // 입력받은 정보를 객체에 저장
this.name = name;
this.ad = ad;
this.def = def;
this.hp = hp;
}
String[] user_create() { // 유저 정보를 입력받는 메서드
System.out.println("[시스템] 유닛 [이름] 을 입력해 주세요 : ");
name = scanner.next();
System.out.println("[시스템] 유닛 [공격력] 을 입력해 주세요 : (Ex 50) ");
ad = scanner.next();
System.out.println("[시스템] 유닛 [방어력] 을 입력해 주세요 : (Ex 1) ");
def = scanner.next();
System.out.println("[시스템] 유닛 [체력] 을 입력해 주세요 : (Ex 100) ");
hp = scanner.next();
user_info(name, ad, def, hp);
return new String[]{name, ad, def, hp};
}
void user_print(String[] user) { // 유저 정보를 출력하는 메서드
System.out.println("[안내] 생성된 유닛 정보는 다음과 같습니다.");
System.out.printf("[안내] %s 유닛이 게임에 참여하였습니다.\n", user[0]);
System.out.printf("[공격력] : %s\n", user[1]);
System.out.printf("[방어력 : %s\n", user[2]);
System.out.printf("[체력] : %s\n", user[3]);
}
int[] user_info_int(String[] info) { // 유저 정보를 int형 배열로 변환하는 메서드
int[] intUser = new int[3];
for (int i = 1; i < info.length; i++) {
intUser[i - 1] = Integer.parseInt(info[i]);
}
return intUser;
}
void attack(int[] me_info_int, int[] enemy) { // 상대방을 공격하는 메서드
while (enemy[2] > 0) {
System.out.printf("[안내] [%s]유닛이 [공격] 하였습니다.\n", name);
enemy[2] = enemy[2] - me_info_int[0] / enemy[1];
System.out.printf("[안내] 상대 유닛의 남은 [체력]은 %d입니다.\n", enemy[2]);
System.out.println("-".repeat(30));
}
System.out.println("[안내] 더 이상 공격할 수 없습니다.");
System.out.println();
System.out.println("상대 유닛이 제거되었습니다.");
}
}
[게임 실행부]
package game;
public class LOL_Program {
public static void main(String[] args) { // 게임 실행
LoL_char myId = new LoL_char();
LoL_char enemyId = new LoL_char();
System.out.println("[안내] TRPG 스타크래프트 시작합니다.");
System.out.println("[안내] 자신의 유닛 정보를 입력해 주세요.");
String[] myIdArray = myId.user_create(); // 내 정보를 입력받아 문자열 배열로 저장
myId.user_print(myIdArray); // 내 정보 출력
System.out.println("=".repeat(30));
System.out.println("[안내] 상대방의 유닛 정보를 입력해 주세요.");
String[] enemyIdArray = enemyId.user_create(); // 상대방 정보를 입력받아 문자열 배열로 저장
enemyId.user_print(enemyIdArray); // 상대 정보 출력
System.out.println("=".repeat(30));
int[] myIdInt = myId.user_info_int(myIdArray);
int[] enemyIdInt = enemyId.user_info_int(enemyIdArray); // 숫자 계산을 위해 int로 형변환
myId.attack(myIdInt, enemyIdInt); // 공격 실행해서 상대방 체력 0 이하로 떨어지면 게임 종료
}
}
[입출력결과]
[안내] TRPG 스타크래프트 시작합니다.
[안내] 자신의 유닛 정보를 입력해 주세요.
[시스템] 유닛 [이름] 을 입력해 주세요 :
고양이
[시스템] 유닛 [공격력] 을 입력해 주세요 : (Ex 50)
50
[시스템] 유닛 [방어력] 을 입력해 주세요 : (Ex 1)
10
[시스템] 유닛 [체력] 을 입력해 주세요 : (Ex 100)
30
[안내] 생성된 유닛 정보는 다음과 같습니다.
[안내] 고양이 유닛이 게임에 참여하였습니다.
[공격력] : 50
[방어력 : 10
[체력] : 30
==============================
[안내] 상대방의 유닛 정보를 입력해 주세요.
[시스템] 유닛 [이름] 을 입력해 주세요 :
강아지
[시스템] 유닛 [공격력] 을 입력해 주세요 : (Ex 50)
20
[시스템] 유닛 [방어력] 을 입력해 주세요 : (Ex 1)
10
[시스템] 유닛 [체력] 을 입력해 주세요 : (Ex 100)
30
[안내] 생성된 유닛 정보는 다음과 같습니다.
[안내] 강아지 유닛이 게임에 참여하였습니다.
[공격력] : 20
[방어력 : 10
[체력] : 30
==============================
[안내] [고양이]유닛이 [공격] 하였습니다.
[안내] 상대 유닛의 남은 [체력]은 25입니다.
------------------------------
[안내] [고양이]유닛이 [공격] 하였습니다.
[안내] 상대 유닛의 남은 [체력]은 20입니다.
------------------------------
[안내] [고양이]유닛이 [공격] 하였습니다.
[안내] 상대 유닛의 남은 [체력]은 15입니다.
------------------------------
[안내] [고양이]유닛이 [공격] 하였습니다.
[안내] 상대 유닛의 남은 [체력]은 10입니다.
------------------------------
[안내] [고양이]유닛이 [공격] 하였습니다.
[안내] 상대 유닛의 남은 [체력]은 5입니다.
------------------------------
[안내] [고양이]유닛이 [공격] 하였습니다.
[안내] 상대 유닛의 남은 [체력]은 0입니다.
------------------------------
[안내] 더 이상 공격할 수 없습니다.
상대 유닛이 제거되었습니다.
'미니 프로젝트' 카테고리의 다른 글
알고리즘 - Blob 크기 구하기(재귀) (0) | 2023.03.22 |
---|---|
알고리즘 - 미로 출구찾기(재귀) (0) | 2023.03.22 |
글자 대체 프로그램 - 배열, for 반복문 (0) | 2023.03.11 |
계산기 만들기 - switch, do-while, ArrayList (0) | 2023.03.11 |