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;
}
}
}
}