The Debugging Chronicles : "코드의 미학"

포켓몬 잡기 01 본문

Project

포켓몬 잡기 01

sweetseonah1004 2024. 7. 8. 15:03

 

[포켓몬스터 게임 프로그램을 작성해주세요.]

class 포켓몬

   String 타입 // 모든 포켓몬은 타입이 반드시 존재한다. ex) 전기, 물, ...

   String 이름 // 모든 포켓몬은 이름이 반드시 존재한다. ex) 피카츄, 꼬부기, ...

   int 레벨 // 새로 잡은 포켓몬의 레벨은 1~5 랜덤한 값을 가진다.

   int 경험치 // 새로 잡은 포켓몬의 경험치는 0이다.

   void attack() // 50%의 확률로 성공 -> 성공시 50~500 사이의 경험치 획득  -> 선택 포켓몬만.

   void hello() // 피카츄는 삐까삐까, 꼬부기는 꼬북꼬북 등의 울음소리를 출력한다.

   void levelUp() // 경험치가 100을 채울때마다 레벨은 +1


class 피카츄

   attack() // 전기타입 -> 전기충격

   hello() // 삐까삐까



class 꼬부기

   attack() // 물타입 -> 물대포

   hello() // 꼬북꼬북



syso(포켓몬객체); 수행시 [피카츄 전기타입 Lv5 exp10]으로 출력



1. 게임하기 2. 전체상태출력 3. 울음소리듣기 4. 포켓몬잡기 0. 게임종료



# 피카츄,꼬부기 대신 다른 포켓몬들로 구현할 것!

# 요구사항을 벗어나지않는 조건에서 기능 및 설정 추가 가능!





1. 게임하기 -> 누구로 플레이 할지 선택 -> 공격 50% -> 성공시 레벨업.

 

 

 


 

4번 메뉴인 포켓몬 잡기를 어떻게 구현할까 고민하다가 아래와 같이 짜보았다.

 

else if (menu == 4) {// 포켓몬 잡기)
			  // 랜덤으로 만난 캐릭터	
				// 4가지 포켓몬 객체들을 생성하여 Poketmon 타입로 만든 poketmons 배열에 담는다.
				Poketmon[] poketmons = { new Purin(), new Fishking(), new Diglett(), new Sixtail()};
				// 랜덤으로 숫자를 생성해서
				Random rand = new Random();
				// 배열 범위를 벗어나는 오류를 방지하기 위해 randNum을 1이 아닌 0부터 시작하게 하여,
				// 0 ~ length-1인 값이 randNum에 담게 한다.
				int randNum = rand.nextInt(poketmons.length);
				// 즉0에서 3사이의 랜덤숫자를 poketmons배열에 담아
				// apperedPoketmon에 값으로 초기화한다.
				Poketmon appearedPoketmon = poketmons[randNum];
				// 포켓몬이 나타났을 시, 
					// 1. 잡겠습니까? 2. 도망가겠습니까?중에 선택 하도록 한다.
				System.out.println("====================================");
				System.out.println(appearedPoketmon.name+"이 나타났습니다.!!" );
				System.out.println("====================================");
				System.out.println("1. 잡으시겠습니까? 2. 도망가시겠습니까?>>>");
				int ans = sc.nextInt();
				
				if(ans == 1) {							
						System.out.println("====================================");
					    System.out.println(" ■■■■■■■");
					    System.out.println("■■■■■■■■■");
					    System.out.println("■■■■@■■■■");
					    System.out.println("□□□□□□□□□");
					    System.out.println(" □□□□□□□");
						System.out.println("====================================");
						// datas에 담긴 값은 Poketmon 클래스로 인스턴스화 된 객체이므로
						// 객체의 이름을 출력하기 위해서는 .name을 해주어야 한다.
						System.out.println("축하합니다!"+appearedPoketmon.name+"을 잡으셨습니다!!");
						System.out.println("====================================");
						
						datas[count++] = appearedPoketmon;
				// 도망가시겠습니까를 선택했을 경우 
				}else if(ans==2){
					System.out.println("====================================");
					System.out.println("도망~~~~~");
					System.out.println("====================================");
				// 1,2번 외에 번호를 입력했을 경우
				}else {
					System.out.println("====================================");
					System.out.println("번호를 잘못 입력하셨습니다");
					System.out.println("====================================");
				}
			}