본문 바로가기

일상

Scratch To JAVA - 고양이와 강아지의 즐거운 놀이

스크래치는 알고리즘을 표현하기에 아주 좋은 툴이다.


이전에 작성한 고양이와 강아지의 즐거운 놀이를 JAVA로 옮겨보자.


1. 클래스를 생성한다.


public class CatAndDog {

}


2. 변수를 생성한다.


private static int catHp;
private static int dogHp;


3. 메인함수를 만들고 변수를 초기화, 순서를 정한다.


public static void main(String[] args) {
    catHp = 30;
    dogHp = 30;
    order();
}

private static void order(){
    int r = (int)(Math.random()*2 + 1);
    if(r>1){
        catAttack();
    }else{
        dogAttack();
    }
}


4. 고양이와 강아지의 동작을 만든다. 졌다는 표현을 누가 하는지 알 수 없으므로, 누가 말하는지만 추가해 준다.

마지막에 상대방에게 순서를 넘긴다.


고양이:

private static void catAttack(){
    if(catHp < 1){
        System.out.println("고양이: 내가 졌소.");
    }else{
        int dmg = (int)(Math.random()*10 + 1);
        dogHp += dmg * -1;
        if(dmg > 5){
            StringBuilder sb = new StringBuilder();
            sb.append("회심의 일격! 강아지는 ");
            sb.append(dmg);
            sb.append("의 데미지를 입었다!!!");
            System.out.println(sb.toString());
        }else{
            StringBuilder sb = new StringBuilder();
            sb.append("강아지는 ");
            sb.append(dmg);
            sb.append("의 데미지를 입었다.");
            System.out.println(sb.toString());
        }
        printStatus();
        dogAttack();
    }
}


강아지:

private static void dogAttack(){
    if(dogHp < 1){
        System.out.println("강아지: 내가 졌소.");
    }else{
        int dmg = (int)(Math.random()*10 + 1);
        catHp += dmg * -1;
        if(dmg > 5){
            StringBuilder sb = new StringBuilder();
            sb.append("회심의 일격! 강아지는 ");
            sb.append(dmg);
            sb.append("의 데미지를 입었다!!!");
            System.out.println(sb.toString());
        }else{
            StringBuilder sb = new StringBuilder();
            sb.append("강아지는 ");
            sb.append(dmg);
            sb.append("의 데미지를 입었다.");
            System.out.println(sb.toString());
        }
        printStatus();
        catAttack();
    }
}


5. JAVA의 Console에는 현재 상황을 보여주는 화면이 없으므로 순서를 넘기기 전에 전반적으로 뿌려주는 부분을 만든다.

private static void printStatus(){
    System.out.print("고양이의 남은 HP:");
    System.out.print(catHp);
    System.out.print(", 강아지의 남은 HP:");
    System.out.println(dogHp);
}


6. 끝


전체 소스는 다음과 같다.

public class CatAndDog {

    private static int catHp;
    private static int dogHp;

    public static void main(String[] args) {
        catHp = 30;
        dogHp = 30;
        order();
    }

    private static void order(){
        int r = (int)(Math.random()*2 + 1);
        if(r>1){
            catAttack();
        }else{
            dogAttack();
        }
    }

    private static void catAttack(){
        if(catHp < 1){
            System.out.println("고양이: 내가 졌소.");
        }else{
            int dmg = (int)(Math.random()*10 + 1);
            dogHp += dmg * -1;
            if(dmg > 5){
                StringBuilder sb = new StringBuilder();
                sb.append("회심의 일격! 강아지는 ");
                sb.append(dmg);
                sb.append("의 데미지를 입었다!!!");
                System.out.println(sb.toString());
            }else{
                StringBuilder sb = new StringBuilder();
                sb.append("강아지는 ");
                sb.append(dmg);
                sb.append("의 데미지를 입었다.");
                System.out.println(sb.toString());
            }
            printStatus();
            dogAttack();
        }
    }

    private static void dogAttack(){
        if(dogHp < 1){
            System.out.println("강아지: 내가 졌소.");
        }else{
            int dmg = (int)(Math.random()*10 + 1);
            catHp += dmg * -1;
            if(dmg > 5){
                StringBuilder sb = new StringBuilder();
                sb.append("회심의 일격! 강아지는 ");
                sb.append(dmg);
                sb.append("의 데미지를 입었다!!!");
                System.out.println(sb.toString());
            }else{
                StringBuilder sb = new StringBuilder();
                sb.append("강아지는 ");
                sb.append(dmg);
                sb.append("의 데미지를 입었다.");
                System.out.println(sb.toString());
            }
            printStatus();
            catAttack();
        }
    }

    private static void printStatus(){
        System.out.print("고양이의 남은 HP:");
        System.out.print(catHp);
        System.out.print(", 강아지의 남은 HP:");
        System.out.println(dogHp);
    }
}


실행시키면 다음과 같이 나온다.


강아지는 4의 데미지를 입었다.
고양이의 남은 HP:26, 강아지의 남은 HP:30
강아지는 2의 데미지를 입었다.
고양이의 남은 HP:26, 강아지의 남은 HP:28
회심의 일격! 강아지는 9의 데미지를 입었다!!!
고양이의 남은 HP:17, 강아지의 남은 HP:28
회심의 일격! 강아지는 10의 데미지를 입었다!!!
고양이의 남은 HP:17, 강아지의 남은 HP:18
회심의 일격! 강아지는 8의 데미지를 입었다!!!
고양이의 남은 HP:9, 강아지의 남은 HP:18
강아지는 4의 데미지를 입었다.
고양이의 남은 HP:9, 강아지의 남은 HP:14
회심의 일격! 강아지는 7의 데미지를 입었다!!!
고양이의 남은 HP:2, 강아지의 남은 HP:14
강아지는 2의 데미지를 입었다.
고양이의 남은 HP:2, 강아지의 남은 HP:12
강아지는 4의 데미지를 입었다.
고양이의 남은 HP:-2, 강아지의 남은 HP:12
고양이: 내가 졌소.


뻘짓 끝!

'일상' 카테고리의 다른 글

IQOS(아이코스) AS 후기  (0) 2017.09.16
Scratch - 가위바위보 하기  (0) 2017.07.18
Scratch - 고양이와 강아지의 즐거운 놀이  (0) 2017.07.05
Scratch - 카이사르 암/복호화  (0) 2017.07.04
피클 만들기  (0) 2017.07.04