본문 바로가기
언어(Language)/[자바] 객체지향 프로그래밍 기초

텍스트 스타크래프트 프로그램 만들기

by 쿠키쿠 2023. 4. 29.
  • 목적

- class 적용 연습

 

  • 출력 예시 : 

 

  • 슈도 코드

- 외부 클래스를 선언하고 공격력, 방어력, 체력, 이름에 필요한 인스턴스 변수들 생성, 단 임의로 수정하는 것을 막기 위해 private 연산자를 이용하고 각각의 getter 메서드 만들기

- 메인 메서드에서 유저와 상대방의 유닛 정보 입력 및 출력 -> 입력 부분은 Scanner 클래스를 이용 

- 상대방의 체력이 0 이하가 되면 0으로 출력하고 종료시키기 -> 반복문과 조건문 이용하기 

 

  • 작성된 코드
package chap_00_복습용;

import java.util.Scanner;

public class StarCraft {
    public static void main(String[] args) {
        Unit userUnit = new Unit();
        Unit enemyUnit = new Unit();

        System.out.println("[안내] TRPG 스타크래프트 시작합니다.\n[안내] 자신의 유닛 정보를 입력해 주세요.");

        userUnit.createUnit();
        userUnit.aboutUnit();

        System.out.println("========================================");
        System.out.println("[안내] 상대 유닛 정보를 입력해 주세요.");

        enemyUnit.createUnit();
        enemyUnit.aboutUnit();
        System.out.println("========================================");

        int userAttack = userUnit.getAttack(); // 유저 유닛의 공격력
        int enemyDefence = enemyUnit.getDefence(); // 적 유닛의 방어력
        int enemyHP = enemyUnit.getHp(); // 적 유닛의 HP

        // 유저 유닛이 적 유닛을 공격 시 적 유닛의 남은 HP 구하기
        while (enemyHP > 0) {
            System.out.println("[안내] [" + userUnit.getName() + "] 유닛이 [공격]하였습니다.");
            enemyHP = (enemyHP + enemyDefence) - userAttack;
            if (enemyHP > 0) {
                System.out.println("[안내] 상태 유닛의 남은 [체력]은 " + enemyHP + " 입니다.");
            } else {
                System.out.println("[안내] 상대 유닛의 남은 [체력]은 0 입니다.");
            }
        }
        System.out.println("========================================");
        System.out.println("[안내] 더 이상 공격할 수 없습니다.");
        System.out.println();
        System.out.println("[안내] 상대 유닛이 제거되었습니다.");
    }
}

class Unit {
    private String name;
    private int attack;
    private int defence;
    private int hp;

    Scanner sc = new Scanner(System.in);

    // 유닛 만들기 -> 공격력, 방어력, 체력 입력
    void createUnit() {
        System.out.print("[시스템] 유닛 [이름] 을 입력해 주세요 : ");
        this.name = sc.nextLine();

        System.out.print("[시스템] 유닛 [공격력] 을 입력해 주세요 : ");
        this.attack = sc.nextInt();

        System.out.print("[시스템] 유닛 [방어력] 을 입력해 주세요 : ");
        this.defence = sc.nextInt();

        System.out.print("[시스템] 유닛 [체력] 을 입력해 주세요 : ");
        this.hp = sc.nextInt();
        System.out.println();
    }

    // 유닛 정보 불러오기 ->  공격력, 방어력, 체력
    void aboutUnit() {
        System.out.println("[안내] 생성된 유닛 정보는 다음과 같습니다.");
        System.out.println("[안내] " + this.name + " 유닛이 게임에 참여하였습니다.");
        System.out.println("[공격력] : " + this.attack);
        System.out.println("[방어력] : " + this.defence);
        System.out.println("[체력] : " + this.hp);
    }

    public String getName() {
        return name;
    }

    public int getAttack() {
        return attack;
    }

    public int getDefence() {
        return defence;
    }

    public int getHp() {
        return hp;
    }
}

 

  • 출력 결과