본문 바로가기
미니 프로젝트

TRPG게임 만들기 - 배열, 형변환(String -> int)

by shyun00 2023. 3. 12.

사용자로부터 자신과 상대방 캐릭터 정보를 입력받아 게임 결과를 출력하는 코드를 작성해보았다.

<주요기능>

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입니다.
------------------------------
[안내] 더 이상 공격할 수 없습니다.

상대 유닛이 제거되었습니다.