Back-end/Java

[Java] 포켓몬 전투신 구현(상속, 구성을 이용)

디팔⸜( ◜࿁◝ )⸝︎︎ 2022. 9. 1. 15:01
package com.example.MyJavaProject;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws Exception {
        PocketMonsterGame newGame = new PocketMonsterGame();
        newGame.initGame();
    }
}

class PocketMonster {
    public String type = "";
    public String name = "";
    public int level = 1;
    public int battleAct;
    public int damage;
    public int hp = 20;

    public void attack() {
        System.out.println("당신의 포켓몬스터가 공격합니다.");
    }

    public void defence() {
        System.out.println("당신의 포켓몬스터가 방어합니다.");
    }

    public void avoid() {
        System.out.println("당신의 포켓몬스터가 회피합니다.");
    }

    public void run() {
        System.out.println("당신의 포켓몬스터가 도망칩니다.");
    }
}

class Pikachu extends PocketMonster {

    public Pikachu(String name) {
        this.type = "Electric";
        this.name = name;
    }
}

class Pairi extends PocketMonster{
    public Pairi(String name){
        this.type = "fire";
        this.name = name;
    }
}

class Kkobuk extends PocketMonster{
    public Kkobuk(String name){
        this.type = "water";
        this.name = name;
    }
}

class Isanghae extends PocketMonster{
    public Isanghae(String name){
        this.type = "grass";
        this.name = name;
    }
}

class RandomPoke extends PocketMonster{
    public RandomPoke(String name){
        this.name = name;
        this.hp = 15;
    }
}

class PocketMonsterGame {
    public void initGame() {
        System.out.println("게임이 시작 되었습니다. 원하는 포켓몬스터를 고르세요.");
        Scanner scanner = new Scanner(System.in);
        System.out.println("1. 피카츄 \t 2. 파이리 \t 3. 꼬부기 \t 4. 이상해씨");
        String selectedPocketMonsterNumber = scanner.nextLine();

        String selectedPocketMonster;
        switch (selectedPocketMonsterNumber) {
            case "1":
                selectedPocketMonster = "피카츄";
                break;
            case "2":
                selectedPocketMonster = "파이리";
                break;
            case "3":
                selectedPocketMonster = "꼬부기";
                break;
            case "4":
                selectedPocketMonster = "이상해씨";
                break;
            default:
                selectedPocketMonster = "고르지 않음";
                break;
        }
        System.out.println("당신이 고른 포켓몬스터는 " + selectedPocketMonster + " 입니다.");

        System.out.println("당신의 " + selectedPocketMonster + " 의 이름을 입력하세요.");
        String pocketMonstersName = scanner.nextLine();
        PocketMonster myMonster = new PocketMonster();
        switch (selectedPocketMonsterNumber) {
            case "1":
                myMonster = new Pikachu(pocketMonstersName);
                break;
            case "2":
                myMonster = new Pairi(pocketMonstersName);
                break;
            case "3":
                myMonster = new Kkobuk(pocketMonstersName);
                break;
            case "4":
                myMonster = new Isanghae(pocketMonstersName);
                break;
            default:
                myMonster = new Pikachu(pocketMonstersName);
                break;
        }
        System.out.println("당신의 " + selectedPocketMonster + " 입니다.\n<< 이름:" + myMonster.name + ", 레벨: " + myMonster.level
                + ", 속성: " + myMonster.type + " >>");

        System.out.println("당신은 " + myMonster.name + "와 함께 여행을 떠났습니다.");
        System.out.println("풀숲을 거닐던 찰나, 갑자기 풀숲에서 무엇인가 나타났습니다 !");
        String[] battlePokemon = {"피존", "구구", "꼬리선", "꼬렛"};
        double random = Math.random();
        int num = (int) Math.round(random * ((battlePokemon.length) - 1));
        PocketMonster randomPoke = new PocketMonster();
        if (battlePokemon[num] == "피존") {
            randomPoke = new RandomPoke("피존");
        } else if (battlePokemon[num] == "구구") {
            randomPoke = new RandomPoke("구구");
        } else if (battlePokemon[num] == "꼬리선") {
            randomPoke = new RandomPoke("꼬리선");
        } else if (battlePokemon[num] == "꼬렛") {
            randomPoke = new RandomPoke("꼬렛");
        }
        System.out.println(randomPoke.name + "이(가) 나타났다!");
        while (true){
            randomPoke.battleAct = (int) (Math.random() * 3) + 1;
            System.out.println("당신의 행동을 입력하세요.");
            System.out.println("1. 공격 \t 2. 방어 \t 3. 회피 \t 4. 도망");
//            System.out.println(myMonster.name + myMonster.hp + myMonster.damage);
//            System.out.println(randomPoke.name + randomPoke.hp + randomPoke.damage);
            String selectedAction = scanner.nextLine();
            switch (selectedAction) {
                case "1":
                    myMonster.damage = (int) (Math.random() * 6) + 4;
                    if (randomPoke.battleAct == 1) {
                        randomPoke.damage = (int) (Math.random() * 3) + 3;
                        System.out.println(randomPoke.name + "은(는) " + randomPoke.damage + "의 데미지로 공격한다!");
                        System.out.println(myMonster.name + "은(는) " + myMonster.damage + "의 데미지로 공격한다!");
                        myMonster.hp -= randomPoke.damage;
                        randomPoke.hp -= myMonster.damage;
                    } else if (randomPoke.battleAct == 2) {
                        System.out.println(myMonster.name + "은(는) " + myMonster.damage + "의 데미지로 공격한다!");
                        System.out.println(randomPoke.name + "은(는) 방어하여 데미지를 막아낸다!");
                        randomPoke.hp -= (myMonster.damage - 3);
                    } else if (randomPoke.battleAct == 3) {
                        System.out.println(myMonster.name + "은(는) " + myMonster.damage + "의 데미지로 공격한다!");
                        if (Math.random() < 0.7) {
                            System.out.println(randomPoke.name + "은(는) 회피하여 데미지를 받지 않았다!");
                        } else {
                            System.out.println(randomPoke.name + "은(는) 피하지 못했다!");
                            randomPoke.hp -= myMonster.damage;
                        }
                    } else if (randomPoke.battleAct == 4) {
                        System.out.println(myMonster.name + "은(는) " + myMonster.damage + "의 데미지로 공격한다!");
                        if (Math.random() < 0.3) {
                            System.out.println(randomPoke.name + "은(는) 도망쳤다!");
                            randomPoke.hp = 0;
                        } else {
                            System.out.println(randomPoke.name + "은(는) 도망가지 못했다!");
                            randomPoke.hp -= myMonster.damage;
                        }
                    }
                    break;
                case "2":
                    if (randomPoke.battleAct == 1) {
                        System.out.println(randomPoke.name + "은(는) " + randomPoke.damage + "의 데미지로 공격한다!");
                        System.out.println(myMonster.name + "은(는) 은(는) 방어하여 데미지를 막아낸다!");
                        myMonster.hp -= randomPoke.damage;
                        randomPoke.hp -= myMonster.damage;
                    } else if (randomPoke.battleAct == 2) {
                        System.out.println("아무 일도 일어나지 않았다!");
                    } else if (randomPoke.battleAct == 3) {
                        System.out.println("아무 일도 일어나지 않았다!");
                    } else if (randomPoke.battleAct == 4) {
                        if (Math.random() < 0.3) {
                            System.out.println(randomPoke.name + "은(는) 도망쳤다!");
                            randomPoke.hp = 0;
                        } else {
                            System.out.println("아무 일도 일어나지 않았다!");
                        }
                    }
                    break;
                case "3":
                    if (Math.random() < 0.5) {
                        if (randomPoke.battleAct == 1) {
                            System.out.println(randomPoke.name + "은(는) " + randomPoke.damage + "의 데미지로 공격한다!");
                            System.out.println(myMonster.name + "은(는) 회피하였다!");
                        } else if (randomPoke.battleAct == 2) {
                            System.out.println("아무 일도 일어나지 않았다!");
                        } else if (randomPoke.battleAct == 3) {
                            System.out.println("아무 일도 일어나지 않았다!");
                        } else if (randomPoke.battleAct == 4) {
                            if (Math.random() < 0.3) {
                                System.out.println(randomPoke.name + "은(는) 도망쳤다!");
                                randomPoke.hp = 0;
                            } else {
                                System.out.println("아무 일도 일어나지 않았다!");
                            }
                        } else {
                            if (randomPoke.battleAct == 1) {
                                System.out.println(randomPoke.name + "은(는) " + randomPoke.damage + "의 데미지로 공격한다!");
                                System.out.println(myMonster.name + "은(는) 회피에 실패했다! 피해를 받는다.");
                                myMonster.hp -= randomPoke.damage;
                            } else if (randomPoke.battleAct == 2) {
                                System.out.println("아무 일도 일어나지 않았다!");
                            } else if (randomPoke.battleAct == 3) {
                                System.out.println("아무 일도 일어나지 않았다!");
                            } else if (randomPoke.battleAct == 4) {
                                if (Math.random() < 0.3) {
                                    System.out.println(randomPoke.name + "은(는) 도망쳤다!");
                                    randomPoke.hp = 0;
                                } else {
                                    System.out.println("아무 일도 일어나지 않았다!");
                                }
                            }
                        }
                    }
                    break;
                case "4":
                    if (Math.random() < 0.4) {
                        if (randomPoke.battleAct == 1) {
                            System.out.println(randomPoke.name + "은(는) " + randomPoke.damage + "의 데미지로 공격한다!");
                            System.out.println(myMonster.name + "은(는) 도망에 실패했다! 피해를 받는다.");
                            myMonster.hp -= randomPoke.damage;
                        } else if (randomPoke.battleAct == 2) {
                            System.out.println("아무 일도 일어나지 않았다!");
                        } else if (randomPoke.battleAct == 3) {
                            System.out.println("아무 일도 일어나지 않았다!");
                        } else if (randomPoke.battleAct == 4) {
                            if (Math.random() < 0.3) {
                                System.out.println(randomPoke.name + "은(는) 도망쳤다!");
                                randomPoke.hp = 0;
                            } else {
                                System.out.println("아무 일도 일어나지 않았다!");
                            }
                        } else {
                            System.out.println(myMonster.name + "은 도망쳤다!");
                            myMonster.hp = 0;
                        }
                    }
                    break;
            }
            if(myMonster.hp <= 0) {
                System.out.println("이름: " + myMonster.name + " 레벨: " + myMonster.level + " 체력: 0");
                System.out.println("이름: " + randomPoke.name + " 레벨: " + randomPoke.level + " 체력: " + randomPoke.hp);
            } else if(randomPoke.hp <= 0){
                System.out.println("이름: " + myMonster.name + " 레벨: " + myMonster.level + " 체력: " + myMonster.hp);
                System.out.println("이름: " + randomPoke.name + " 레벨: " + randomPoke.level + " 체력: 0");
            } else {
                System.out.println("이름: " + myMonster.name + " 레벨: " + myMonster.level + " 체력: " + myMonster.hp);
                System.out.println("이름: " + randomPoke.name + " 레벨: " + randomPoke.level + " 체력: " + randomPoke.hp);
            }
            if(myMonster.hp <= 0 || randomPoke.hp <= 0){
                if(myMonster.hp<=0){
                    System.out.println(myMonster.name + "이(가) 쓰러졌다! 전투가 종료된다.");
                } else {
                    System.out.println(randomPoke.name + "이(가) 쓰러졌다! 승리하여 경험치를 얻는다!");
                }
                break;
            }
        }
    }
}