메모장

[실습 문제] 상속 (포켓몬) 본문

JAVA/[실습문제]

[실습 문제] 상속 (포켓몬)

Itchild 2024. 4. 8. 17:39
728x90
반응형

또 시작된 포켓몬 게임 ,,, 포켓몬게임을 이겨내자

 

[ 실 습 문제 ]

▶포켓몬 클래스

이름 ----------> 멤버변수

경험치

레벨

----------------> 생성자 위치

 

게임() --------------> 메서드

50% 확률로 게임성공

성공: 경험치+10~50랜덤상승

실패: 경험치+10 상승

대화()

상태출력()

ㅁㅁㅁ는 Lv.ㅁ [현재 경험치 /100]

 

▶피카츄 클래스 -----------> 자식클래스

게임() -------> 메서드(무조건 성공)

100% 게임성공

대화()

피카피카

 

▶파이리 클래스 -----------> 자식클래스

 

게임() ------------> 메서드 (5분의 1 확률로 성공한다)

20% 게임성공

-> 1~5 : 나오면 성공

 

대화()

파아~~

 

▶main()에서

 

피카츄2마리

파이리 1마리 생성

게임을 각각 10번씩 시켜서 결과 출력

한글코딩 먼저 해보기 ~~~~!
!!! 한글코딩 !!!

▶포켓몬 클래스 {
이름 ;
경험치;   : 기본값0
레벨; : 기본값 5

포켓몬 (이름){ // 생성자
이름
경험치 : 0
레벨 : 5
this(이름,0,5);
}


포켓몬 (이름, 경험치, 레벨){ // 생성자
이름
경험치
레벨
}

게임(){
랜덤 클래스 0~1 중에서 뽑기
if(0 이면 성공){
 경험치 랜덤으로 10~50 상승
} else {
 경험치 10 상승
}
}

대화(){
  
}
상태출력()
    ㅁㅁㅁ는 Lv.ㅁ [ 현재경험치 / 100]
}

▶피카츄 클래스{

피카츄(name, exp, level){ // 생성자
super(name, exp, level);
}

게임(){
 랜덤 클래스 무조건 0만 나오게 
 경험치 랜덤으로 10~50 상승
}

대화(){
 피카피카
}
}

▶파이리 클래스 {

파이리 (name, exp, level){
super(name, exp, level);

게임(){
랜덤클래스 1~5 까지 중 
if( 1이 나오면 ) {
성공 ! 경험치 10~50 랜덤  상승
}
else {
 실패! 경험치 10 상승
}
}

대화(){
  파아~~
}
}


▶ main() {

피카츄 pika1 = new 피카츄("이름", 5, 0)
피카츄 pika2 = new 피카츄("이름", )
파이리 ppp = new 파이리("파이리", 5,0)

int i = 0;
for(){ // 10번
  피카츄.게임()
  파이리.게임()
} 

pika1.대화()
pika2.대화()
ppp.대화()
 

계획을 세운 후 코딩 진행 !

 

package class04;

import java.util.Random;

class Pokemon {
	String name;
	int exp;
	int level;

	Pokemon(String name) { // 이름을 사용자가 지정 할수도 있고 
		this(name, 0, 5);
	}

	Pokemon(String name, int exp, int level) {
		this.name = name;
		this.exp = exp;
		this.level = level;
	}

	void game() {
		Random rand = new Random();
		int num = rand.nextInt(2);
		if (num == 0) {
			System.out.println("성공 !");
			this.exp += rand.nextInt(41) + 10;
		} else {
			System.out.println("실패...!");
			this.exp += 10;
		}

		while (this.exp >= 100) { // 경험치가 100이 넘어가면
			System.out.println(this.name + ", 레벨업!");
			this.level++; // 레벨업
			this.exp -= 100; // 레벨업 되고 경험치는 다시 초기화 되어야 하므로 -100 해주기
		}

	}

	void printChat() { // 대화

	}

	void print() { // 상태출력
		System.out.print(this.name + "는 Lv. " + this.level);
		System.out.println("[ " + this.exp + " / 100 ]");
		System.out.println();
	}
}

class Pikachu extends Pokemon {

	Pikachu(String name, int exp, int level) {
		super(name, exp, level);
	}

	void game() {
		Random rand = new Random();
		System.out.println("성공 !");
		this.exp += rand.nextInt(41) + 10;
		System.out.println("경험치 상승");
		System.out.println();

		while (this.exp >= 100) { // 경험치가 100이 넘어가면
			System.out.println(this.name + ", 레벨업!");
			this.level++; // 레벨업
			this.exp -= 100; // 레벨업 되고 경험치는 다시 초기화 되어야 하므로 -100 해주기
		}

	}

	void printChat() { // 대화
		System.out.println("대화 : 피카피카");
	}
}

class Pairi extends Pokemon {

	Pairi(String name, int exp, int level) {
		super(name, exp, level);
	}

	void game() {
		Random rand = new Random();
		int select = rand.nextInt(5) + 1;
		if (select == 1) {
			System.out.println("성공 !");
			this.exp += rand.nextInt(41) + 10;
			System.out.println("경험치 상승");
			System.out.println();
		} else {
			System.out.println("실패...!");
			this.exp += 10;
		}
		while (this.exp >= 100) { // 경험치가 100이 넘어가면
			System.out.println(this.name + ", 레벨업!");
			this.level++; // 레벨업
			this.exp -= 100; // 레벨업 되고 경험치는 다시 초기화 되어야 하므로 -100 해주기
		}

	}

	void printChat() { // 대화
		System.out.println("대화 : 파아~~");
	}
}

public class Test02 {

	public static void main(String[] args) {

		Pikachu pika1 = new Pikachu("피카츄1", 0, 5);
		Pikachu pika2 = new Pikachu("피카츄2", 0, 6);
		Pairi ppp = new Pairi("파이리", 0, 5);

		for (int j = 0; j < 10; j++) {
			pika1.game();
			pika2.game();
			ppp.game();
		}

		pika1.print();
		pika2.print();
		ppp.print();
		pika1.printChat();
		pika2.printChat();
		ppp.printChat();
	}
}
 

콘솔에 출력해보면

 
 

쭉쭉쭉 게임 10번 진행 후 포켓몬의 이름,레벨, 경험치

그리고 대화 메서드도 같이 출력 해볼수 있다.

 

 

강사님의 풀이 ★

코드를 많이 줄일수 있다 ! 줄일 수 있는 부분은 줄여나갈 것 !

package class04;

import java.util.Random;

class Poketmon {
	String name;
	int exp;
	int lv;
	String sound;// 오버라이딩을 더 줄여서
	// String 울음소리를 멤버변수에 정의해서 오버라이딩을 없애볼수 있다
	static Random rand = new Random();

	Poketmon() { // 지정하지않는 경우에는 디폴트로 "포켓몬"이 설정됨
		this("포켓몬");
	}

	Poketmon(String name) { // 이름을 사용자가 지정할수도있고,
		this.name = name;
		this.exp = 0;
		this.lv = 5;
		this.sound = "...";
	}

	void game() {
		int action = rand.nextInt(2);
		if (action == 0) {
			gameT();
		} else {
			gameF();
		}
		lvUp();
	}

	// 모듈화 하기
	// 코드가 아무리 짧아도 반복되면 모듈화를 사용하는게 좋다
	void gameT() {
		this.exp += (rand.nextInt(41) + 10);
		System.out.println(this.name + ", 성공!");
	}

	void gameF() {
		this.exp += 10;
		System.out.println(this.name + ", 실패...");
	}

	void lvUp() { // 레벨업 하는 메서드도 만듬
		while (this.exp >= 100) {
			this.exp -= 100;
			this.lv++;
			System.out.println(this.name + ", 레벨업!");
		}
	}

	void hello() { // 울음소리 하나만 지정하기
		// 오버 라이딩 : 상속 o, 메서드 시그니처 동일
		System.out.println(this.name + ": " + this.sound); // 포켓몬 : 울음소리
	}

	void printInfo() { // 출력
		System.out.println(this.name + "는 Lv." + this.lv + " [" + this.exp + "/100]");
	}
}

class Pika extends Poketmon {
	Pika() { // 기본생성자 일때 레벨저장하기 !
		this(5);
	}

	Pika(int lv) {// 생성자에서 무조건 인자가 많은거 부터 작성한다 , 인자가 있는거부터
		super("피카츄");
		this.lv = lv;
		this.sound = "피카피카";
	}

	void game() {
		int action = rand.nextInt(1);
		if (action == 0) {
			gameT();
		} else {
			gameF();
		}
		lvUp();
	}
}

class Charmander extends Poketmon {
	Charmander() {
		this(5);
	}

	Charmander(int lv) {
		super("파이리"); // super("파이리");
		this.lv = lv; // this.level = level; 레벨을 이 레벨로 바꿔줘
		this.sound = "파아~~~";
	}

	void game() {
		int action = rand.nextInt(5);
		if (action == 0) {
			gameT();
		} else {
			gameF();
		}
		lvUp();
	}
}

public class Test03 {
	public static void main(String[] args) {
		Pika p1 = new Pika(); // 피카츄,5,0
		Pika p2 = new Pika(10); // 피카츄,10,0

		Charmander c1 = new Charmander();
		Charmander c2 = new Charmander(11);

		for (int i = 0; i < 10; i++) {
			p1.game();
			p2.game();
			c1.game();
		}
		p1.printInfo();
		p2.printInfo();
		c1.printInfo();

		p1.hello();
		c1.hello();
	}
}
 

 

 

728x90
반응형

'JAVA > [실습문제]' 카테고리의 다른 글

[실습문제] 상속 (응용문제)  (0) 2024.04.08
[실습문제] 상속 (예제 만들기)  (0) 2024.04.08
[자판기 프로그램]  (0) 2024.04.08
포켓몬 문제 ( class 만들기 )  (0) 2024.04.08
[과제] Class  (0) 2024.04.08