프로그래밍 언어 복습/JAVA
#56 JAVA 스타그래프트 게임
사재원 교수
2022. 6. 11. 22:44
아직 완벽히 숙지는 안됬지만 중간중간 강사님 코드를 훔쳐보며 스스로 할줄은 알게 된듯 하다.
기록목적으로 일단 올려봅니다 :)
[테란팀] 마린 3마리 VS [저그팀] 저글링 1마리 히드라 1마리
전투를 하는 게임입니다.
[기본 셋팅]
package NewProject;
class Unit{
int price;
int hp;
int attack;
int defence;
String target;
double speed;
String characteristic;
Unit(int price, int hp, int attack, int defence, String target, double speed, String characteristic){
this.price = price;
this.hp = hp;
this.attack = attack;
this.defence = defence;
this.target = target;
this.speed = speed;
this.characteristic = characteristic;
}
}
class Juggling extends Unit{
Juggling(){
super(50, 35, 5, 0, "지상", 2.612, "지상,소형,생체");
}
void print() {//출력
System.out.println("저글링의 생산비용은 미네랄 :"+price+", 체력: "+hp+", 공격력: "+attack+" 방어력: "+defence+
"\n, 공격대상: "+target+", 이동속도: "+speed+", 유닛특성: "+characteristic);
}
}
class Hydra extends Unit{
Hydra(){
super(100, 80, 10, 0, "지상,공중", 1.741, "지상,중형,생체");
}
void print() {//출력
System.out.println("히드라의 생산비용은 미네랄 :"+price+", 체력: "+hp+", 공격력: "+attack+" 방어력: "+defence+
"\n, 공격대상: "+target+", 이동속도: "+speed+", 유닛특성: "+characteristic);
}
}
class Marine extends Unit{
Marine(){
super(50, 50, 6, 0, "지상,공중", 1.875, "지상,소형,생체");
}
void print() {//출력
System.out.println("마린의 생산비용은 미네랄 :"+price+", 체력: "+hp+", 공격력: "+attack+" 방어력: "+defence+
"\n, 공격대상: "+target+", 이동속도: "+speed+", 유닛특성: "+characteristic);
}
}
public class Q1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Juggling j = new Juggling();
Hydra h = new Hydra();
Marine[] m = new Marine[3];
for(int i = 0;i<m.length;i++) {
m[i] = new Marine();
}
j.print();
h.print();
for(int i=0;i<m.length;i++) {
m[i].print();
}
}
}
이건 만드는데 쉽기도 하고 좀 칠게 많고 귀찮아서 만약 이 글을 읽는 사람들 중에 이 문제를 풀어보고 싶은 사람이 있다면
이 코드는 복붙을 하고 문제를 풀어보는게 좋을 것 같다.
정답 코드 공개
package NewProject;
import java.security.PublicKey;
import Test.jaewon;
/*
* 공격은 순서대로 단, 객체가 살아있는 경우
* 타켓은 첫번째 객체를 집중적으로 공격을 하고 객체가 소멸하면 그 다음 객체로 이동
*/
//테란 클래스
class Terran{
//1. 마린 객체 생성
Marine[] m = new Marine[3];
//2. 턴 횟수 변수 생성
int turn = 0;
//3. 마린 객체 생성
Terran(){
for(int i=0;i<m.length;i++) {
m[i] = new Marine();
m[i].print();
}
}
//4. 공격할 마린 선택
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;
}
}
//5. 공격을 당할 마린 선택
public Marine WhoM() {
for(int i=0;i<m.length;i++) {
if(m[i] != null) {
System.out.println(i + "번째 마린이 공격을 당합니다.");
return m[i];
}
}
return null;
}
//6. 죽은 마린 확인
public void CheckM() {
for(int i=0;i<m.length;i++) {
if(m[i] != null && m[i].hp <= 0) {
m[i] = null;
System.out.println(i + "번째 마린이 죽었습니다.");
}
}
}
//7. 게임종료 확인
public boolean GameoverM() {
for(int i=0;i<m.length;i++) {
if(m[i] != null) {
return true;
}
}
System.out.println("마린이 전부 죽었습니다.");
return false;
}
}
class Zerg{
//1. 히드라 저글링 생성
Juggling j;
Hydra h;
//2. 턴 변수 생성
int turn = 0;
//3. 히드라 저글링 객체 생성
Zerg(){
j = new Juggling();
h = new Hydra();
j.print();
h.print();
}
public Juggling goJug() {
return j;
}
public Hydra goHydra() {
return h;
}
//4. 마린을 공격함
//5. 공격을 당할 저그 선정
public void WhoZ(Marine m) {
if(j != null) {
System.out.println("저글링이 마린에게 공격을 당합니다.");
m.hp -= j.attack;
}else {
System.out.println("히드라가 마린에게 공격을 당합니다.");
m.hp -= h.attack;
}
}
//6. 죽은 객체 선정
public void CheckZ() {
if(j == null) {
j = null;
System.out.println("저글링이 죽었습니다.");
}if(h == null) {
h = null;
System.out.println("히드라가 죽었습니다.");
}
}
//7. 게임종료 선정
public boolean GameoverZ() {
if(j != null) {
return true;
}
if(h != null) {
return true;
}
return false;
}
}
public class Q2 {
public static void main(String[] args) {
Terran t = new Terran();
Zerg z = new Zerg();
boolean chk = true;
int count = 1;
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;
}
//저그가 공격
// 누가 공격할래?
System.out.println((count++) + "턴 저그 공격");
if(z.turn % 2 == 0 && z.j != null) {
//저글링이 공격
System.out.println("저글링이 공격합니다.");
Juggling j = z.goJug(); //저글링 생성 완료 내가 널 떄릴거야
m = t.WhoM(); //맞을 마린이 누구냐
m.hp -= j.attack; //저글링이 공격 !
t.CheckM(); //마린 누가 죽었니?
chk = t.GameoverM(); //마린이 다 죽었니?
if(chk == false) {
System.out.println("저그팀이 이겼습니다.");
}
}else if(z.turn % 2 == 1 && z.h != null) {
//히드라가 공격
Hydra h = z.goHydra();
m = t.WhoM();
m.hp -= h.attack;
t.CheckM();
chk = t.GameoverM();
if(chk == false) {
System.out.println("저그팀이 이겼습니다.");
}
}
z.turn ++;
}
}
}
내가 해본 문제 중에 나름 난이도가 있다보니 생각을 많이 하면서 하다보니 주석이 다소 유치하게 ...? 많이 달려있긴한데 그래도 도움은 될 거다... ㅎ..
오늘 하루종일 이 코드를 이해하고 외우는데 시간을 다 쏟은 듯 하다.
내일 눈 뜨자마자 이 코드를 백지상태에서 쳐보고 나의 암기력과 이해력을 테스트해봐야겠다. 아직 이 문제를 100퍼센트 마스터한 느낌은 확실히 아니다.
그리고 자꾸 자바 핑계로 미루고 있는데 html css script를 공부해야할 듯 하다...!! 더 이상 미루면 안될듯 하다.
감사합니다.