ver 0.0.1 Starcraft - 11

ver 0.0.1 Starcraft - 11

💡 학습 목표
여기 까지 배웠던 부분의 핵심 개념들을 활용해 보자.

zealot

package starcraft.ver01;

public class Zealot {

	private String name;
	private int power;
	private int hp;
	
	public Zealot(String name) {
		this.name = name;
		power = 5;
		hp = 80;
	}
	

	// 질럿이 저글링을 공격합니다.
	public void attackZergling(Zergling z) {
		System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
		z.beAttacked(this.power);
	}
	
	// 질럿이 마린을 공격합니다.
	public void attackMarin(Marine m) {
		System.out.println("[" + this.name + "]이 [" + m.getName() + "]을 공격합니다.");
		m.beAttacked(this.power);
	}
	
	// 자신이 공격을 당합니다.
	public void beAttacked(int power) {
		// 방어적 코드 작성
		// 80 -- 75 == 5
		// 5 - 75 == 
		if (hp <= 0) {
			System.out.println("[" + this.name + "] 이미 사망하였습니다.");
			return;
		}
		hp -= power;
		if (hp < 0) hp = 0;
	}
	
	public void showInfo() {
		System.out.println("==== 상태창 ====");
		System.out.println("이름 : " + this.name);
		System.out.println("공격력 : " + this.power);
		System.out.println("생명력 : " + this.hp);
	}
	// getter
	public String getName() {
		return name;
	}
	public int getPower() {
		return power;
	}
	public int getHp() {
		return hp;
	}
	
	
	public void setName(String name) {
		this.name = name;
	}
	
	public void setPower(int power) {
		this.power = power;
	}
	
	public void setHp(int hp) {
		this.hp = hp;
	}
}

zergling

package starcraft.ver01;

public class Zergling {

	private String name;
	private int power;
	private int hp;
	
	public Zergling(String name) {
		this.name = name;
		power = 3;
		hp = 50;
	}
	
	// 저글링이 질럿을 공격합니다.
	public void attackZealot(Zealot z) {
		System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
		z.beAttacked(this.power);
	}
	// 저글링이 마린을 공격합니다.
	public void attackMarin(Marine m) {
		System.out.println("[" + this.name + "]이 [" + m.getName() + "]을 공격합니다.");
		m.beAttacked(this.power);
	}
	public void showInfo() {
		System.out.println("==== 상태창 ====");
		System.out.println("이름 : " + this.name);
		System.out.println("공격력 : " + this.power);
		System.out.println("생명력 : " + this.hp);
	}
	

	// 자신이 공격을 당합니다.
	public void beAttacked(int power) {
		// 방어적 코드 작성
		if (hp <= 0) {
			System.out.println("[" + this.name + "] 이미 사망하였습니다.");
			return;
		}
		hp -= power;
		if (hp < 0)
			hp = 0;
	}

	// get, set - 단축키 alt + shift + s
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getPower() {
		return power;
	}

	public void setPower(int power) {
		this.power = power;
	}

	public int getHp() {
		return hp;
	}

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

}

Marine

package starcraft.ver01;

public class Marine {

	private String name;
	private int power;
	private int hp;
	
	public Marine(String name) {
		this.name = name;
		power = 4;
		hp = 70;
	}

	// 마린이 질럿을 공격합니다.
	public void attackZealot(Zealot z) {
		System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
		z.beAttacked(this.power);
	}

	// 마린이 저글링을 공격합니다.
	public void attackZergling(Zergling z) {
		System.out.println("[" + this.name + "]이 [" + z.getName() + "]을 공격합니다.");
	}

	// 자신이 공격을 당합니다.
	public void beAttacked(int power) {
		// 방어적 코드 작성
		if (hp <= 0) {
			System.out.println("[" + this.name + "] 이미 사망하였습니다.");
			return;
		}
		hp -= power;
		if (hp < 0)
			hp = 0;
	}
	public void showInfo() {
		System.out.println("==== 상태창 ====");
		System.out.println("이름 : " + this.name);
		System.out.println("공격력 : " + this.power);
		System.out.println("생명력 : " + this.hp);
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getPower() {
		return power;
	}

	public void setPower(int power) {
		this.power = power;
	}

	public int getHp() {
		return hp;
	}

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

}

test1 ( 생성해보고 공격 메소드 사용)

package starcraft.ver01;

public class StarCraftTest1 {

	public static void main(String[] args) {

		// 질럿 2
		Zealot zealot1 = new Zealot("질럿1");
		Zealot zealot2 = new Zealot("질럿2");
		// 마린 2
		Marine marine1 = new Marine("마린1");
		Marine marine2 = new Marine("마린2");
		// 저글링 2
		Zergling zergling1 = new Zergling("저글링1");
		Zergling zergling2 = new Zergling("저글링2");

		for (int i = 0; i < 15; i++) {
			zealot1.attackMarin(marine2);
		}
		marine2.showInfo();
		
	}

}

게이트웨이, 해처리, 배럭

package starcraft.ver01;

public class GateWay {

	private int gateWayNumber;
	private int count;
	
	public GateWay(int gateWayNumber) {
		this.gateWayNumber = gateWayNumber;
	}
	public int getCount() {
		return count;
	}
	public int getGateWayNumber() {
		return gateWayNumber;
	}
	
	// 기능 - 질럿 생산하는 기능을 만들어 보세요
	public Zealot createZealot(String name) {
		count++;
		return new Zealot(name);
	}
	
}

package starcraft.ver01;

public class Hatchery {

	private int hatcheryNumber;
	private int count;
	
	public Hatchery(int hatcheryNumber) {
		this.hatcheryNumber = hatcheryNumber;
	}

	public int getHatcheryNumber() {
		return hatcheryNumber;
	}

	public int getCount() {
		return count;
	}
	
	public Zergling createZergling(String name) {
		count++;
		return new Zergling(name);
	}
}

package starcraft.ver01;

public class Barracks {

	private int barracksNumber;
	private int count;
	
	public Barracks(int number) {
		this.barracksNumber = number;
	}
	
	public int getBarracksNumber() {
		return barracksNumber;
	}
	public int getCount() {
		return count;
	}
	public Marine createMarine(String name) {
		count++;
		return new Marine(name);
	}
}

test2 (각각의 생산기지에서 생산해보기)

package starcraft.ver01;

import java.util.Scanner;

public class StarCraftTest2 {

	public static void main(String[] args) {

		final int ZEALOT = 1;
		final int MARINE = 2;
		final int ZERGLING = 3;
		final int GAME_END = 0;
		
		GateWay gateWay1 = new GateWay(1);
		GateWay gateWay2 = new GateWay(2);
		Hatchery hatchery1 = new Hatchery(1);
		Hatchery hatchery2 = new Hatchery(2);
		Barracks barracks1 = new Barracks(1);
		Barracks barracks2 = new Barracks(2);
		
		Zealot zealot1 = gateWay1.createZealot("질럿1");
		Zealot zealot2 = gateWay1.createZealot("질럿2");
		System.out.println(gateWay1.getGateWayNumber() + " : " + gateWay1.getCount());
		System.out.println(gateWay2.getGateWayNumber() + " : " + gateWay2.getCount());
		System.out.println("-----------------------------------------");
		Zergling zergling1 = hatchery1.createZergling("저글링1");
		Zergling zergling2 = hatchery2.createZergling("저글링2");
		System.out.println(hatchery1.getHatcheryNumber() + " : " + hatchery1.getCount());
		System.out.println(hatchery2.getHatcheryNumber() + " : " + hatchery2.getCount());
		System.out.println("-----------------------------------------");
		Marine marine1 = barracks2.createMarine("마린1");
		Marine marine2 = barracks2.createMarine("마린2");
		System.out.println(barracks1.getBarracksNumber() + " : " + barracks1.getCount());
		System.out.println(barracks2.getBarracksNumber() + " : " + barracks2.getCount());
		System.out.println("-----------------------------------------");
		
		
		
		Scanner sc = new Scanner(System.in);
		int unitChoice = -1;
		do {
			System.out.println("유닉을 선택하세요");
			System.out.println("1.질럿\t 2.마린\t 3.저글링\t 0.게임종료");
			unitChoice = sc.nextInt();
			
			if (unitChoice == ZEALOT) {
				
			} else if (unitChoice == MARINE) {
				
			} else if (unitChoice == ZERGLING) {
				
			} else {
				System.out.println("프로그램을 종료 합니다.");
				unitChoice = GAME_END;
			}
			System.out.println("값 확인 : " + unitChoice);
		} while(unitChoice != GAME_END);
		
		
		
		
		sc.close();
	} // end of main

} // end of class

Java 객체지향 핵심 - 2 으로 돌아가기

 

'Java > Java 객체 지향 핵심' 카테고리의 다른 글

팀 프로젝트 연습 fantasy  (0) 2024.04.18
static 변수 - 12  (0) 2024.04.18
this 3가지 사용 방법 - 10  (0) 2024.04.18
접근 제어 지시자 - 9  (0) 2024.04.17
클래스 설계 자유 실습  (0) 2024.04.17