내일배움캠프/TIL

[JAVA]_클래스 기초 다시 익히기

cork-7 2025. 1. 14. 21:17

 

package craft;

import java.util.Random;


public class Main {
    public static void main(String[] args) {
		// 객체생성으로 3개의 객체를 만듬
        Unit marine = new Unit("Marine", 20, 5, 6, 1, "Terran Unit");
        Unit zealot = new Unit("Zealot", 30, 10, 8, 1, "Protoss Unit");
        Unit zergling = new Unit("Zergling", 15, 10, 5, 1, "Zerg Unit");
		// 질럿의 피가 0이 될 때까지 공격
        while (zealot.getHp() > 0) {
            marine.attack(zealot); //target은 zealot
        }
		
        // 각 객체의 정보를 출력
        marine.printInfo();
        System.out.println();

        zealot.printInfo();
        System.out.println();

        zergling.printInfo();

		// 0부터 20까지의 랜덤수가 생성되고 그 숫자에 맞게 객체들이 움직임
        Random random = new Random();
        int randomInt = random.nextInt(20) + 1;
        System.out.println(randomInt); // 랜덤수 출력
        System.out.println();
		

        for (int i = 0; i < randomInt; i++) {
            String direction = random.nextBoolean() ? "left" : "right";// >>true,false
            marine.move(direction);
            zealot.move(direction);
            zergling.move(direction);
        }
    }
}
package craft;

public class Unit {
    private String name; // 유닛명
    private int hp; // 유닛 체력
    private int speed; // 유닛 속도
    private int damage; // 유닛 공격력
    private int position; // 유닛 위치
    private String description; // 유닛 정보
    
	// 생성자
    public Unit(String name, int hp, int speed, int damage, int position, String description) {
        this.name = name;
        this.hp = hp;
        this.speed = speed;
        this.damage = damage;
        this.position = position;
        this.description = description;
    }

    public String getName() {
        return this.name;
    }

    public int getHp() {
        return this.hp;
    }

    public int getDamage() {
        return this.damage;
    }

    public void setHp(int hp) {
        this.hp = hp;
    }

    // move 메서드 생성
    public void move(String direction) {
    
        // 방향은 어떤걸로 받을 지는 정의를 내려야함
        if (direction.equals("left")) {
            this.position -= 1;
        } else if (direction.equals("right")) {
            this.position += 1;
            System.out.println(this.getName() + "유닛이 " + direction + "방향으로 이동합니다.");
            System.out.println();

        }
        System.out.println(this.name + "의 현재 위치는 " + this.position + "입니다.");
        System.out.println();
    }

	// 여기서의 target은 따로 지정한것이 아닌 말 그대로 Unit객체를 뜻함 
    // 따라서  공격하는 unit.attack(공격받는 unit)으로 작성하면됨
    public void attack(Unit target) {
        if (target.getHp() <= 0) {
            System.out.println(target.getName() + "은 죽어 있습니다.");
            return;
        }
        System.out.println(this.getName() + "이 " + target.getName() + "유닛을 공격합니다.");
        
        // 타겟의 피를 감소하는 코드 > 타겟을 hp를 가져오는 getter, 유닛 공격력을 가져오는 getter ,hp를 감소시키는 setter
        target.setHp(target.getHp() - this.getDamage());

        if (target.getHp() == 0){
            System.out.println(target.getName() + "이 사망했습니다.");
        } else if (target.getHp() >= 0 ) {
            System.out.println(target.getName() + "이 " + this.damage + "의 데미지를 입었습니다");
            System.out.println(target.getHp() - this.getDamage());
        }
        //if문으로 분기처리
        //if문으로 타켓 피가 0이면 사망했다고 문구나오고 안때림
    }
    public void printInfo() {
        System.out.println("유닛명 : " + this.name + " \n체력 : " + this.hp + " \n속도 : " + this.speed + " \n공격력 : " + this.damage + " \n위치 : " + this.position + " \n특징 : " + this.description);
    }
}

 

 

기초를 다시 익히는 과정에서 클래스의 구조에 대해 조금이마나 더 이해가 된것 같고 내일부터 다시 키오스크 과제를 집중적으로 다뤄보고

필수과정을 끝내고서 unit 4단계를 진행해보자