package stars;

// 다크템플러 DarkTempler, 리버 River

class Zealot {
	final String NAME; // 한번 초기화하면 Read Only , 대문자로 적는 것이 약속
	int hp;
	static int attack = 10;

	public Zealot(String name) {
		this.NAME = name;
		this.hp = 100;
	}

}

class Dragoon {
	final String NAME;
	int hp;
	static int attack = 15;

	public Dragoon(String name) {
		this.NAME = name;
		this.hp = 100;
	}

}

class DarkTempler {
	final String NAME;
	int hp;
	static int attack = 50;

	public DarkTempler(String name) {
		this.NAME = name;
		this.hp = 100;
	}

}

class River {
	final String NAME;
	int hp;
	static int attack = 70;

	public River(String name) {
		this.NAME = name;
		this.hp = 100;
	}

}

public class GameStart {

	// 질럿이 드라군을 때림
	static void attack(Zealot u1, Dragoon u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}

	// 오버로딩 - 추가적재 - 다른함수로 인식
	static void attack(Dragoon u1, Zealot u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}

	static void attack(Zealot u1, Zealot u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}

	static void attack(Dragoon u1, Dragoon u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}

	static void attack(Zealot u1, DarkTempler u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}

	static void attack(Zealot u1, River u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}

	static void attack(Dragoon u1, DarkTempler u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}

	static void attack(Dragoon u1, River u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}

	static void attack(DarkTempler u1, Zealot u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}
	
	static void attack(DarkTempler u1, DarkTempler u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}

	static void attack(DarkTempler u1, Dragoon u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}

	static void attack(DarkTempler u1, River u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}

	static void attack(River u1, Zealot u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}

	static void attack(River u1, Dragoon u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 " + u1.NAME + "에 의해서 공격당하고 있습니다.");
		if(u2.hp <= 0) {
			System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
			System.out.println(u2.NAME+ "이 죽었습니다.");
		} else {			
			System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
		}
	}

	static void attack(River u1, DarkTempler u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}
	
	static void attack(River u1, River u2) {
		u2.hp = u2.hp - u1.attack;
		System.out.println(u2.NAME + "이 공격당하고 있습니다.");
		System.out.println(u2.NAME + "의 체력은 : " + u2.hp + "입니다.");
	}

	public static void main(String[] args) {
		// 공격력 업그레이드하기
		Zealot.attack++;

		// 질럿 생성하기
		Zealot z1 = new Zealot("1번질럿");
		System.out.println(z1.NAME + Zealot.attack);

		Zealot z2 = new Zealot("2번질럿");
		System.out.println(z2.NAME + Zealot.attack);

		Dragoon d1 = new Dragoon("1번드라군");
		Dragoon d2 = new Dragoon("2번드라군");

		DarkTempler dt1 = new DarkTempler("1번 다크템플러");
		DarkTempler dt2 = new DarkTempler("1번 다크템플러");

		River r1 = new River("1번 리버");
		River r2 = new River("1번 리버");

		// 공격하기
		attack(z1, d1);
		attack(z1, z2);
		attack(z1, dt1);
		attack(z1, r1);

		attack(d1, z1);
		attack(d1, d2);
		attack(d1, dt1);
		attack(d1, r1);
		
		attack(dt1, z1);
		attack(dt1, dt2);
		attack(dt1, d1);
		attack(dt1, r1);
		
		attack(r1, z1);
		attack(r1, r2);
		attack(r1, d1);
		attack(r1, dt1);
		
		

	}
}

package ch04;

class Rabbit {
	private String name; // heap변수, 전역변수, 맴버변수, 필드, 속성, 프로퍼티
	private int power;

	public Rabbit(String name, int power) {
		this.name = name;
		this.power = power;
	}

	// 행위 - 객체에 접근하는 것을 메서드로 하는게 객체지향의 시작
	// 변수를 변경하는 행위는 신중하게 접근자를 선택해야한다
	// 메서드는 그 클래스의 책임을 담당한다 (중요)
	boolean drink() {
		if (power >= 100) {
			return false;
		}
		power++;
		return true;
	}

	
//	void drink() {
//		if (power < 100) {
//			power++;
//		}
//	}

	public int getPower() {
		return power;
	}
	
	void setName(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
	

}

public class RabbitApp {
	public static void main(String[] args) {
		Rabbit r1 = new Rabbit("토끼", 20); // power 는 100이 max라고 가정
		System.out.println(r1.getPower());
		r1.drink();
		System.out.println(r1.getPower());
		r1.drink();
		System.out.println(r1.getPower());

		while (r1.drink()) {}
		System.out.println(r1.getPower());
		
		
		//이름변경
		r1.setName("산토끼");
		System.out.println(r1.getName());
	}
}

public - 모든 패키지에서 접근 가능

private - 클래스 내부

( 비어있는) - 같은 패키지에서 찾을 수 있음

코드 페이지에서 마우스 오른쪽을 눌러서 source -> generate constructor 를 이용

디폴트 생성자(없어도 호출됨 - 컴파일러가 자동으로만들어준다) - 초기화 용도
생성자를 수동으로 만든다면 디폴트 생성자를 만들어 주지 않는다.

package ch04;

// 상태와 행동
public class Person {

	String name;
	String job;
	int age;
	char gender;
	String bloodType;

	// 디폴트 생성자(없어도 호출됨 - 컴파일러가 자동으로만들어준다) - 초기화 용도
	// 생성자를 수동으로 만든다면 디폴트 생성자를 만들어 주지 않는다.
	// 매개변수가 없다
	public Person() { // 함수와 비슷하게 생겼지만 첫글자가 대문자며 클래스이름과 같다.

	}

	// 오버로딩(함수명이 같아도 매개변수가 다르면 다른 함수로 인식한다)
	public Person(String name, String job, int age, char gender, String bloodType) {
		this.name = name;
		this.job = job;
		this.age = age;
		this.gender = gender;
		this.bloodType = bloodType;
	}

}
package ch04;

public class PersonApp {
	public static void main(String[] args) {
		Person p1 = new Person(); // 인스턴스화
		p1.name = "최승희"; // 변수에 값넣기는 문법적으로는 가능하지만 현실적이지 않다. 이렇게 짜면 좋지 않다.
		p1.job = "의사";
		p1.gender = '여';
		p1.bloodType = "AB";
		p1.age = 45;

		Person p2 = new Person();
		p2.name = "이미녀";
		p2.job = "골프선수";
		p2.gender = '여';
		p2.bloodType = "O";
		p2.age = 28;

		Person p3 = new Person();
		p3.name = "김미남";
		p3.job = "교수";
		p3.gender = '남';
		p3.bloodType = "AB";
		p3.age = 47;

		System.out.println(p3.name);
		System.out.println(p3.job);
		System.out.println(p3.gender);
		System.out.println(p3.age);
		System.out.println(p3.bloodType);

		Person p4 = new Person(
			"홍길동",
			"학생",
			33,
			'남',
			"O"
		);
		
		System.out.println(p4.name);

	}
}

'Programming Language > Java' 카테고리의 다른 글

자바 public, private 비교  (0) 2020.03.27
자바 생성자 자동 생성하는법  (0) 2020.03.27
자바 final과 static 변수 이해하기  (0) 2020.03.27
200323 // STACK, 표현식, DAEMON  (0) 2020.03.23
이클립스 run 설정  (0) 2020.03.23

final변수는 한번초기화하면 바뀌지 않는 변수를 말한다.
보통 변수이름을 대문자로 적는다.

스타크래프트에서 유닛을 업그레이드하면 이미 있는 유닛뿐만 아니라
새로 생성되는 유닛들도 업그레이드된 채로 생성된다.

static 변수를 이용하여 업그레이드하면 가능.

package stars;

class Zealot {
	final String NAME; // 한번 초기화하면 Read Only , 대문자로 적는 것이 약속
	int hp;
	static int attack = 10;

	public Zealot(String name) {
		this.NAME = name;
		this.hp = 100;
	}

}

class Dragoon {
	final String NAME;
	int hp;
	static int attack = 15;

	public Dragoon(String name) {
		this.NAME = name;
		this.hp = 100;
	}

}

public class GameStart {
	public static void main(String[] args) {
		// 공격력 업그레이드하기
		Zealot.attack++;

		// 질럿 생성하기
		Zealot z1 = new Zealot("1번질럿");
		System.out.println(Zealot.attack);
	}
}

'Programming Language > Java' 카테고리의 다른 글

자바 생성자 자동 생성하는법  (0) 2020.03.27
자바 생성자와 오버로딩  (0) 2020.03.27
200323 // STACK, 표현식, DAEMON  (0) 2020.03.23
이클립스 run 설정  (0) 2020.03.23
자바 String  (0) 2020.03.23

stack이 들고있으면 지역변수

stack안에 없으면 모두 전역공간

---------------------------

for () {}  와 같이 메서드와 비슷하게 생긴것들은
표현식이라고 한다.(호출이 필요없이 바로 실행된다)

--------------------------------

while
어느정도 시간을 정해서 돌려야한다.
그렇지 않으면 자원을 너무 많이 사용한다.

daemon (데몬 프로세스) - 프로그램에서 끝없이 반복되는 기능 (감시)
리스너 - 감시한 것을 듣는 역할

---------------------------------

'Programming Language > Java' 카테고리의 다른 글

자바 생성자와 오버로딩  (0) 2020.03.27
자바 final과 static 변수 이해하기  (0) 2020.03.27
이클립스 run 설정  (0) 2020.03.23
자바 String  (0) 2020.03.23
자바for문 2의 승수 구하기, 구구단  (0) 2020.03.23

 

 

+ Recent posts