package pokemon;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
/*
플레이어(트레이너)가 있습니다.
트레이너는 1명당 최대 6마리의 포켓몬을 가질수있습니다.
트레이너는 이름을 가질수있습니다.
이름이 없는 트레이너는 '무명'으로 설정됩니다.
트레이너는 소유한 모든 포켓몬들의 상태를 출력할 수 있습니다.
소유한 포켓몬의 체력이 0이라면 [기절]을 출력해주세요.
트레이너는 자랑을 할 수 있습니다.
자랑하기를 실행하면 레벨이 가장 높은 포켓몬을 출력해주세요.
레벨이 가장 높은 포켓몬이 2마리 이상이라면 경험치가 높은 포켓몬이 출력됩니다.
경험치가 동일하면 먼저 저장된 포켓몬이 출력됩니다.
트레이너는 대결을 할 수 있습니다.
야생의 포켓몬을 만나면 내 포켓몬과 야생 포켓몬은 게임을 합니다.
야생 포켓몬을 만났을때, 야생 포켓몬과 게임할 포켓몬을 선택합니다.
게임에서 승리하면, 야생 포켓몬을 내 포켓몬으로 추가합니다.
포켓몬은 이름,체력,레벨,경험치가 있습니다.
포켓몬은 반드시 이름을 가져야합니다.
체력은 5, 레벨은 5, 경험치는 0으로 설정됩니다.
포켓몬은 게임을 할때마다 체력을 3 잃습니다.
포켓몬은 70% 확률로 게임을 성공합니다.
만약 게임에 실패한다면 즉시 체력을 3 잃습니다.
게임을 성공하면 50~300 사이의 랜덤 경험치를 획득합니다.
레벨업 할때마다 포켓몬 고유의 울음소리를 냅니다.
*/
class Player{
private Pokemon[] datas;
private String name;
private int count;
Player() {
this("무명");
}
Player(String name) {
this.datas=new Pokemon[6];
this.datas[0]=new Pika();
this.datas[1]=new Butterfree();
this.datas[2]=new Psyduck();
this.datas[0].setExp(5);
this.datas[1].setExp(10);
this.datas[2].setExp(20);
this.name=name;
this.count=3;
}
void printDatas() {
for(Pokemon v:datas) {
if(v==null) {
System.out.println("비어있는 공간");
}
else {
System.out.println(v);
}
}
}
void show() {
int maxLevel=this.datas[0].getLevel();
int maxExp=this.datas[0].getExp();
int maxIndex=0;
for(int i=1;i<count;i++) {
if(this.datas[i].getLevel() > maxLevel) {
maxIndex=i;
}
else if(this.datas[i].getLevel() == maxLevel) {
if(this.datas[i].getExp() > maxExp) {
maxIndex=i;
}
}
}
System.out.println(this.datas[maxIndex]);
}
void game(Pokemon pokemon) {
//1,2,3 누구로 대결을 시킬지 플레이어가 지정
Scanner sc=new Scanner(System.in);
int num;
while(true) {
System.out.print("번호 입력");
num=sc.nextInt();
int code=check(num);
if(code==0) {
break;
}
if(code==1) {
System.out.println("범위 외 입력입니다");
}
else if(code==2) {
System.out.println("비어있는 공간입니다");
}
else if(code==3) {
System.out.println("기절한 포켓몬입니다!");
}
}
this.datas[num-1].game();
}
int check(int num) { //조건이 너무 길어 함수화 한다
//왜 안되는지 알아야 할 때 코드넘버 보내기도 한다
if(num<1 || this.datas.length<num) {
return 1;
}
else if(this.datas[num-1]==null) {
return 2;
}
else if(this.datas[num-1].getHp() <= 0) {
return 3;
}
return 0;
}
public Pokemon[] getDatas() {
return datas;
}
public void setDatas(Pokemon[] datas) {
this.datas = datas;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Player [datas=" + Arrays.toString(datas) + ", name=" + name + "]";
}
}
class Pokemon{
private String name;
private int hp;
private int level;
private int exp;
Pokemon(String name){
this.name=name;
this.hp=5;
this.level=5;
this.exp=0;
}
void game() {
if(this.hp<4) {
System.out.println("체력이 낮아 게임을 할 수 없습니다");
}
this.hp-=3;
int num=new Random().nextInt(10);
if(num<=2) {
System.out.println("졌네요..");
this.hp-=3;
return;
}
System.out.println("이겼습니다!");
int expUp=new Random().nextInt(251)+50;
this.exp+=expUp;
while(true) {
if(this.exp<100) {
break;
}
this.exp-=100;
this.level++;
this.hello();
}
}
void hello() {
System.out.println("울기");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public int getExp() {
return exp;
}
public void setExp(int exp) {
this.exp = exp;
}
@Override
public String toString() {
if(this.hp<=0) {
return "[기절]" + this.name;
}
return "Pokemon [name=" + name + ", hp=" + hp + ", level=" + level + ", exp=" + exp + "]";
}
}
class Pika extends Pokemon{
Pika(){
super("피카츄");
}
@Override
void hello() {
System.out.println("피카피카");
}
}
class Butterfree extends Pokemon{
Butterfree(){
super("버터플");
}
@Override
void hello() {
System.out.println("버터버터");
}
}
class Psyduck extends Pokemon{
Psyduck(){
super("고라파덕");
}
@Override
void hello() {
System.out.println("파덕파덕");
}
}
public class Test01 {
public static void main(String[] args) {
Player p1=new Player();
p1.printDatas();
// p1.game(new Pika());
p1.show();
}
}
show() 메서드를 작성할 때 처음엔 굉장히 길게 작성했는데 다 작성하고 나니 너무 짧아져서 놀랐다..
코드를 최대한 간략화해서 쓸 수 있도록 노력해야겠다.
'IT > JAVA' 카테고리의 다른 글
Java Section 10 : 상속 (0) | 2025.01.17 |
---|---|
Java Section 09 : 생성자 (0) | 2025.01.16 |
Java Section 08 : 메서드 (0) | 2025.01.15 |
[DAY 11] 캡슐화, 상속, 오버라이딩, Object 클래스 (0) | 2025.01.14 |
Java Section 07 : 클래스 (0) | 2025.01.14 |