java/코드 리뷰

10. oop5 - (1) Starcraft Demo (추상클래스)

Astaroth아스 2020. 4. 2. 20:17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package oop5;
/**
 * 1
 * @author HYB
 *
 */
 // 추상 클래스 정의
public abstract class Unit {
    String name;
    
    void move() {
        System.out.println("[" + name + "] 이 지정된 포인트로 이동합니다.");
    }
    
    // 추상 메서드 정의
    abstract void attack();
    
}
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package oop5;
/**
 * 2
 * @author HYB
 *
 */
public class Marine extends Unit {
    
    @Override
    void attack() {
        System.out.println("[" + name + "]은 적을 총으로 사살합니다.");
        
    }
    
}
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package oop5;
/**
 * 3
 * @author HYB
 *
 */
public class Firebat extends Unit {
    
    @Override
    void attack() {
        System.out.println("[" + name + "]은 화염으로 적을 사살합니다.");
        
    }
    
}
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package oop5;
/**
 * 4
 * @author HYB
 *
 */
public class Ghost extends Unit {
 
    @Override
    void attack() {
        System.out.println("[" + name + "]은 자신을 감추고 적을 공격합니다.");
 
    }
    
}
 
 
1
2
3
4
5
6
7
8
9
10
package oop5;
 
public class Overload extends Unit{
    
    // 수행문이 없어도 메서드 몸체만 있으면 구현 메서드다
    @Override
    void attack() {}
    
}
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package oop5;
 
public class Starcraft {
    
    Unit[] units = new Unit[200];
    int unitCount = 0;
    
    void addUnit(Unit unit) {
        units[unitCount] = unit;
        unitCount++;
        System.out.println(unit.name + "이 추가되었습니다. [현재 총 유닛수 = " + unitCount + "]");
    }
    
    void click() {
        for (int i=0; i<unitCount; i++) {
            Unit unit = units[i];
            unit.move();
        }
    }
    
    void clickA() {
        for (int i=0; i<unitCount; i++) {
            Unit unit = units[i];
            unit.attack();
        }
    }
    
}
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package oop5;
 
public class Play {
    public static void main(String[] args) {
        
        Starcraft starcraft = new Starcraft();
 
        Marine u1 = new Marine();
        u1.name = "마린";
        starcraft.addUnit(u1);
 
        Marine u2 = new Marine();
        u2.name = "마린";
        starcraft.addUnit(u2);
 
        Ghost u3 = new Ghost();
        u3.name = "고스트";
        starcraft.addUnit(u3);
 
        Firebat u4 = new Firebat();
        u4.name = "파이어뱃";
        starcraft.addUnit(u4);
        
        // 이동
        starcraft.click();
 
        // 공격
        starcraft.clickA();
        
    }
}