본문 바로가기
IT/JAVA

[Java]스타크래프트 마린 만들기/call by reference, call by value

by 행복한 용용이 2020. 7. 17.
반응형

[연습한 코드]

/*

1.체력 : hp 100, 모드 : (0 : 일반, 1 : 흥분)

2. 공격 attack()

          1회 공격 당 적 체력 (0 : -10, 1 : -15)

    모드변경 changeMode()

                내체력 -25;

                내체력 40이하일 경우는 모드 변경 불가.

*/

 

public class Marine {

     boolean who;

     int hp ;

     int mode;

 

 

     public Marine(){

         who=false;

         hp=100;

         mode=0;

     }

 

     void attack(int count) {

         if (who == false)

         {

             if (mode == 0){

                 hp-=10*count;

             }else {

                 hp-=15*count;

             }

         }

 

     }

 

     void changeMode() {

         if (who ==true){

            if (hp>40){

                 mode = 1;

                 hp-=25;

             } else {

                 mode =0;

             }

          } else if (who == false){

             mode=1;

         }

 

    }

 

}

 

 

 

public class StarCraft {

     public static void main(String[] args) {

         Marine my=new Marine();

        

         Marine com=new Marine();

         System.out.println("내체력 : "+my.hp+" 적체력 : "+com.hp);

    

         my.who = true;

         com.who = false;

         int count = 2;

         System.out.println("내가 적을 "+count+"회 공격!!!");

         my.attack(count);

         com.attack(count);

         System.out.println("내체력 : "+my.hp+" 적체력 : "+com.hp);

 

         my.who = false;

         com.who = true;

         count = 4;

         System.out.println("적이 나를 "+count+"회 공격!!!");

         my.attack(count);

         com.attack(count);

         System.out.println("내체력 : "+my.hp+" 적체력 : "+com.hp);

         //내체력 : 60 적체력 : 80

 

 

         System.out.println("모드 변경!!!");

         my.who = true; com.who = false;

         my.changeMode();

         com.changeMode();

         System.out.println("내체력 : "+my.hp+" 적체력 : "+com.hp);

         //내체력 : 35 적체력 : 80

 

 

         count = 3;

         System.out.println("내가 적을 "+count+"회 공격!!!");

         my.attack(count);

         com.attack(count);

         System.out.println("내체력 : "+my.hp+" 적체력 : "+com.hp);

         //내체력 : 35 적체력 : 35

 

    

         System.out.println("모드 변경!!!");

         my.changeMode();

         com.changeMode();

         if (my.hp<40)

         {

             System.out.println("경고 : 모드 변경 불가!!!");

         }

         System.out.println("내체력 : "+my.hp+" 적체력 : "+com.hp);

         //경고 : 모드 변경 불가!!!

         //내체력 : 35 적체력 : 35

 

    

         count = 3;

         System.out.println("내가 적을 "+count+"회 공격!!!");

         my.attack(count);

         com.attack(count);

         System.out.println("내체력 : "+my.hp+" 적체력 : "+com.hp);

         //내체력 : 35 적체력 : die

    

     }

}

 


정답)

★인자값 자리에 Marine의 틀을 가진 객체를 넣을 수 있다.

★println 안에서 method 도 실행 가능

★숫자에 문자열 더하면 문자열 됨 ex) 15+""

call by reference : 주소값으로 부름

인자값으로 (Object)class타입이 전달될 때는 무조건 call by reference!

call by value : 값으로 부름

기본데이타 타입은 value를 전달

call by reference

 


 

 

/*

1.체력 : hp 100, 모드 : (0 : 일반, 1 : 흥분)

2. 공격 attack()

          1회 공격 당 적 체력 (0 : -10, 1 : -15)

 

   모드변경 changeMode()

               내체력 -25;

          내체력 40이하일 경우는 모드 변경 불가.

 

 

          call by value

          call by reference

*/

 

public class Marine {

     int hp ;

     int mode;

     int power;

 

     public Marine(){

          hp=100;

          mode=0;

          power =10;

     }

 

 

 

     void attack(Marine enemy,int count) {

          if (mode==0){

               for (int i=0;i<count ;i++ )

                    enemy.hp-=power;

          } else {

               for (int i=0;i<count ;i++ )

                    enemy.hp-=power;

          }

     }

 

 

     void changeMode() { //mode 바꾸는 method

          if (hp>40){

               hp-=25;

               mode =1;

               power=15;

          } else{

               System.out.println("경고 : 모드변경불가!!!");

          }

     }

 

 

     String getStatus() { //현재 상태 표시하는 method

          return hp <0 ? "die" : hp + "";   //숫자에 문자열 더하면 문자열 됨.

     }

}

 

 

 

public class StarCraft {

     public static void main(String[] args) {

          Marine my=new Marine();

 

 

          Marine com=new Marine();

          System.out.println("내체력 : "+my.getStatus()+" 적체력 : "+com.getStatus());

 

          int count = 2;

          System.out.println("내가 적을 "+count+"회 공격!!!");

          my.attack(com,count);

          System.out.println("내체력 : "+my.getStatus()+" 적체력 : "+com.getStatus());

 

 

          count = 4;

          System.out.println("적이 나를 "+count+"회 공격!!!");

          com.attack(my,count);

          System.out.println("내체력 : "+my.getStatus()+" 적체력 : "+com.getStatus());

          //내체력 : 60 적체력 : 80

 

 

          System.out.println("모드 변경!!!");

          my.changeMode();

          System.out.println("내체력 : "+my.getStatus()+" 적체력 : "+com.getStatus());

          //내체력 : 35 적체력 : 80

 

 

          count = 3;

          System.out.println("내가 적을 "+count+"회 공격!!!");

          my.attack(com,count);

          System.out.println("내체력 : "+my.getStatus()+" 적체력 : "+com.getStatus());

          //내체력 : 35 적체력 : 35

 

 

          System.out.println("모드 변경!!!");

          my.changeMode();

          System.out.println("내체력 : "+my.getStatus()+" 적체력 : "+com.getStatus());

          //경고 : 모드 변경 불가!!!

          //내체력 : 35 적체력 : 35

 

 

          count = 3;

          System.out.println("내가 적을 "+count+"회 공격!!!");

          my.attack(com,count);

          System.out.println("내체력 : "+my.getStatus()+" 적체력 : "+com.getStatus());

          //내체력 : 35 적체력 : die

     }

}

 

 

 

결과)

[출처] 빡쏘끼룩

반응형

'IT > JAVA' 카테고리의 다른 글

[Java]택시요금 code  (0) 2020.07.20
[Java]상속 (inheritance)/overriding(재정의)/super  (0) 2020.07.18
[Java]사각형과 원 넓이, 둘레 구하기 code  (0) 2020.07.08
[Java]method 오버로딩  (0) 2020.07.05
[Java]생성자 사용  (0) 2020.07.04