고뇌

코드를 칠때마다 값이 달라지는 진귀한 현상

사재원 교수 2022. 6. 12. 16:12

분명 똑같이 친것 같은데 매번 다른 값이 나온다 

 

feat. 스타그래프트 게임

package NewProject;

import java.security.PublicKey;

import Test.jaewon;

/*
 * 공격은 순서대로 단, 객체가 살아있는 경우
 * 타켓은 첫번째 객체를 집중적으로 공격을 하고 객체가 소멸하면 그 다음 객체로 이동
 */

//테란 클래스
class Tarren{
	//마린 3마리
	Marine[] m = new Marine[3];
	//턴 변수 생성
	int turn = 0;
	//마린 3마리 생성자로 객체 넣기
	Tarren(){
		for(int i=0;i<m.length;i++) {
			m[i] = new Marine();
			m[i].print();
		}
	}
	//누가 공격할지?
	public Marine AttackM() {
		if(m[0] != null || m[1] != null || m[2] != null) {
			while(m[turn%3] == null) {
				turn ++;
			}
			System.out.println(turn%3 + "번째 마린이 공격합니다.");
			return m[turn++%3];
		}else {
			return null;
		}
	}
	//누가 맞을건지?
	public Marine WhoM() {
		for(int i=0;i<m.length;i++) {
			if(m[i] != null) {
				System.out.println(i + "번째 마린이 공격당합니다.");
				return m[i];
			}
		}
		return null;
	}
	//죽은 마린 확인
	public void CheckM() {
		for(int i=0;i<m.length;i++) {
			if(m[i] != null && m[i].hp <= 0) {
				System.out.println(i + "번째 마린이 죽었습니다 !!!!!!!!");
				m[i] = null;
			}
		}
	}
	//게임종료 확인
	public boolean GameoverM() {
		for(int i=0;i<m.length;i++) {
			if(m[i] != null) {
				return true;
			}
		}
		return false;
	}
}

//저그 클래스
class Zerg{
	//저글링1마리 히드라1마리
	Juggling j;
	Hydra h;
	//턴 변수
	int turn = 0;
	//객체 넣기
	Zerg(){
		j = new Juggling();
		h = new Hydra();
		j.print();
		h.print();
	}
	public Juggling goJug() {
		return j;
	}
	public Hydra goHydra() {
		return h;
	}

	//마린에게 공격 당하기
	public void WhoZ(Marine m) {
		if(j != null) {
			System.out.println("저글링이 공격을 당합니다.");
			j.hp -= m.attack;
		}else {
			System.out.println("히드라가 공격을 당합니다.");
			h.hp -= m.attack;
		}
	}
	//죽은 개체 확인
	public void CheckZ() {
		if(j != null && j.hp <= 0) {
			System.out.println("저글링이 죽었습니다 !!!!!!!!!!");
			j = null;
		}else if(h != null && h.hp <= 0){
			System.out.println("히드라가 죽었습니다 !!!!!!!!!!");
			h = null;
		}
	}
	//게임종료 확인
	public boolean GameoverZ() {
		if(j != null) {
			return true;
		}
		if(h != null) {
			return true;
		}
		return false;
	}

}



public class Q2 {
	public static void main(String[] args) {


		Tarren t = new Tarren();
		Zerg z = new Zerg();

		int count = 1;
		boolean chk = true;

		while(chk) {
			//테란 공격
			System.out.println((count ++)+ "턴 테란이 공격합니다.");
			Marine m = t.AttackM(); //누가 공격?
			z.WhoZ(m); //선정된 마린이 저그 공격
			z.CheckZ(); //죽은 저그 확인
			chk = z.GameoverZ();
			if(chk == false) {
				System.out.println("테란이 승리했습니다 ! ");
				continue;
			}


			Marine m1 = t.WhoM(); //누가 맞을래
			//저그 공격
			if(z.turn % 2 == 0 && z.j != null) {
				System.out.println("저글링이 공격합니다 ~~");
				//저글링 공격
				Juggling j = z.goJug(); //내가 공격하겠다
				m1.hp -= j.attack; //공격!
				t.CheckM();
				chk = t.GameoverM();
				if(chk == false) {
					System.out.println("저그가 승리하였습니다 !");
				}

			}else if(z.turn % 2 == 1 && z.h != null) {
				System.out.println("히드라가 공격합니다 ~~");
				//히드라 공격
				Hydra h = z.goHydra();
				m1.hp -= h.attack;
				t.CheckM();
				chk = t.GameoverM();
				if(chk == false) {
					System.out.println("저그가 승리하였습니다 !");
				}

			}

			z.turn ++;

		}
	}

}